Используйте 2 разных потока в одном StreamBuilder - PullRequest
0 голосов
/ 16 апреля 2019

Возможно ли использование двух разных потоков в одном Stream Builder или как мне решить эту проблему?

Я пытался использовать один поток для них обоих, но BehaviorSubject для данных темы - это модель ThemeData и для languageStreamСтрока, и она не работает.

child: StreamBuilder<String>(
        stream: translationsBloc.languageOutStream,
//      stream: themeBloc.outFirestore,

это потоки, которые я хочу использовать

блоки выглядят так:

 final _themeSubject = BehaviorSubject<ThemeData>();
  Stream<ThemeData> get outTheme => _themeSubject.stream;

и другиевот так

BehaviorSubject<String> _languageController = BehaviorSubject<String>();
  Stream<String> get languageOutStream => _languageController;

Мне нужно, чтобы оба потока были на главной странице, так как это влияет на все приложение.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Полагаю, лучший подход будет вложенным 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();
            });
      });
}
0 голосов
/ 16 апреля 2019

Вы можете управлять с помощью логической переменной isThisStreamRequired. установите состояние isThisStreamRequired на ваше состояние.

child: StreamBuilder<String>(
        stream: isThisRequired?translationsBloc.languageOutStream:themeBloc.outFirestore,
...