如何合并和过滤两个 dart Stream

lg.*_*rom 1 dart flutter

我正在使用 flutter_blue 作为使用蓝牙的 flutter 应用程序。

flutter_blue 向我展示了两个流: FlutterBlue.instance.connectedDevices FlutterBlue.instance.scanResults

我想将这两个流合并为一个并应用过滤器。

谷歌搜索我得到了 rxdart 的参考,但我仍然无法让它工作。请帮助 :)

dro*_*gel 5

我认为你想要的是StreamGroup来自 Dart 的async 包

StreamGroup 类将流的集合合并为单个输出流。

这应该很简单,您只需获取流并使用该StreamGroup.merge(...)方法,传递要合并的流列表。看一下这个例子:

import 'dart:async' show Stream;
import 'package:async/async.dart' show StreamGroup;

main() async {
  var s1 = stream(10);
  var s2 = stream(20);
  var s3 = StreamGroup.merge([s1, s2]);
  await for(int val in s3) {
    print(val);
  }
}

Stream<int> stream(int min) async* {
  int i = min;
  while(i < min + 3) {
    yield i++;
  }
}
Run Code Online (Sandbox Code Playgroud)

这将打印:

10
20
11
21
12
22
Run Code Online (Sandbox Code Playgroud)

合并它们后,您可以使用标准Stream方法,例如以map(...)您想要的方式应用过滤器。