Flutter BLoC:使用嵌套StreamBuilders是一种不好的做法吗?

时间:2019-02-23 11:01:18

标签: architecture flutter bloc

是否有更好的方法将小部件暴露给来自不同BLoC的两个或更多流?到目前为止,我一直在使用嵌套的StreamBuilder来监听所​​需的流,就像下面粘贴的代码一样。这是一个好习惯吗?

StreamBuilder(
    stream: firstBloc.stream1,
    builder: (_, AsyncSnapshot snapshot1) {
        return StreamBuilder(
            stream: secondBloc.stream2,
            builder: (_, AsyncSnapshot snapshot2) {
                return CustomWidget(snapshot1.data, snapshot2.data);
            }
        )
    }
)

使用rxdart之类的combineLatest2运算符比较笨拙,因为在大多数情况下,我都不希望其中一个集团被用来感知另一个集团中的流。

2 个答案:

答案 0 :(得分:1)

您不能使用小部件来执行其他操作。那是窗口小部件系统的局限性之一:事情往往会变得很嵌套

但是有一个解决方案:Hooks,这是React的一项新功能,已通过flutter_hooks(我是维护者)移植到Flutter。

最终结果变为:

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

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

这就像两个嵌套的StreamBuilder一样,但是所有的事情都在没有嵌套的情况下完成。

答案 1 :(得分:0)

您可以将它们放在应用顶部的 MultiBlocProvider 中。