【问题标题】:Broadcast data to multiple widgets in Flutter将数据广播到 Flutter 中的多个小部件
【发布时间】:2017-11-08 10:36:04
【问题描述】:

有没有办法将数据从一个小部件广播到其他小部件?类似于 Android 上的 BroadcastReceiver 或 iOS 上的 NSNotificationCenter。

具体来说,我正在尝试检测导航器何时弹出或推送新视图。我将 navigatorObservers 添加到 MaterialApp。当一个小部件回到前台时,我希望能够通过广播来自 didPush 和 didPop 的更改以及当前前台中的实际路由来通知它

【问题讨论】:

  • 有很多方法可以做到这一点,但您能否解释一下为什么您希望收到这些更改的通知?你这样做的目的是什么?
  • 也许它在 Flutter 上的做法有所不同,但基本上,就我而言,当用户看到登录页面时,他会按下登录按钮并完成登录流程。完成后,我关闭登录流程并显示登录页面。如果我们现在有有效的访问令牌,我将关闭登录页面并将其替换为内容页面。通常,我会在 Android 的 onResume 或 onActivityResult 中完成此操作。但是我在 Flutter 上找不到类似的东西。我唯一能想到的就是检测 Navigator 何时弹出或推送视图,并查看哪个视图路由在前台。

标签: android ios broadcastreceiver nsnotificationcenter flutter


【解决方案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。
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
相关资源
最近更新 更多