【问题标题】:Flutter: Using a global stream?Flutter:使用全局流?
【发布时间】:2019-01-14 05:16:28
【问题描述】:

假设您在这里定义了一个流:

Stream<MyUser> user = getStream();

void main() => runApp(MyApp());

现在它可用于触发StatefulWidget 更改或与小部件树中的任何位置StreamBuilder 一起使用。

class UserProfileState extends State<UserProfile> {
  MyUser _user;

  @override 
  initState() {
    super.initState();
    user.listen((user) => setState(() => _user = user ))
  }
}

在 Flutter 中这样的全局流/可观察对象是否存在任何技术问题?在继承的小部件或 redux(要复杂得多)之外,我无法找到这种模式的示例。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    没有什么反对全球流。
    通常最好不要直接访问全局流,而是将它们作为服务提供(例如在 Flutter 中使用 InheritedWidget),这样依赖关系更易于处理,并且易于模拟以进行测试。

    当您拥有单个流时,Redux 可能比单个流复杂得多。当应用程序增长时,与直接使用流相比,它可能会降低复杂性。

    如果单个流有多个侦听器,则流的主要问题可能会出现。

    • 单订阅流(默认)在其他消费者尝试侦听时引发异常。

    • 广播流在没有消费者收听时丢弃事件。

    更多详情请见https://www.dartlang.org/articles/libraries/broadcast-streams

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2021-12-12
      • 2022-09-23
      • 2020-06-29
      • 1970-01-01
      • 2021-07-24
      • 2018-10-10
      • 1970-01-01
      • 2022-12-09
      相关资源
      最近更新 更多