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