Flutter: notifyListeners не работает ни на одной странице, кроме домашней страницы ⇐ Android
Flutter: notifyListeners не работает ни на одной странице, кроме домашней страницы
Мой main.dart вызывает wrapper.dart (ниже). В зависимости от глобальной переменной loggedIn отображается либо страница форм, либо страница входа.
На странице «Формы» пользователь может выбрать другую страницу для перехода. Если я перейду на страницу «Части проблем» и изменю loggedIn на false, приложение не вернется на страницу входа в систему. Однако если я изменю loggedIn на false на странице «Формы», приложение корректно вернется на страницу входа в систему. Почему это работает только на экране Форм, а не на другом экране?
Примечание. Я не хочу перегружать этот вопрос слишком большим количеством кода, поэтому добавил только минимум. Если вы считаете, что чего-то не хватает, спросите об этом, и я могу либо ответить, либо добавить это к вопросу.
wrapper.dart:
класс Wrapper расширяет StatefulWidget { const Wrapper({super.key}); @переопределить State createState() => _WrapperState(); } класс _WrapperState расширяет State { @переопределить недействительный initState() { супер.initState(); ///Сначала запустите это инициализировать(); } @переопределить располагать() { супер.dispose(); ///Запускаем это последним } void инициализировать() асинхронный { окончательный globalsOneTimeRead = context.read(); ожидайте globalsOneTimeRead.localDBInit(); } @переопределить Сборка виджета (контекст BuildContext) { return Consumer(builder: (context, value, child) { если (value.loggedIn == true) { вернуть константные формы(); } еще { вернуть константу входа(); } }); } } Страница «Формы»:
//... вернуть GestureDetector( onTap: () { Навигатор.push( контекст, MaterialPageRoute(builder: (context) => const IssueParts()), ); }, ребенок: Карточка( дочерний элемент: ListTile( заголовок: Text(formsList[index]['Form'], стиль: const TextStyle(fontSize: 21),), ), ), ); //... Страница с деталями проблемы:
//... ElevatedButton( onPressed: () асинхронный { ожидайте globals.logout(); //устанавливает loggedIn = false и вызывает notifyListeners(); }, дочерний элемент: const Text('ВЫХОД'), ), //...
Мой main.dart вызывает wrapper.dart (ниже). В зависимости от глобальной переменной loggedIn отображается либо страница форм, либо страница входа.
На странице «Формы» пользователь может выбрать другую страницу для перехода. Если я перейду на страницу «Части проблем» и изменю loggedIn на false, приложение не вернется на страницу входа в систему. Однако если я изменю loggedIn на false на странице «Формы», приложение корректно вернется на страницу входа в систему. Почему это работает только на экране Форм, а не на другом экране?
Примечание. Я не хочу перегружать этот вопрос слишком большим количеством кода, поэтому добавил только минимум. Если вы считаете, что чего-то не хватает, спросите об этом, и я могу либо ответить, либо добавить это к вопросу.
wrapper.dart:
класс Wrapper расширяет StatefulWidget { const Wrapper({super.key}); @переопределить State createState() => _WrapperState(); } класс _WrapperState расширяет State { @переопределить недействительный initState() { супер.initState(); ///Сначала запустите это инициализировать(); } @переопределить располагать() { супер.dispose(); ///Запускаем это последним } void инициализировать() асинхронный { окончательный globalsOneTimeRead = context.read(); ожидайте globalsOneTimeRead.localDBInit(); } @переопределить Сборка виджета (контекст BuildContext) { return Consumer(builder: (context, value, child) { если (value.loggedIn == true) { вернуть константные формы(); } еще { вернуть константу входа(); } }); } } Страница «Формы»:
//... вернуть GestureDetector( onTap: () { Навигатор.push( контекст, MaterialPageRoute(builder: (context) => const IssueParts()), ); }, ребенок: Карточка( дочерний элемент: ListTile( заголовок: Text(formsList[index]['Form'], стиль: const TextStyle(fontSize: 21),), ), ), ); //... Страница с деталями проблемы:
//... ElevatedButton( onPressed: () асинхронный { ожидайте globals.logout(); //устанавливает loggedIn = false и вызывает notifyListeners(); }, дочерний элемент: const Text('ВЫХОД'), ), //...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение