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
我们如何在dart中混合溪流?_Dart_Flutter_Dart Async - Fatal编程技术网

我们如何在dart中混合溪流?

我们如何在dart中混合溪流?,dart,flutter,dart-async,Dart,Flutter,Dart Async,让两个流传递两种不同类型的数据。 我希望这两个流中的一个流能够组合数据并封装在数据类中并交付它 例如: Stream<String> stream1; Stream<String> stream2; class Data{ String s1; String s2; Data(this.s1,this.s2); } stream1; 溪流2; 类数据{ 字符串s1; 字符串s2; 数据(此.s1,此.s2); } 这方面没有现成的解决方案。您通

让两个流传递两种不同类型的数据。 我希望这两个流中的一个流能够组合数据并封装在数据类中并交付它

例如:

Stream<String> stream1;
Stream<String> stream2;

class Data{
    String s1;
    String s2;
    Data(this.s1,this.s2);
}
stream1;
溪流2;
类数据{
字符串s1;
字符串s2;
数据(此.s1,此.s2);
}
这方面没有现成的解决方案。您通常必须为此创建自定义逻辑(称为
StreamTransformer

另一方面,您可以使用第三方库。例如
rxdart
,它包括多个流融合操作符:

Stream<String> stream1;
Stream<String> stream2;
Stream<String> concat = Observable.combineLatest2(stream1, stream2, (a, b) => a + b);
stream1;
溪流2;
流浓度=可观察到的。组合相关性2(流1,流2,(a,b)=>a+b);

使用stream\u transform包中的stream transform函数combinelatetest(在pubspec.yml中为“stream\u transform”添加依赖项)

import'包:stream\u transform/stream\u transform.dart'显示组合测试;
流组合流(流1、流2){
返回stream1.transform(组合测试(stream2,(s1,s2)=>Data(s1,s2));
}

这里也回答了:(没有告诉如何访问combineLastest函数)。

那么
StreamGroup
呢?我从未使用过它,但文档似乎说它是一个流多路复用器,它没有随dart SDK一起提供,并且要求所有流值都具有相同的类型
StreamGroup.merge([stream1,stream1]).map((event){//event将是Object类型,如果类型不是相同的返回事件;})尝试在答案中添加一些附件,以提高答案的质量。
import 'package:stream_transform/stream_transform.dart' show combineLatest;

Stream<Data> combinedStream(Stream<String> stream1, Stream<String> stream2) {
  return stream1.transform(combineLatest(stream2, (s1, s2) => Data(s1, s2)));
}