Architecture Flatter BLoC:使用嵌套StreamBuilder是一种糟糕的做法吗?

Architecture Flatter BLoC:使用嵌套StreamBuilder是一种糟糕的做法吗?,architecture,flutter,bloc,Architecture,Flutter,Bloc,有没有更好的方法将一个小部件公开给来自不同bloc的两个或多个流?到目前为止,我一直在使用嵌套的StreamBuilder,听尽可能多的流,就像下面粘贴的代码一样。这是一种好的做法吗 StreamBuilder( 流:firstBloc.stream1, 构建器:(\ux,异步快照快照1){ 返回流生成器( 流:secondBloc.stream2, 构建器:(\ux,异步快照快照2){ 返回CustomWidget(snapshot1.data、snapshot2.data); } ) } )

有没有更好的方法将一个小部件公开给来自不同bloc的两个或多个流?到目前为止,我一直在使用嵌套的
StreamBuilder
,听尽可能多的流,就像下面粘贴的代码一样。这是一种好的做法吗

StreamBuilder(
流:firstBloc.stream1,
构建器:(\ux,异步快照快照1){
返回流生成器(
流:secondBloc.stream2,
构建器:(\ux,异步快照快照2){
返回CustomWidget(snapshot1.data、snapshot2.data);
}
)
}
)

使用
rxdart
操作符,比如
combineLatest2
感觉很笨拙,因为大多数时候我不想让一个bloc被用来感知另一个bloc中的流。

你不能使用widget来做其他事情。这就是widget系统的局限性之一:事情往往变得非常嵌套

不过有一个解决方案:挂钩,一个来自React的新特性,移植到flift中(我是维护者)

最终结果是:

final snapshot1 = useStream(firstBloc.stream1);
final snapshot2 = useStream(secondBloc.stream2);

return CustomWidget(snapshot1.data, snapshot2.data);

这与两个嵌套的
StreamBuilder
行为完全相同,但是一切都是在相同的范围内完成的,没有嵌套也没有嵌套。

你可以将它们放在应用程序顶部的MultiBlocProvider中。

使用
ScopedModel
你可以拥有多个模型,没有任何问题。很抱歉,我不明白这与BLoC模式如何匹配。在这种情况下,您的意思是我应该使用
ScopedModel
而不是BLoC,还是说我可以以某种方式将两者集成在一起?请参阅