阅读 65

Flutter Widget 之ScaffoldMessenger

你是否曾经尝试在导航栏之前通过SnackBar向你的用户显示消息,却发现SnackBar没有随用户进入新页面?

ezgif.com-gif-maker.gif

有的话,别担心,ScaffoldMessenger可以帮助你!

ScaffoldMessenger会以InheritedWidget的形态放在所有Scaffolds之上,每当初始化心的scaffold时,它会在树中查找ScaffoldMessenger祖先并订阅SnackBar事件

ezgif.com-gif-maker (1).gif

我是不知道你的想法,但任何订阅SnackBar事件的东西都是我的小部件

ezgif.com-gif-maker (2).gif

若你想使用这个工具,你只需要用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,他们仍会看到该通知。最棒的是你不用自行添加

ezgif.com-gif-maker (3).gif

ScaffoldMessenger小部件MaterialApp会提供给你。你只需使用它即可。


作者:程序员界的小学生
链接:https://juejin.cn/post/7168701259141578783


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐