Flutter:使用全局流?

Jef*_*D23 5 dart flutter

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

Stream<MyUser> user = getStream();

void main() => runApp(MyApp());
Run Code Online (Sandbox Code Playgroud)

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

class UserProfileState extends State<UserProfile> {
  MyUser _user;

  @override 
  initState() {
    super.initState();
    user.listen((user) => setState(() => _user = user ))
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Gün*_*uer 4

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

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

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

  • 当其他使用者尝试侦听时,单订阅流(默认)会引发异常。

  • 当没有消费者监听时,广播流会丢弃事件。

有关更多详细信息,请参阅https://www.dartlang.org/articles/libraries/broadcast-streams 。