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会提供给你。你只需使用它即可。
作者:程序员界的小学生
链接:https://juejin.cn/post/7168701259141578783