我们在上一章回中介绍了
BottomSheet Widget
相关的内容,本章回中将介绍
如何正确地显示BottomSheet Widget.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在上一章回中介绍了BottomSheet的基本用法,该用法是一种被动式的用法,因为它和Scaffold组件的bottomSheet属性绑定在了一起,当程序中显示Scaffold
所在的页面时BottomSheet会自动显示在当前页面底部,而且无法关闭。本章回中将介绍主动式用法:通过点击按钮来打开或者关闭BottomSheet
窗口。
显示方法
使用showBottomSheet()方法
该方法只有一个WidgetBuilder
类型的参数,该类型是一个方法类型,我们需要实现该方法并且在方法中返回一个组件。使用这种方法可以动态地在页面底部弹出和关闭BottomSheet窗口。详细的用法看示例代码就可以。
注意:这种方法必须嵌套在一个组件中,不然会报运行时错误,而且无法显示BottomSheet窗口。
使用showModalBottomSheet()方法
该方法包含两个必选参数和多个可选参数,我们重点关注必选参数:
- required BuildContext context
- required WidgetBuilder builder
该方法可以直接使用,不需要嵌套组件。此外,该方法生成的BottomSheet类似IOS中的modelView
,点击窗口区域外的任意位置就可以关闭窗口。
示例代码
//用来演示ShowBottomSheet,使用showBottomSheet()方法
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Example of BottomSheet"),
),
body: const ExBottomSheet(),
);
}
}
//必须创建一个widget并且将它赋值给Scaffold的body属性才可以,该示例来源于官方文档
//参考:https://api.flutter.dev/flutter/material/ScaffoldState/showBottomSheet.html
class ExBottomSheet extends StatelessWidget {
const ExBottomSheet({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return Center(
child: ElevatedButton(
child: const Text('showBottomSheet'),
onPressed: () {
Scaffold.of(context).showBottomSheet<void>(
(BuildContext context) {
return Container(
height: 200,
color: Colors.amber,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('This is BottomSheet'),
//关闭BottomSheet窗口
ElevatedButton(
child: const Text('Close BottomSheet'),
onPressed: () {
Navigator.pop(context);
},
),
],
),
),
);
},
);
},
),
);
}
//使用showModalBottomSheet()方法
_showModalBottomSheet(context) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
width: 300,
height: 100,
color: Colors.green,
child: const Text("This is BottomSheet"),
);
});
}
//通过按钮来弹出窗口
ElevatedButton(
onPressed: () => _showModalBottomSheet(context),
child: const Text("Show Modal BottomSheet"),
),
这里只列出了核心代码,完整的代码可以查看Github
上ex019文件中的内容。编译并且运行上面的代码可以在屏幕底部看到一个弹出窗口,该窗口中只包含一个文本按钮,点击按钮可以关闭弹出窗口。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。
看官们,关于"如何正确地显示BottomeSheet Widget"就介绍到这里,欢迎大家在评论区交流与讨论!