【问题标题】:Use 2 different streams in one StreamBuilder在一个 StreamBuilder 中使用 2 个不同的流
【发布时间】:2019-09-06 15:42:11
【问题描述】:

在一个 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;

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

【问题讨论】:

    标签: dart flutter stream bloc


    【解决方案1】:

    我想最好的方法是嵌套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();
                });
          });
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-08
        • 1970-01-01
        • 2019-12-06
        • 2021-07-26
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        相关资源
        最近更新 更多