我有两个从两个不同的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); }, ); }
由于主要的窗口小部件构建方法将StreamBuilder窗口小部件与resultoutstream作为流。我在哪里获取另一个流monthoutStream。我可以在流中获取流吗?我在处理两个流时是否缺少任何东西。我不想从monthoutstream构建任何小部件,但想检查其中的数据。
StreamBuilder如果需要,可以嵌套。没有什么可以阻止您执行以下操作:
StreamBuilder
StreamBuilder( stream: stream1, builder: (context, snapshot1) { return StreamBuilder( stream: stream2, builder: (context, snapshot2) { // do some stuff with both streams here }, ); }, )
如果这对您有意义,则另一个解决方案是:流被设计为可合并/转换的。您可以创建第三个流,该流是后面两个流的合并。
对于复杂的流操作,理想情况下,您将需要使用rxdart,因为它提供了一些有用的转换器。
使用rxdart,两个Observable(属于的子类Stream)的融合如下:
Observable
Stream
Observable<bool> stream1; Observable<String> stream2; final fusion = stream1.withLatestFrom(stream2, (foo, bar) { return MyClass(foo: foo, bar: bar); });