在一个 StreamBuilder 中使用 2 个不同的流
Use 2 different streams in one StreamBuilder
在一个 Stream Builder 中使用 2 个不同的流是否可行,或者我应该如何解决这个问题?
我尝试对它们都使用同一个流,但是主题数据的 BehaviorSubject 是 ThemeData 模型,而对于 languageStream 是 String 并且它不起作用。
child: StreamBuilder<String>(
stream: translationsBloc.languageOutStream,
// stream: themeBloc.outFirestore,
这些是我想要使用的流
Bloc 看起来像这样:
final _themeSubject = BehaviorSubject<ThemeData>();
Stream<ThemeData> get outTheme => _themeSubject.stream;
还有一个像这样
BehaviorSubject<String> _languageController = BehaviorSubject<String>();
Stream<String> get languageOutStream => _languageController;
我需要两个流都在主页中,因为它会影响整个应用程序。
您可以使用布尔变量进行管理 isThisStreamRequired
。根据您的情况设置 isThisStreamRequired
的状态。
child: StreamBuilder<String>(
stream: isThisRequired?translationsBloc.languageOutStream:themeBloc.outFirestore,
我想最好的方法是嵌套 StreamBuilders
。这并不少见,实际上经常使用。
当然,您可能只加载一次内部流 snapshot.data
对于第一个流是正确的,但这取决于您的应用程序。如果您提供更多代码,我会帮助您。但基本结构最终可能是这样的:
Widget build(BuildContext context) {
return StreamBuilder<String>(
stream: translationsBloc.languageOutStream,
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
return StreamBuilder<ThemeData>(
stream: themeBloc.outFirestore,
builder: (BuildContext context, AsyncSnapshot<ThemeData> snapshot) {
return Container();
});
});
}
在一个 Stream Builder 中使用 2 个不同的流是否可行,或者我应该如何解决这个问题?
我尝试对它们都使用同一个流,但是主题数据的 BehaviorSubject 是 ThemeData 模型,而对于 languageStream 是 String 并且它不起作用。
child: StreamBuilder<String>(
stream: translationsBloc.languageOutStream,
// stream: themeBloc.outFirestore,
这些是我想要使用的流
Bloc 看起来像这样:
final _themeSubject = BehaviorSubject<ThemeData>();
Stream<ThemeData> get outTheme => _themeSubject.stream;
还有一个像这样
BehaviorSubject<String> _languageController = BehaviorSubject<String>();
Stream<String> get languageOutStream => _languageController;
我需要两个流都在主页中,因为它会影响整个应用程序。
您可以使用布尔变量进行管理 isThisStreamRequired
。根据您的情况设置 isThisStreamRequired
的状态。
child: StreamBuilder<String>(
stream: isThisRequired?translationsBloc.languageOutStream:themeBloc.outFirestore,
我想最好的方法是嵌套 StreamBuilders
。这并不少见,实际上经常使用。
当然,您可能只加载一次内部流 snapshot.data
对于第一个流是正确的,但这取决于您的应用程序。如果您提供更多代码,我会帮助您。但基本结构最终可能是这样的:
Widget build(BuildContext context) {
return StreamBuilder<String>(
stream: translationsBloc.languageOutStream,
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
return StreamBuilder<ThemeData>(
stream: themeBloc.outFirestore,
builder: (BuildContext context, AsyncSnapshot<ThemeData> snapshot) {
return Container();
});
});
}