dilemma static method
Future<DialogResult?>
dilemma(
- BuildContext context, {
- required String title,
- required String content,
- String rightButton = "OK",
- String leftButton = "CANCEL",
- bool centerContent = false,
- bool barrierDismissible = true,
- bool? dark,
- VoidCallback? onTapedRight,
- VoidCallback? onTapedLeft,
选择项,确定或者取消。
用途
- 参数选择
- 内容判断
- 条款确认
参数 |参数名|描述|是否必须|
- context 上下文
- title 信息标题
- centerContent 是否居中显示,默认不居中。
- onTapedRight 按钮点击事件响应。
- onTapedLeft 排版,左边缩进的距离。
- dark 是否强制指定夜间模式或者白天模式,不设置使用系统默认。
- barrierDismissible 对话框空白区域点击关闭是否支持,默认支持点击空白区域可以关闭对话框。
Implementation
static Future<DialogResult?> dilemma(
BuildContext context, {
required String title,
required String content,
String rightButton = "OK",
String leftButton = "CANCEL",
bool centerContent = false,
bool barrierDismissible = true,
bool? dark,
VoidCallback? onTapedRight,
VoidCallback? onTapedLeft,
}) {
bool _dark = dark ?? (Theme.of(context).brightness == Brightness.dark);
Color _barrierColor = _dark ? Color(0xaa000000) : Color(0x9effffff);
Color _backgroundColor = _dark ? Colors.black45 : Colors.white60;
Color _fontColor = _dark ? Colors.white : Colors.black;
return showDialog<DialogResult>(
context: context,
barrierColor: _barrierColor,
barrierDismissible: barrierDismissible,
builder: (context) {
return Dialog(
backgroundColor: _backgroundColor,
// 对话框区域背景色
elevation: 12.0,
insetPadding: EdgeInsets.zero,
clipBehavior: Clip.antiAlias,
shape: const RoundedRectangleBorder(
borderRadius: _borderRadius,
),
// insetAnimationCurve: Curves.easeInOutQuad,
// insetAnimationDuration: Duration(milliseconds: 5000),
child: TernaryContainer(
inDialog: true,
header: Container(
alignment: Alignment.center,
padding: const EdgeInsets.only(top: 25.0, bottom: 10.0),
child: Text(
title,
style: TextStyle(
color: _fontColor,
fontSize: 20.0,
shadows: kElevationToShadow[4]),
),
),
content: Container(
padding: const EdgeInsets.only(
top: 10.0, bottom: 20.0, left: 20.0, right: 10.0),
child: Text(
content,
textAlign: centerContent ? TextAlign.center : TextAlign.left,
style: TextStyle(
color: _fontColor,
),
),
),
footer: Column(
children: [
Divider(
color: Colors.grey,
height: 2,
),
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
alignment: Alignment.center,
child: TextButton(
onPressed: onTapedLeft ??
() {
Navigator.of(context).pop(
DialogResult(status: false, code: 200));
},
child: Text(
leftButton,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.0,
color: Theme.of(context).primaryColor),
),
),
),
),
Container(
height: 48,
child: const VerticalDivider(
color: Colors.grey,
width: 2,
),
),
Expanded(
child: Container(
alignment: Alignment.center,
child: TextButton(
onPressed: onTapedRight ??
() {
Navigator.of(context).pop(
DialogResult(status: true, code: 200));
},
child: Text(
rightButton,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.0,
color: Theme.of(context).primaryColor),
),
),
),
),
],
),
),
],
),
),
);
},
);
}