Flutter 如何组合和过滤两个dart流
我正在使用flutter_blue作为使用蓝牙的flutter应用程序 Flatter_blue为我呈现了两条溪流: blue.instance.connectedDevices blue.instance.scanResults 我想将这两个流合并为一个流并应用过滤器 在谷歌上搜索,我找到了rxdart的参考资料,但我仍然无法让它发挥作用。Flutter 如何组合和过滤两个dart流,flutter,dart,Flutter,Dart,我正在使用flutter_blue作为使用蓝牙的flutter应用程序 Flatter_blue为我呈现了两条溪流: blue.instance.connectedDevices blue.instance.scanResults 我想将这两个流合并为一个流并应用过滤器 在谷歌上搜索,我找到了rxdart的参考资料,但我仍然无法让它发挥作用。 请帮忙:)我想你想要的是Dart的StreamGroup StreamGroup类将流的集合合并到单个输出流中 这应该很简单,您只需获取流并使用Strea
请帮忙:)我想你想要的是Dart的
StreamGroup
StreamGroup类将流的集合合并到单个输出流中
这应该很简单,您只需获取流并使用StreamGroup.merge(…)
方法,传递要合并的流列表。看看这个例子:
导入“dart:async”显示流;
导入“包:async/async.dart”显示流组;
main()异步{
var s1=流(10);
var s2=流(20);
var s3=StreamGroup.merge([s1,s2]);
等待(s3中的int val){
打印(val);
}
}
流(int-min)异步*{
int i=最小值;
而(i
将打印:
10
20
11
21
12
22
合并后,您可以使用标准的
流
方法,例如map(…)
以您想要的方式应用过滤器。我认为您需要的是Dart的流组
StreamGroup类将流的集合合并到单个输出流中
这应该很简单,您只需获取流并使用StreamGroup.merge(…)
方法,传递要合并的流列表。看看这个例子:
导入“dart:async”显示流;
导入“包:async/async.dart”显示流组;
main()异步{
var s1=流(10);
var s2=流(20);
var s3=StreamGroup.merge([s1,s2]);
等待(s3中的int val){
打印(val);
}
}
流(int-min)异步*{
int i=最小值;
而(i
将打印:
10
20
11
21
12
22
合并后,您可以使用标准的
流
方法,例如map(…)
以您想要的方式应用过滤器。您可以像这样使用Rx.combineLatest2:
class CombinedResult {
final List<BluetoothDevice> connectedDevices;
final List<ScanResult> scanResults;
CombinedResult(this.connectedDevices, this.scanResults);
}
final filteredStream = Rx.combineLatest2<List<BluetoothDevice>, List<ScanResult>, CombinedResult>(
FlutterBlue.instance.connectedDevices,
FlutterBlue.instance.scanResults,
(devices, scanResults) => CombinedResult(connectedDevices, scanResults),
).where((combinedResult) {
return true; //do your filtering here
});
类组合结果{
连接设备的最终列表;
最后结果清单;
CombinedResult(this.connectedDevices,this.scanResults);
}
最终过滤器流=Rx.CombinelateTest2(
blue.instance.connectedDevices,
blue.instance.scanResults,
(设备,扫描结果)=>CombinedResult(连接的设备,扫描结果),
).其中((组合结果){
return true;//在此处进行筛选
});
您可以这样使用Rx.CombineRelateTest2:
class CombinedResult {
final List<BluetoothDevice> connectedDevices;
final List<ScanResult> scanResults;
CombinedResult(this.connectedDevices, this.scanResults);
}
final filteredStream = Rx.combineLatest2<List<BluetoothDevice>, List<ScanResult>, CombinedResult>(
FlutterBlue.instance.connectedDevices,
FlutterBlue.instance.scanResults,
(devices, scanResults) => CombinedResult(connectedDevices, scanResults),
).where((combinedResult) {
return true; //do your filtering here
});
类组合结果{
连接设备的最终列表;
最后结果清单;
CombinedResult(this.connectedDevices,this.scanResults);
}
最终过滤器流=Rx.CombinelateTest2(
blue.instance.connectedDevices,
blue.instance.scanResults,
(设备,扫描结果)=>CombinedResult(连接的设备,扫描结果),
).其中((组合结果){
return true;//在此处进行筛选
});
?你好我不确定CombineResult是否是正确的函数。在east,我并不了解它的功能。嗨,CombinedResult只是一个包装类,我创建它是为了将第一个流中的connectedDevices和第二个流中的ScanResult存储在一个对象中。在filter函数中,您可以使用combinedResult.connectedDevices和combinedResult.scanResults访问这两个选项来执行filtering.Hi。我不确定CombineResult是否是正确的函数。在east,我并不了解它的功能。嗨,CombinedResult只是一个包装类,我创建它是为了将第一个流中的connectedDevices和第二个流中的ScanResult存储在一个对象中。在filter函数中,您可以使用combinedResult.connectedDevices和combinedResult.scanResults访问这两个选项进行过滤。