5

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

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

使用rxdartlike 运算符combineLatest2感觉很笨拙,因为在大多数情况下,我不希望某个集团被用来了解另一个集团中的流。

4

2 回答 2

3

您不能使用小部件进行其他操作。这是小部件系统的限制之一:事情往往会变得非常嵌套

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

最终结果变成了这样:

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

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

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

于 2019-02-23T12:54:04.213 回答
0

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

于 2021-04-04T01:19:01.700 回答