Flutter 的文档现在虽然是很健全了,但是不知道为什么对于 IOS 风格组件的文档还是那么的欠缺,当打开 CupertionAlertDialog 的官方文档 后竟然没有 demo 代码,但是 AlertDialog 的文档 就有简单的示例,这就非常的尴尬,估计 Google 是想推自己的 Material Design 风格吧。
正好在项目中要使用 IOS 风格的 CupertinoAlertDialog ,所以在这里整理下也方便大家的使用,使用起来也会比较的简单。
这是一个简单的例子,显示的效果如下:
showCupertinoDialog: 是显示 IOS 风格弹窗必须使用的方法。
CupertinoAlertDialog:表示显示一个警告弹窗,也就是示例中的样式。
CupertinoAlertDialog 源码分析:
class CupertinoAlertDialog extends StatelessWidget { const CupertinoAlertDialog({ Key key, // 组件的唯一标识 this.title, //组件的标题 (可选) this.content, //标题的内容(可选) this.actions = const <Widget>[], //组件中包含的操作组件,不能为空 this.scrollController, // 内容滚动控制器,默认 null,一般不需要 this.actionScrollController, // 操作组件滚动控制器,默认 null,一般不需要 this.insetAnimationDuration = const Duration(milliseconds: 100), this.insetAnimationCurve = Curves.decelerate, }) : assert(actions != null), super(key: key); ... }接下来添加一下 content 属性,在上面的代码 title 下面添加 content 属性:
... title: Text('确认删除'), content: Text('这个是个提示内容 content'), actions: [ ...显示效果如下所示:
上面的标题与内容部分间距太小,可以通过在 content 里面添加 \n 换行符来增加两者之间的间距:
... title: Text('确认删除'), content: Text('\n这个是个提示内容 content'), actions: [ ...显示效果:
actions 中的操作组件可以为一个或者是多个。
showCupertinoDialog( context: widgetContext, builder: (context) { return CupertinoAlertDialog( title: Text('确认删除'), content: Text('\n这个是个提示内容 content'), actions: <Widget>[ CupertinoDialogAction( child: Text('确认'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, );界面显示效果:
showCupertinoDialog( context: widgetContext, builder: (context) { return CupertinoAlertDialog( title: Text('请评价'), content: Text('\n我们很重视您的评价!'), actions: <Widget>[ CupertinoDialogAction( child: Text('非常好'), onPressed: () { Navigator.of(context).pop(); }, ), CupertinoDialogAction( child: Text('一般'), onPressed: () { Navigator.of(context).pop(); }, ), CupertinoDialogAction( child: Text('非常差'), isDestructiveAction: true, onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, );界面显示效果:
简单的示例:
showCupertinoDialog( context: widgetContext, builder: (context) { return CupertinoAlertDialog( title: Text('我帅不帅?'), content: Text('\n我不关心你的回答,哈哈哈'), actions: [ CupertinoDialogAction( child: Text('帅'), isDefaultAction: true, //是默认的,所以界面将是加粗样式 onPressed: () { Navigator.of(context).pop(); }, ), CupertinoDialogAction( child: Text('一般'), onPressed: () { Navigator.of(context).pop(); }, ), CupertinoDialogAction( child: Text('丑'), isDestructiveAction: true, onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, );博客地址: Roc’s Blog