Flutter学习-GetX-06 免context导航
本文主要介绍下GetX中的一些拓展:免context导航,包括snackBar,Dialogs,BottomSheets。
在GetX中也封装了些有用的小功能,免context导航
。一些弹出框
和选择框
,我们没有特别的样式要求可以使用一起看下效果吧。
1.SnackBar
用Flutter创建一个简单的SnackBar
,你必须获得Scaffold
的context
,或者你必须使用一个GlobalKey
附加到你的Scaffold
上。
final snackBar = SnackBar(
content: const Text('这是一个标题'),
action: SnackBarAction(
label: '内容:测试通知',
onPressed: (){}
),
)
// 在小组件树中找到脚手架并使用它显示一个SnackBars。
ScaffoldMessenger.of(context).showSnackBar(snackBar);
系统默认在底部展示,有点类似安卓的风格
使用Getx
的话,效果有点类似iOS的通知栏
Get.snackbar('这是一个标题', '内容:测试通知');
有了Get,你所要做的就是在你代码的任何地方调用你的Get.snackbar
,或者按照你的意愿定制它。
你想要系统底部
的效果的话,使用rawSnackbar
,可以定义你想要的样式
Get.rawSnackbar(title: '这是一个标题', message:'内容:测试通知');
2.Dialogs
使用系统AlertDialog
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('提示'),
content: Text('确认删除吗?'),
actions: <Widget>[
ElevatedButton(child: Text('取消'),onPressed: (){},),
ElevatedButton(child: Text('确认'),onPressed: (){},),
],
);
});
打开默认Dialogs
:
Get.defaultDialog(
onConfirm: () {
print("object");
Get.back();
},
middleText: "Dialog made in 3 lines of code",
);
对于所有其他的FlutterDialogs
小部件,包括cupertinos
,你可以使用Get.overlayContext
来代替context
,并在你的代码中任何地方打开它。 对于不使用Overlay的小组件,你可以使用Get.context
。 这两个context在99%的情况下都可以代替你的UIcontext,除了在没有导航context
的情况下使用 inheritedWidget
的情况。
3.BottomSheets
Get.bottomSheet
类似于showModalBottomSheet
,但不需要context:
Get.bottomSheet(
Container(
color: Colors.white,
child: Wrap(
children: <Widget>[
ListTile(
leading: const Icon(Icons.music_note),
title: const Text('Music'),
onTap: () {}
),
ListTile(
leading: const Icon(Icons.videocam),
title: const Text('Video'),
onTap: () {},
),
],
),
)
);
系统的showBottomSheet:
showBottomSheet(
context: context,
builder: (context) {
return Container(height: 200, color: Colors.red);
});
展示一个区域,设置其背景颜色、阴影值、形状。
4.小结
相比系统我们使用Get在对脚手架导航的时候,避免了context
的传递,方便我们在controller
中处理逻辑展示,同时我们使用系统的话Get.context
也很方便。
转载自:https://juejin.cn/post/7128010393376522247