加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

颤动:将两个Streams流式传输到一个屏幕上?

发布时间:2020-12-14 14:51:42 所属栏目:百科 来源:网络整理
导读:我从两个不同的api中获取了两个流. StreamMonth get monthOutStream = monthOutController.stream;StreamMySchedule get resultOutStream = resultController.stream; 我在应用程序的两个不同状态下获取这些数据,结果是在用户的某些事件之后的开始和几个月.
我从两个不同的api中获取了两个流.

Stream<Month> get monthOutStream => monthOutController.stream;
Stream<MySchedule> get resultOutStream => resultController.stream;

我在应用程序的两个不同状态下获取这些数据,结果是在用户的某些事件之后的开始和几个月.

MyScheduleBloc(){
  initialData();
}

Future initialData() async {
  MySchedule mySchedule = await myScheduleViewModel.importMySchedule(now.id);
  resultController.add(mySchedule);
}

我的屏幕有一个streambuilder

Widget build(BuildContext context) {
final webCalenderBloc = WebCalenderBloc();
return StreamBuilder(
  stream: webCalenderBloc.resultOutStream,builder: (BuildContext context,snapdata){
    if(!snapdata.hasData){
      return Center(
        child: CircularProgressIndicator(),);
    }
    return body(snapdata.data);
   },);
}

由于主要的小部件构建方法将带有resultoutstream的StreamBuilder小部件作为流.我在哪里获取另一个流monthoutStream.
我可以在流中获取流吗?在处理两个流时我是否缺少任何内容.我不想从monthoutstream构建任何小部件但是想要检查其中的数据.

解决方法

如果需要,您可以嵌套StreamBuilder.没有什么能阻止您执行以下操作:

StreamBuilder(
  stream: stream1,builder: (context,snapshot1) {
    return StreamBuilder(
      stream: stream2,snapshot2) {
        // do some stuff with both streams here
      },);
  },)

如果这对你有意义,另一个解决方案是:Streams被设计为可合并/转换.您可以创建第三个流,它是两个后续流的合并.

理想情况下,对于复杂的流操作,您需要使用rxdart,因为它提供了一些有用的变换器.

使用rxdart,两个Observable(它是Stream的子类)的融合如下:

Observable<bool> stream1;
Observable<String> stream2;

final fusion = stream1.withLatestFrom(stream2,(foo,bar) {
  return MyClass(foo: foo,bar: bar);
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读