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 中。
是否有更好的方法将小部件暴露给来自不同 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 中。