Flutter Widget 之ScaffoldMessenger
你是否曾经尝试在导航栏之前通过SnackBar向你的用户显示消息,却发现SnackBar没有随用户进入新页面?
有的话,别担心,ScaffoldMessenger可以帮助你!
ScaffoldMessenger会以InheritedWidget的形态放在所有Scaffolds之上,每当初始化心的scaffold时,它会在树中查找ScaffoldMessenger祖先并订阅SnackBar事件
我是不知道你的想法,但任何订阅SnackBar事件的东西都是我的小部件
若你想使用这个工具,你只需要用ScaffoldMessenger.of(context)来替换 Scaffold.of(context)方法的调用
ScaffoldMessenger.of(context)
但是,假若你没有BuildContext,因为你在状态管理器的深处该怎么办呢?
这种情况下,请将密钥传给你的MaterialApp,然后用它访问ScaffoldMessenger
final _scaffoldKey = GlobalKey<ScaffoldMessengerState>();
MaterialApp(
scaffoldMessengerKey: _scaffoldKey,
)
final ScaffoldMessengerState _scaffold = _scaffoldKey.currentState;
ScaffoldMessenger的其他部分都是一样的,你仍像以前一样使用showSnackBar,像以前一样传递SnackBar的值
scaffoldMessengerState.showSnackBar(
ScackBar(...),
)
除了现在,你的用户在他们导航之前或在导航之后创建了一个SnackBar,他们仍会看到该通知。最棒的是你不用自行添加
ScaffoldMessenger小部件MaterialApp会提供给你。你只需使用它即可。
如果想了解有关ScaffoldMessenger的内容,或者关于Flutter的其他功能,请访问pu b.dev
原文翻译自视频:视频地址
转载自:https://juejin.cn/post/7168701259141578783