对话框是我们在项目中经常使用的组件,我们在前面章回中也介绍过该组件,本章回中将介绍如何创建一个模拟对话框窗口的页面,页面的外观和真正的对话框完整相同,
不同的是这个页面是一直显示的,而不是像对话框一样符合条件时才弹出来。
对话框包含标题,内容和按钮,以及窗口背后的灰色背景。我们先使用一个容器组件充当灰色背景,在该容器中再创建对话框窗口。对话框窗口也可以使用容器组件来实现,
只是它的长度和宽度比背景容器的长度和宽度要小一些。接着在对话框窗口容器中使用Text组件来实现标题和内容,窗口中的按钮使用TextButton组件来实现。然后使
用布局类组件把窗口中的标题,内容和按钮组合在一起,组合时可以参考对话框的布局。
有了实现思路后,我们来介绍具体的实现方法:
return Scaffold(
///对话框的背景
body: Container(
color: Colors.black26,
width: double.infinity,
height: double.infinity,
alignment: Alignment.center,
///对话框的背景
child: Container(
width: 272.w,
height: 160.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white,
),
///三行内容:标题行,内容行,按钮行
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
///这个空间可以用来存放标题
const SizedBox(height: 16,),
Text("Message of Dialog"),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
TextButton(
onPressed: () {OpenSettings.openBluetoothSetting();},
child: Text("Yes",style: const TextStyle(color: Colors.black),),
),
TextButton(onPressed: () {}, child: Text("No",style: const TextStyle(color: Colors.black),),),
],
)
],
),
),
),
)
上面是的示例完全按照实现方法中的步骤来编写,并且在关键位置添加了代码。编译并且运行上面的代码可以得到下面的运行效果图。(博客中从jetpakc中拿了一个图片,
不过图片中的内容以及风格与代码中的不一样)
有看官提问说,官方已经提供对话框了,直接拿来使用就可以,为什么要模拟一个对话框?其原因源于我的项目经验,主要有两个,详细如下:
最后,我们对本章回的内容做一个全面的总结: