在一个StreamBuilder中使用2个不同的流

时间:2019-04-16 13:50:38

标签: dart flutter stream bloc

是否可以在一个Stream Builder中使用2个不同的流,或者应该如何解决此问题?

我尝试对两者都使用一个流,但是主题数据的BehaviorSubject是ThemeData模型,而languageStream是String,并且无法正常工作。

child: StreamBuilder<String>(
        stream: translationsBloc.languageOutStream,
//      stream: themeBloc.outFirestore,

这些是我要使用的流

集团看起来像这样:

 final _themeSubject = BehaviorSubject<ThemeData>();
  Stream<ThemeData> get outTheme => _themeSubject.stream;

和另一个像这样的人

BehaviorSubject<String> _languageController = BehaviorSubject<String>();
  Stream<String> get languageOutStream => _languageController;

我需要两个流都位于主页中,因为这会影响整个应用程序。

2 个答案:

答案 0 :(得分:1)

我想最好的方法是嵌套StreamBuilders。这并不罕见,实际上经常使用。

当然,只有第一个流snapshot.data为true时,才可以加载内部流,但这取决于您的应用程序。如果您提供更多代码,我们将为您提供帮助。但是基本结构可能会变成这样:

Widget build(BuildContext context) {
  return StreamBuilder<String>(
      stream: translationsBloc.languageOutStream,
      builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
        return StreamBuilder<ThemeData>(
            stream: themeBloc.outFirestore,
            builder: (BuildContext context, AsyncSnapshot<ThemeData> snapshot) {
              return Container();
            });
      });
}

答案 1 :(得分:0)

您可以使用布尔变量component1进行管理。根据您的条件设置isThisStreamRequired的状态。

isThisStreamRequired