我从两个不同的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); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。