一尘不染

Flutter:将两个流串流到一个屏幕中?

flutter

我有两个从两个不同的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构建任何小部件,但想检查其中的数据。


阅读 269

收藏
2020-08-13

共1个答案

一尘不染

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<bool> stream1;
Observable<String> stream2;

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