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

最佳答案

您不能以其他方式使用小部件。这是小部件系统的限制之一:事情往往变得非常嵌套

不过有一个解决方案:Hooks,一个来自 React 的新特性,通过 flutter_hooks(我是维护者)移植到 Flutter。

最终结果变成了这样:

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

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

这与两个嵌套的 StreamBuilder 完全一样,但一切都在没有嵌套和没有嵌套的情况下完成。

关于architecture - Flutter BLoC : Is using nested StreamBuilders a bad practice?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54840870/

10-11 14:47