Flutter: удалить все маршруты без имени маршрута

В проекте я выполнил маршрутизацию, не давая имени экрану, просто переключая экран, например Login() везде, но когда я хочу выйти из системы и очистить стек экрана, то как я могу открыть весь экран? и я не упомянул имя экрана при маршрутизации.

Navigator.push(context, MaterialPageRoute(builder: (context) => Login()),);

Я пытался открыть весь экран, пока не дошел до экрана входа в систему, но не смог переключиться, потому что '/login' не используется для маршрутизации.

Navigator.of(context).popUntil('/login', (Route<dynamic> route) => false);
NavigatorState#popUntil()метод принимает только один параметр: RoutePredicate predicate
pskink 21.02.2019 07:06

@pskink да, но в предикате нам придется использовать псевдоним.

Farhana Naaz Ansari 21.02.2019 07:09

@pskink тогда какой будет маршрут? Как можно предикатировать маршрут без именования здесь используется имя.

Farhana Naaz Ansari 21.02.2019 07:14

так почему бы вам не использовать «именованные» маршруты?

pskink 21.02.2019 08:08

@pskink Я новичок в флаттере. Я использовал простой способ навигации, теперь я даю название всем маршрутам, и спасибо.

Farhana Naaz Ansari 21.02.2019 08:22
3
5
1 295
1

Ответы 1

Когда вы открываете Login() , вы можете сделать что-то вроде этого:

 Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) => Login(),
                settings: RouteSettings(name: '/login')),
          );

Вы должны добавить настройку при продвижении вашего маршрута; с пользовательским именем. Если не используется фиксированное имя маршрута.

И когда вы хотите вернуться с на Login() :

 Navigator.popUntil(context, ModalRoute.withName("/login"));

я сделал, но он показывает ошибку «При обработке жеста была выдана следующая ошибка StateError: Плохое состояние: Будущее уже завершено».

Farhana Naaz Ansari 21.02.2019 07:06

надо везде менять?

Farhana Naaz Ansari 21.02.2019 07:06

Трудно сказать, не видя вашего кода, но кажется, что ваш login() выскакивает из navigation стека между экранами перед вызовом .popUntil

anmol.majhail 21.02.2019 07:09

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

Farhana Naaz Ansari 21.02.2019 07:12

Вы делаете pushreplacement после входа в систему? если да, то вы в основном заменяете имя маршрута - '/login' новым экраном.

anmol.majhail 21.02.2019 07:23

в заставке используется pushreplacement, при входе в систему используйте push, чтобы перейти на панель инструментов, а на панели инструментов на страницу учетной записи, используемую push, и появляется диалоговое окно для запроса выхода из системы.

Farhana Naaz Ansari 21.02.2019 07:27

в pushreplacement делать - Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => Login(), settings: RouteSettings(name: '/login'), ), );

anmol.majhail 21.02.2019 07:32

Другие вопросы по теме

Похожие вопросы

Проверка подлинности телефона Firebase показывает исключение, когда активность возобновляется: «Срок действия смс-кода истек. Пожалуйста, повторно отправьте код подтверждения, чтобы повторить попытку»
Дата в порядке убывания
Разбор итеративных объектов json с использованием retrofit/gson
Как локализовать имя приложения, отображаемое в лаунчере, с помощью флаттера?
BottomNavigationView скрывает при прокрутке, но не отображает при изменении фрагмента
Как разработать мобильное приложение для Android с протоколом активной синхронизации Exchange
Как определить, соединился ли пользователь с устройством BLE, используя настройки Android Bluetooth?
Как получить доступ к пользовательскому макету из PreferenceFragmentCompat?
ConstraintLayout не ограничивается нижней частью, когда нижняя часть скрыта
Я собираю apk своего проекта Android. Apk также успешно собирается. но когда я пытаюсь установить apk на свой телефон, он не устанавливается и показывает ошибку.?