Dart 在一个StreamBuilder中使用两个不同的流
在一个流生成器中使用2个不同的流这是可能的还是我应该如何解决这个问题 我试着用一个流来处理这两个问题,但是主题数据的行为子对象是主题数据模型,而语言流是字符串,但没有成功Dart 在一个StreamBuilder中使用两个不同的流,dart,flutter,stream,bloc,Dart,Flutter,Stream,Bloc,在一个流生成器中使用2个不同的流这是可能的还是我应该如何解决这个问题 我试着用一个流来处理这两个问题,但是主题数据的行为子对象是主题数据模型,而语言流是字符串,但没有成功 child: StreamBuilder<String>( stream: translationsBloc.languageOutStream, // stream: themeBloc.outFirestore, child:StreamBuilder( stream:transla
child: StreamBuilder<String>(
stream: translationsBloc.languageOutStream,
// stream: themeBloc.outFirestore,
child:StreamBuilder(
stream:translationsBloc.languageOutStream,
//溪流:themeBloc.outFirestore,
这些是我想要使用的流
这些集团看起来是这样的:
final _themeSubject = BehaviorSubject<ThemeData>();
Stream<ThemeData> get outTheme => _themeSubject.stream;
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();
});
});
}
final _themessubject=BehaviorSubject();
Stream get outTheme=>\u themeSubject.Stream;
另一个像这样
BehaviorSubject<String> _languageController = BehaviorSubject<String>();
Stream<String> get languageOutStream => _languageController;
BehaviorSubject\u languageController=BehaviorSubject();
Stream get languageOutStream=>\u languageController;
我需要两个流都出现在主页中,因为它会影响整个应用程序。您可以使用布尔变量
isThisStreamRequired
进行管理。根据您的条件设置isThisStreamRequired
的状态
child: StreamBuilder<String>(
stream: isThisRequired?translationsBloc.languageOutStream:themeBloc.outFirestore,
child:StreamBuilder(
stream:Isthis Required?translationsBloc.languageOutStream:themeBloc.outFirestore,
我想最好的方法应该是嵌套的StreamBuilders
。这并不少见,而且实际上经常使用
当然,您可能只会加载一次内部流快照。第一个流的数据为真,但这取决于您的应用程序。如果您提供更多代码,我将帮助您完成这项工作。但基本结构可能最终如下所示:
final _themeSubject = BehaviorSubject<ThemeData>();
Stream<ThemeData> get outTheme => _themeSubject.stream;
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:translationsBloc.languageOutStream,
生成器:(BuildContext上下文,异步快照){
返回流生成器(
溪流:themeBloc.outFirestore,
生成器:(BuildContext上下文,异步快照){
返回容器();
});
});
}