WGShare.Mobile.Flutter/wgshare/lib/utils/hint_dialog.dart

203 lines
4.7 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:io';
import 'color_util.dart';
showHintDialog(
BuildContext context,
String? content,
Function onConfirmTap, {
String title = "提示",
btnWidth = 70.0,
btnHeight = 32.0,
bool hideCancelBtn = false,
Function? onCancelTap,
}) {
if (Platform.isIOS) {
showCupertinoDialog(
context: context,
builder: (_) => HintIOSDialog(
title, content, hideCancelBtn, onCancelTap, onConfirmTap)
);
} else {
showDialog(
context: context,
barrierDismissible: true,
builder: (_) => HintDialog(
title,
content,
btnWidth,
btnHeight,
hideCancelBtn,
onCancelTap,
onConfirmTap,
));
}
}
/// 提示dialog new CircularProgressIndicator(),
class HintDialog extends StatefulWidget {
final String title; //标题
final String? content; //提示内容
final double btnWidth; //按钮宽度
final double btnHeight; //按钮高度
final bool hideCancelBtn; //是否隐藏取消btn
final Function? onCancelTap; //取消事件
final Function onConfirmTap; //确认时件
HintDialog(
this.title,
this.content,
this.btnWidth,
this.btnHeight,
this.hideCancelBtn,
this.onCancelTap,
this.onConfirmTap,
);
@override
State<StatefulWidget> createState() {
return HintDialogState();
}
}
class HintDialogState extends State<HintDialog> {
@override
Widget build(BuildContext context) {
return Center(
child: Container(
height: 168.0,
margin: EdgeInsets.only(left: 20.0, right: 20.0),
padding: EdgeInsets.only(left: 15.0, top: 15.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(4.0),
),
child: _contentStyle(),
),
);
}
///内容区域样式
_contentStyle() {
return Column(
children: <Widget>[
_title(),
Expanded(
child: _hintMsg(),
),
Container(
margin: EdgeInsets.only(bottom: 15.0, right: 15.0),
child: _bottomBtn(),
),
],
);
}
///提示标题布局
_title() {
return Container(
alignment: Alignment.centerLeft,
child: Text(widget.title,
style: TextStyle(
fontSize: 16,
color: ColorUtil.Color_85_117_242,
decoration: TextDecoration.none)),
);
}
///提示信息布局
_hintMsg() {
return Container(
alignment: Alignment.topLeft,
margin: EdgeInsets.all(10.0),
child: Text(widget.content!,
style: TextStyle(
fontSize: 14.0,
color: ColorUtil.Color_85_117_242,
decoration: TextDecoration.none)),
);
}
///取消 确认按钮布局
_bottomBtn() {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Container(
child: Text('取消'),
),
Container(
child: Text('确认'),
),
],
);
}
///取消事件
_onCancelTap() {
Navigator.of(context).pop();
widget.onCancelTap!();
}
///确认事件
_onConfirmTap() {
Navigator.of(context).pop();
widget.onConfirmTap();
}
}
class HintIOSDialog extends StatefulWidget {
final String title; //标题
final String? content; //提示内容
final bool hideCancelBtn; //是否隐藏取消btn
final Function? onCancelTap; //取消事件
final Function onConfirmTap; //确认时件
HintIOSDialog(this.title, this.content, this.hideCancelBtn, this.onCancelTap,
this.onConfirmTap);
@override
_HintIOSDialogState createState() => _HintIOSDialogState();
}
class _HintIOSDialogState extends State<HintIOSDialog> {
@override
Widget build(BuildContext context) {
return CupertinoAlertDialog(
title: Text(widget.title),
content: Text(widget.content!),
actions:!widget.hideCancelBtn ?
<Widget>[
_cancelIOSBtn(),
CupertinoDialogAction(
child: Text('确认'),
onPressed: () {
Navigator.of(context).pop();
widget.onConfirmTap();
},
)
] : <Widget>[
CupertinoDialogAction(
child: Text('确认'),
onPressed: () {
Navigator.of(context).pop();
widget.onConfirmTap();
},
)
],
);
}
///取消
_cancelIOSBtn() {
return CupertinoDialogAction(
child: Text('取消'),
onPressed: () {
Navigator.of(context).pop();
widget.onCancelTap!();
});
}
}