Работает ли Flutter StreamBuilder для виджетов, расположенных дальше по дереву виджетов?

Я разместил streambuilder в верхней части дерева виджетов для прослушивания потока. Если в потоке есть данные, а данные содержат A, он вернет Apage (), как показано на рисунке. Из Apage () я могу нажать на DPage ().

Если бы мне пришлось удалить данные из DPage, построитель потока автоматически вернул бы cPage (), или мне нужно было бы использовать Navigator.pop (context), чтобы вернуться на домашнюю страницу?

Если бы я отредактировал данные из DPage и изменил их на B, построитель потока автоматически вернул бы BPage (), или мне нужно было бы использовать Navigator.pop (context), чтобы вернуться на домашнюю страницу?

введите описание изображения здесь


person scott lee    schedule 27.05.2021    source источник
comment
если вы делаете Navigator.push, вам всегда нужно Navigator.pop, чтобы вернуться на родительскую страницу   -  person pskink    schedule 27.05.2021
comment
Понятно, это означает, что мне нужно будет запустить Navigator.pop вместе с изменением данных в Dpage, чтобы перейти на BPage. Хорошо, я попробую. Спасибо!   -  person scott lee    schedule 27.05.2021
comment
нет необходимости нажимать или выталкивать .... позвольте дать вам образец кода ...   -  person Gbenga B Ayannuga    schedule 27.05.2021
comment
обновите вопрос, добавив в него образец домашнего кода ....   -  person Gbenga B Ayannuga    schedule 27.05.2021


Ответы (1)


Просто пример кода ... с этим вы поймете, как вы можете использовать его с виджетом и вернуть все, что захотите

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp()
      .then((value) => print("connected " + value.options.asMap.toString()))
      .catchError(
        (e) => print(
          e.toString(),
        ),
      );
  await SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  SharedPreferences pref = await SharedPreferences.getInstance();
  bool security1 = pref.getBool('security') ?? false;
  runApp(
    ChangeNotifierProvider(
      create: (BuildContext context) => ThemeProvider(),
      child: streamBuilder(
stream:// your query....
builder:(context, snapshot){
if(snapshot.hasdata){
return MyApp(
        security: security1,
      ),
    ),
}
if (!snapshot.hasdata){
return Center(child: CicularProgressIndicator();
}
return HomeScreen()
}
)

  );
}
person Gbenga B Ayannuga    schedule 27.05.2021
comment
хммм, всякий раз, когда в снимке есть данные, вы, кажется, возвращали 2 виджета (myApp и LockScreen). Зачем ты это делаешь? - person scott lee; 28.05.2021
comment
Например, если вы должны были вернуть MyApp и нажать на другую страницу для удаления данных, вам все равно нужно открыть окно, чтобы streambuilder заработал и вернул вам домашний экран? - person scott lee; 28.05.2021
comment
извините, это была ошибка (! snapshot.hasdata), это то, что я должен туда положить - person Gbenga B Ayannuga; 28.05.2021
comment
Например, если вы должны были вернуть MyApp и нажать на другую страницу для удаления данных, вам все равно нужно открыть окно, чтобы streambuilder заработал и вернул вам домашний экран? ....... Нет, вы можете очень хорошо узнать о streambuilder. поток загружается автоматически. - person Gbenga B Ayannuga; 28.05.2021
comment
этот код - всего лишь образец кода, позвольте мне обновить его - person Gbenga B Ayannuga; 28.05.2021