【问题标题】:Flutter merge two Stream<List<Data>> into a single Stream<List<Data>>Flutter 将两个 Stream<List<Data>> 合并为一个 Stream<List<Data>>
【发布时间】:2021-03-05 15:58:08
【问题描述】:

有一个我无法解决的问题,目前我有一个

  Stream<List<SupplyHierarchy>> get suppliesHierarchyFinalLevel => _supplyHierarchyFinalLevelFetcher.stream;
  Stream<List<SupplyHierarchy>> get suppliesHierarchyLevelFour => _supplyHierarchyLevelFourFetcher.stream;

  final _supplyHierarchyLevelFourFetcher = PublishSubject<List<SupplyHierarchy>>();
  final _supplyHierarchyFinalLevelFetcher = PublishSubject<List<SupplyHierarchy>>();

Stream<List<SupplyHierarchy>> getData() {
    return StreamGroup.merge(
        [suppliesHierarchyFinalLevel, suppliesHierarchyLevelFour]);  
}

我收到的输出是一个列表,但只有一个流。 它做这样的事情:

StreamGroup.merge([LIST_WITH_DATA, NULL]);  

即使两个流都加载了数据。

任何一个电话指导我如何解决这个问题...谢谢。

【问题讨论】:

  • 但是结合最新的我会收到一个 List> 但我需要一个 List

标签: flutter dart stream


【解决方案1】:
import 'package:async/async.dart'; // using v2.5.0

void main() {
  final s1= Stream.periodic(Duration(seconds:1), (count) => count);
  final s2= Stream.periodic(Duration(seconds:2), (count) => 100-count);
  StreamGroup.merge([s1, s2]).listen(print);
}

对我来说很好,您能否提供一个允许重现错误的最小代码 sn-p?您的“示例”使用了很多未显示的变量,这可能是您遇到错误的地方。

请不要发布您的整个源代码,因为人们有时会在被要求提供“最小示例”时这样做。

【讨论】:

  • 谢谢大卫!我正在做一个最小的例子,但 dartpad 不允许第三方库(奇怪),你给我的例子很好,但问题是,在 s1s2 都是一个列表,当我按照你说的进行合并时,我得到了一个列表列表
  • 如果我将 "(count) => count" 更改为 [count, count] 并且与 s2 相同,它仍然可以按预期工作。
  • 我的错......似乎我正在使用 Stream.zip 并返回一个列表列表,我认为 StreamGroup 是相同的实现。我尝试了它并且工作正常:) 很抱歉造成混乱,并感谢您的建议/解决方案。
猜你喜欢
  • 2020-03-29
  • 1970-01-01
  • 2021-02-11
  • 2021-11-11
  • 2021-04-24
  • 2015-01-14
  • 1970-01-01
  • 2014-04-26
  • 2023-01-25
相关资源
最近更新 更多