将数据广播到 Flutter 中的多个小部件
Posted
技术标签:
【中文标题】将数据广播到 Flutter 中的多个小部件【英文标题】:Broadcast data to multiple widgets in Flutter 【发布时间】:2017-11-08 10:36:04 【问题描述】:有没有办法将数据从一个小部件广播到其他小部件?类似于 android 上的 BroadcastReceiver 或 ios 上的 NSNotificationCenter。
具体来说,我正在尝试检测导航器何时弹出或推送新视图。我将 navigatorObservers 添加到 MaterialApp。当一个小部件回到前台时,我希望能够通过广播来自 didPush 和 didPop 的更改以及当前前台中的实际路由来通知它
【问题讨论】:
有很多方法可以做到这一点,但您能否解释一下为什么您希望收到这些更改的通知?你这样做的目的是什么? 也许它在 Flutter 上的做法有所不同,但基本上,就我而言,当用户看到登录页面时,他会按下登录按钮并完成登录流程。完成后,我关闭登录流程并显示登录页面。如果我们现在有有效的访问令牌,我将关闭登录页面并将其替换为内容页面。通常,我会在 Android 的 onResume 或 onActivityResult 中完成此操作。但是我在 Flutter 上找不到类似的东西。我唯一能想到的就是检测 Navigator 何时弹出或推送视图,并查看哪个视图路由在前台。 【参考方案1】:Navigator.push
返回一个Future
,它会在调用Navigator.pop
时完成(并且这可以选择用于将数据传递回调用push
的小部件)。例如,假设您的登录按钮有这个onPressed
处理程序:
onPressed: () async
bool isLoggedIn = await Navigator.pushNamed(context, '/login');
if (isLoggedIn)
// do something
当您的登录页面调用Navigator.pop(true)
时,Future
将以true
的值完成,该值将分配给isLoggedIn
变量。 (如果用户使用后退按钮返回上一屏幕,您将获得null
。)
showDialog
也是这样工作的。
【讨论】:
啊有趣。我没有考虑到这一点。谢谢!! 这也可以通过Navigator.pop(context, true)
来实现,让关闭的对话框返回true。以上是关于将数据广播到 Flutter 中的多个小部件的主要内容,如果未能解决你的问题,请参考以下文章
Flutter -PDF -- 错误 - 这个小部件创建了 20 多个页面。这可能是小部件或文档中的问题
从 Flutter 中的 Stateful Widget 返回数据