Flutter BLoC:使用嵌套的 StreamBuilders 是一种不好的做法吗?
Posted
技术标签:
【中文标题】Flutter BLoC:使用嵌套的 StreamBuilders 是一种不好的做法吗?【英文标题】:Flutter BLoC: Is using nested StreamBuilders a bad practice? 【发布时间】:2019-07-17 08:40:45 【问题描述】:是否有更好的方法将小部件公开给来自不同 BLoC 的两个或多个流?到目前为止,我一直在使用嵌套的StreamBuilder
来处理我需要收听的尽可能多的流,就像下面粘贴的代码一样。这是一个好习惯吗?
StreamBuilder(
stream: firstBloc.stream1,
builder: (_, AsyncSnapshot snapshot1)
return StreamBuilder(
stream: secondBloc.stream2,
builder: (_, AsyncSnapshot snapshot2)
return CustomWidget(snapshot1.data, snapshot2.data);
)
)
使用像combineLatest2
这样的rxdart
运算符感觉很笨拙,因为在大多数情况下,我不希望某个集团被用来了解另一个集团中的流。
【问题讨论】:
使用ScopedModel
,您可以拥有多个模型而不会出现任何问题
我很抱歉,但我不明白这将如何适应 BLoC 模式。你的意思是在这种情况下我应该使用ScopedModel
而不是 BLoC 还是你的意思是我可以以某种方式将它们两者整合在一起?
见medium.com/flutter-community/…
【参考方案1】:
您无法使用小部件进行其他操作。这是小部件系统的限制之一:事情往往会变得非常嵌套
不过有一个解决方案:Hooks,一个来自 React 的新功能,通过 flutter_hooks 移植到 Flutter(我是维护者)。
最终结果变成了这样:
final snapshot1 = useStream(firstBloc.stream1);
final snapshot2 = useStream(secondBloc.stream2);
return CustomWidget(snapshot1.data, snapshot2.data);
这与两个嵌套的StreamBuilder
完全一样,但无论是否嵌套,一切都是在同一个内部完成的。
【讨论】:
【参考方案2】:您可以将它们放在应用顶部的 MultiBlocProvider 中。
【讨论】:
以上是关于Flutter BLoC:使用嵌套的 StreamBuilders 是一种不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章
flutter bloc pattren Stream Transformer 对象导致语法错误
Flutter BLoC:使用嵌套的 StreamBuilders 是一种不好的做法吗?
如何在 Flutter 中使用 Bloc 正确设置 DropdownButton 的值?