gpt4 book ai didi

stream - flutter : stream two Streams into a single screen?

转载 作者:IT老高 更新时间:2023-10-28 12:36:29 27 4
gpt4 key购买 nike

我有两个流从两个不同的 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);
}

我的屏幕有一个流构建器

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,
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);
});

关于stream - flutter : stream two Streams into a single screen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880330/

27 4 0