【Flutter 专题】60 图解基本 Dialog 对话框小结
Dialog 在日常开发中应用广泛,大家也对此很熟悉;小菜以前也整理过关于自定义 Dialog 的小博客,今天小菜系统的学习一下最基本的 Dialog;
Dialog 一般不直接使用,Flutter 提供了便利的 AlertDialog / SimpleDialog / AboutDialog / CupertinoDialog / CupertinoAlertDialog 等多种对话框样式,小菜重点尝试前三种 Android Type Dialog;但对于自定义对话框可继承 Dialog 进行处理;
AlertDialog
源码分析
分析源码,AlertDialog 各个属性都比较清楚,灵活性较高;小菜由简易难逐渐尝试;
案例尝试
小菜尝试日常最常见的 Dialog;
小菜尝试对上述 Dialog 添加一些个性化;a. titleTextStyle 和 contentTextStyle 不能改变标题和内容中已设置过的样式;b. shape 为对话框样式,如果设置为 CircleBorder 圆形背景效果时以宽高较小的尺寸为直径;c. actions 按钮个数最多可设置三个;
小菜尝试 List AlertDialog;a. Dialog 默认宽度是固定的,高度也有最大限度,若元素大小超过最大宽高则会溢出;b. AlertDialog 可以自由设置点击事件,并非只有 actions 设置;
小菜尝试自定义选择对话框;
SimpleDialog
源码分析
分析源码,SimpleDialog 比 AlertDialog 要简单,只是单独多一个 titlePadding;消息主体默认是 List<Widget>;基本 SimpleDialog 可实现的效果 AlertDialog 均可实现;
案例尝试
小菜尝试最常见的选择对话框;小菜采用了 SimpleDialogOption 选项 Widget,默认是占满一行;
小菜尝试 List SimpleDialog;需注意内容主体为 List<Widget> 方式,使用 ListView 时要注意冲突;
小菜尝试自定义选择对话框;
UnconstrainedBox + SizedBox
Flutter 的对话框中均未提供更改宽度的属性,高度可以自适应;小菜采用 UnconstrainedBox + SizedBox 可以实现对话框的宽度更改,首先用 UnconstrainedBox 抵消 showDialog 对宽度的限制;之后采用 SizedBox 设置对话框宽度;注意此时设置高度并没有效果依旧自适应;对话框宽度以 SizedBox 设置的 width 为主,child 的宽度无效;
AboutDialog
Flutter 提供了特殊的 AboutDialog,适用于应用说明或版本相关;
源码分析
分析源码可知,AboutDialog 继承自 AlertDialog 但对于自定义内容较少,对于 applicationName / applicationVersion / applicationLegalese 仅提供字符串方式,无法调整样式;且默认有版权和取消按钮;
案例尝试
AboutDialog 类似于系统对话框,整体效果我们无法调整,对于主体内容 children 部分,与 SimpleDialog 类似,无法延迟加载模型组件,对于 ListView 等需明确高度;
showAboutDialog
Flutter 针对 AboutDialog 提供了简易的 showAboutDialog 方法;
源码分析
分析源码,showAboutDialog 是简化版的 AboutDialog,参数几乎全部一致;差别在于 showDialog 方式可以设置点击遮罩是否关闭对话框,而 showAboutDialog 不支持;
案例尝试
showDialog
源码分析
分析源码,showDialog 采用 builder 方式取代 child 方式;而实际上 showDialog 是对 showGeneralDialog 的封装,默认的遮罩层颜色和渐进渐出的动画效果;
showGeneralDialog
源码分析
分析源码,showGeneralDialog 提供了更丰富的对话框设计;而实际也是对 Navigator.push 的封装;
案例尝试
小菜重现以前博客中实现的简易对话框:由底部弹出且透明度由 0.0 到 1.0;测试 barrierColor 进入和退出时都是渐变符合动画效果,与采用 Navigator 打开页面动画方式不同;
虽然我们经常自定义 Dialog,但还是需要对系统基础的 Dialog 有所认知;以上是小菜的测试过程,如有错误请多多指导!
来源: 阿策小和尚
版权声明: 本文为 InfoQ 作者【阿策小和尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/17548c539fe7ce38cffb3f241】。文章转载请联系作者。
评论