1

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

我尝试为它们两个使用一个流,但主题数据的 BehaviorSubject 是 ThemeData 模型,而 languageStream 是一个字符串,但它无法正常工作。

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;

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

4

2 回答 2

3

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

当然,snapshot.data对于第一个流,您可能只加载一次内部流,但这取决于您的应用程序。如果您提供更多代码,我会帮助您。但基本结构可能最终是这样的:

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();
            });
      });
}
于 2019-04-16T14:16:26.953 回答
0

您可以使用布尔变量进行管理isThisStreamRequiredisThisStreamRequired根据您的情况设置状态。

child: StreamBuilder<String>(
        stream: isThisRequired?translationsBloc.languageOutStream:themeBloc.outFirestore,
于 2019-04-16T14:16:11.873 回答