【问题标题】:Flutter: How to use multiple streams combineFlutter:如何使用多个流组合
【发布时间】:2020-07-04 13:52:07
【问题描述】:

问题说得很清楚,如何同时执行/组合多个流。

假设我们有一个流

main() {
  print("Creating a sample stream...");
  Stream<String> stream = new Stream.fromFuture(getData());
  print("Created the stream");

  stream.listen((data) {
    print("DataReceived: "+data);
  }, onDone: () {
    print("Task Done");
  }, onError: (error) {
    print("Some Error");
  });
  
  print("code controller is here");
}

Future<String> getData() async {
  await Future.delayed(Duration(seconds: 5)); //Mock delay 
  print("Fetched Data");
  return "This a test data";
}

这里单流执行并给出回调,但是如果我希望多个流同时执行怎么办?

【问题讨论】:

    标签: flutter dart stream


    【解决方案1】:

    对于它StreamGroup 可以用来合并多个流

    添加依赖:

    async: ^2.4.1
    

    使用 StreamGroup:

     void main() {
      Stream<String> stream1 = new Stream.fromFuture(getData(2));
      Stream<String> stream2 = new Stream.fromFuture(getData(4));
      Stream<String> stream3 = new Stream.fromFuture(getData(6));
      final result = StreamGroup.merge([
        stream1,
        stream2,
        stream3
      ]);
      result.listen((data) {
        print("DataReceived: " + data);
      });
    
    }
    
    Future<String> getData(int duration) async {
      await Future.delayed(Duration(seconds: duration)); //Mock delay
      return "This a test data";
    }
    

    输出:

    I/flutter ( 5866): DataReceived: This a test data — Print after 2 seconds
    I/flutter ( 5866): DataReceived: This a test data — Print after 4 seconds
    I/flutter ( 5866): DataReceived: This a test data — Print after 6 seconds
    

    【讨论】:

      【解决方案2】:

      你也可以使用rxdart package:

      依赖它:

      dependencies:
        rxdart: ^0.24.1
      

      现在您可以使用Rx.merge 简单地将多个流合并在一起:

      Rx.merge([
        Rx.timer(1, Duration(days: 10)),
        Stream.value(2)
      ])
      .listen(print); // prints 2, 1
      

      rxdart 还有其他方法如combineLatest。您可以了解更多关于合并多个流的不同方法here

      【讨论】:

        猜你喜欢
        • 2020-07-24
        • 2011-10-23
        • 2020-03-25
        • 1970-01-01
        • 2020-10-25
        • 2019-04-02
        • 2021-06-05
        • 2020-11-20
        • 1970-01-01
        相关资源
        最近更新 更多