应用场景:app系统版本升级弹窗,系统退出登陆弹窗,首页广告弹窗,消息中心弹窗,删除文件弹窗等等各类应用场景中,咱们开发中都会遇到此情形。html
废话很少话,先看效果图以下:(以上场景中代码逻辑都差很少,源代码自行修改便可!!!)------这里仅展现退出登陆场景app
逻辑其实很简单,重写Dialog类便可。ide
逻辑代码以下:字体
import 'package:flutter/material.dart'; class DialogWidget extends Dialog { final String title; //标题 final String content; //内容 final String cancelText; //是否须要"取消"按钮 final String confirmText; //是否须要"肯定"按钮 final Function cancelFun; //取消回调 final Function confirmFun; //肯定回调 DialogWidget({ Key key, @required this.title, @required this.content, this.cancelText, this.confirmText, @required this.cancelFun, this.confirmFun }) : super(key: key); @override Widget build(BuildContext context) { return Padding( padding: EdgeInsets.all(15), child: Material( type: MaterialType.transparency, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( decoration: ShapeDecoration( color: Color(0xfff2f2f2), shape: RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(10), ), ), ), margin: EdgeInsets.all(15), child: Column( children: <Widget>[ Padding( padding: EdgeInsets.all(10), child: Center( child: Text(title, style: TextStyle(color: Color(0xff666666))), ), ), Container( color: Color(0xffffffff), height: 1.0, ), Container( constraints: BoxConstraints(minHeight: 100), child: Padding( padding: const EdgeInsets.all(12.0), child: IntrinsicHeight( child: Text(title, style: TextStyle(color: Color(0xff666666))), ), ), ), Container( color: Color(0xffeeeeee), height: 1.0, ), this._buildBottomButtonGroup() ], ), ) ], ), ), ); } Widget _buildBottomButtonGroup() { var widgets = <Widget>[]; if (cancelText != null && cancelText.isNotEmpty) widgets.add(_buildBottomCancelButton()); if (confirmText != null && confirmText.isNotEmpty && confirmText != null && confirmText.isNotEmpty) widgets.add(_buildBottomOnline()); if (confirmText != null && confirmText.isNotEmpty) widgets.add(_buildBottomPositiveButton()); return Flex( direction: Axis.horizontal, children: widgets, ); } Widget _buildBottomOnline() { return Container( color: Color(0xffeeeeee), height: 38, width: 1, ); } Widget _buildBottomCancelButton() { return Flexible( fit: FlexFit.tight, child: FlatButton( onPressed: this.cancelFun, child: Text(title, style: TextStyle(color: Color(0xff666666))), ), ); } Widget _buildBottomPositiveButton() { return Flexible( fit: FlexFit.tight, child: FlatButton( onPressed: this.confirmFun, child: Text(title, style: TextStyle(color: Color(0xff666666))), ), ); } }
代码中实际的效果可能与上面附图可能不同, 可是逻辑是同样的。(如背景颜色字体等等,自行配置)ui
下面该如何使用调用呢?this
点击"退出登陆"按钮:spa
FlatButton( child: Text("退出登陆"), onPressed: logOut, //退出登陆方法 )
方法:code
// 退出登陆 void logOut(){ showDialog( context: context, barrierDismissible: false, builder: (BuildContext context){ return DialogWidget( title: '提示', content: '肯定要退出吗?', cancelText: '取消', confirmText: '肯定', cancelFun: (){ Navigator.pop(context); }, confirmFun: (){ Navigator.pop(context); Navigator.pop(context); Provider.of<UserModel>(context).clearUserInfo(); }, ); } ); }
到这里基本结束了,但愿你们学以至用,触类旁通!!!htm
------------恢复内容结束------------blog