您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
147 行
5.2 KiB
147 行
5.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using Unity.UIWidgets.animation;
|
|
using Unity.UIWidgets.foundation;
|
|
using Unity.UIWidgets.gestures;
|
|
using Unity.UIWidgets.painting;
|
|
using Unity.UIWidgets.rendering;
|
|
using Unity.UIWidgets.scheduler;
|
|
using Unity.UIWidgets.ui;
|
|
using Unity.UIWidgets.widgets;
|
|
using TextStyle = Unity.UIWidgets.painting.TextStyle;
|
|
|
|
namespace Unity.UIWidgets.cupertino {
|
|
|
|
public class CupertinoContextMenuAction : StatefulWidget {
|
|
|
|
public CupertinoContextMenuAction(
|
|
Key key = null,
|
|
Widget child = null,
|
|
bool isDefaultAction = false,
|
|
bool isDestructiveAction = false,
|
|
VoidCallback onPressed = null,
|
|
IconData trailingIcon = null
|
|
) : base(key: key) {
|
|
D.assert(child != null);
|
|
this.child = child;
|
|
this.isDefaultAction = isDefaultAction;
|
|
this.isDestructiveAction = isDestructiveAction;
|
|
this.onPressed = onPressed;
|
|
this.trailingIcon = trailingIcon;
|
|
|
|
}
|
|
public readonly Widget child;
|
|
public readonly bool isDefaultAction;
|
|
public readonly bool isDestructiveAction;
|
|
public readonly VoidCallback onPressed;
|
|
public readonly IconData trailingIcon;
|
|
|
|
public override State createState() {
|
|
return new _CupertinoContextMenuActionState();
|
|
}
|
|
}
|
|
public class _CupertinoContextMenuActionState : State<CupertinoContextMenuAction> {
|
|
public static Color _kBackgroundColor = new Color(0xFFEEEEEE);
|
|
public static Color _kBackgroundColorPressed = new Color(0xFFDDDDDD);
|
|
public static float _kButtonHeight = 56.0f;
|
|
|
|
public static readonly TextStyle _kActionSheetActionStyle = new TextStyle(
|
|
fontFamily: ".SF UI Text",
|
|
inherit: false,
|
|
fontSize: 20.0f,
|
|
fontWeight: FontWeight.w400,
|
|
color: CupertinoColors.black,
|
|
textBaseline: TextBaseline.alphabetic
|
|
);
|
|
public GlobalKey _globalKey = GlobalKey<State<StatefulWidget>>.key();
|
|
bool _isPressed = false;
|
|
|
|
void onTapDown(TapDownDetails details) {
|
|
setState(()=>{
|
|
_isPressed = true;
|
|
});
|
|
}
|
|
|
|
void onTapUp(TapUpDetails details) {
|
|
setState(()=>{
|
|
_isPressed = false;
|
|
});
|
|
}
|
|
|
|
void onTapCancel() {
|
|
setState(()=>{
|
|
_isPressed = false;
|
|
});
|
|
}
|
|
|
|
TextStyle _textStyle {
|
|
get {
|
|
if (widget.isDefaultAction) {
|
|
return _kActionSheetActionStyle.copyWith(
|
|
fontWeight: FontWeight.w600
|
|
);
|
|
}
|
|
if (widget.isDestructiveAction) {
|
|
return _kActionSheetActionStyle.copyWith(
|
|
color: CupertinoColors.destructiveRed
|
|
);
|
|
}
|
|
return _kActionSheetActionStyle;
|
|
}
|
|
|
|
}
|
|
|
|
public override Widget build(BuildContext context) {
|
|
List<Widget> widgets = new List<Widget>();
|
|
widgets.Add(new Flexible(child: widget.child));
|
|
if (widget.trailingIcon != null) {
|
|
widgets.Add(new Icon(
|
|
widget.trailingIcon,
|
|
color: _textStyle.color));
|
|
}
|
|
|
|
return new GestureDetector(
|
|
key: _globalKey,
|
|
onTapDown: onTapDown,
|
|
onTapUp: onTapUp,
|
|
onTapCancel: onTapCancel,
|
|
onTap: widget.onPressed == null
|
|
? (GestureTapCallback) null
|
|
: () => {
|
|
if (widget.onPressed != null) {
|
|
widget.onPressed();
|
|
}
|
|
},
|
|
behavior: HitTestBehavior.opaque,
|
|
child:
|
|
new ConstrainedBox(
|
|
constraints: new BoxConstraints(
|
|
minHeight: _kButtonHeight
|
|
),
|
|
child:
|
|
new Container(
|
|
padding: EdgeInsets.symmetric(
|
|
vertical: 16.0f,
|
|
horizontal: 10.0f
|
|
),
|
|
decoration: new BoxDecoration(
|
|
color: _isPressed ? _kBackgroundColorPressed : _kBackgroundColor,
|
|
border: new Border(
|
|
bottom: new BorderSide(width: 1.0f, color: _kBackgroundColorPressed)
|
|
)
|
|
),
|
|
child: new DefaultTextStyle(
|
|
style: _textStyle,
|
|
child: new Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children:widgets
|
|
)
|
|
)
|
|
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|