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

Flutter BLoC: Is using nested StreamBuilders a bad practice?

是否有更好的方法将小部件暴露给来自不同 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 运算符感觉很笨拙,因为在大多数时候我不希望一个 bloc 被用来了解另一个 bloc 中的流。

您不能使用小部件来做其他事情。这是小部件系统的局限之一:事情往往会变得非常嵌套

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

最终结果变成这样:

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

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

这与两个嵌套的行为完全相同 StreamBuilder,但是在没有嵌套和没有嵌套的情况下,一切都是在同一个内部完成的。

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