Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何组合和过滤两个dart流_Flutter_Dart - Fatal编程技术网

Flutter 如何组合和过滤两个dart流

Flutter 如何组合和过滤两个dart流,flutter,dart,Flutter,Dart,我正在使用flutter_blue作为使用蓝牙的flutter应用程序 Flatter_blue为我呈现了两条溪流: blue.instance.connectedDevices blue.instance.scanResults 我想将这两个流合并为一个流并应用过滤器 在谷歌上搜索,我找到了rxdart的参考资料,但我仍然无法让它发挥作用。 请帮忙:)我想你想要的是Dart的StreamGroup StreamGroup类将流的集合合并到单个输出流中 这应该很简单,您只需获取流并使用Strea

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

Flatter_blue为我呈现了两条溪流: blue.instance.connectedDevices blue.instance.scanResults

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

在谷歌上搜索,我找到了rxdart的参考资料,但我仍然无法让它发挥作用。
请帮忙:)

我想你想要的是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访问这两个选项进行过滤。