В проекте я выполнил маршрутизацию, не давая имени экрану, просто переключая экран, например Login() везде, но когда я хочу выйти из системы и очистить стек экрана, то как я могу открыть весь экран? и я не упомянул имя экрана при маршрутизации.
Navigator.push(context, MaterialPageRoute(builder: (context) => Login()),);
Я пытался открыть весь экран, пока не дошел до экрана входа в систему, но не смог переключиться, потому что '/login' не используется для маршрутизации.
Navigator.of(context).popUntil('/login', (Route<dynamic> route) => false);
@pskink да, но в предикате нам придется использовать псевдоним.
@pskink тогда какой будет маршрут? Как можно предикатировать маршрут без именования здесь используется имя.
так почему бы вам не использовать «именованные» маршруты?
@pskink Я новичок в флаттере. Я использовал простой способ навигации, теперь я даю название всем маршрутам, и спасибо.
Когда вы открываете Login() , вы можете сделать что-то вроде этого:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Login(),
settings: RouteSettings(name: '/login')),
);
Вы должны добавить настройку при продвижении вашего маршрута; с пользовательским именем. Если не используется фиксированное имя маршрута.
И когда вы хотите вернуться с на Login() :
Navigator.popUntil(context, ModalRoute.withName("/login"));
я сделал, но он показывает ошибку «При обработке жеста была выдана следующая ошибка StateError: Плохое состояние: Будущее уже завершено».
надо везде менять?
Трудно сказать, не видя вашего кода, но кажется, что ваш login() выскакивает из navigation стека между экранами перед вызовом .popUntil
мой дизайн экрана входа начинается с WillPopScope, это может создать проблему.
Вы делаете pushreplacement после входа в систему? если да, то вы в основном заменяете имя маршрута - '/login' новым экраном.
в заставке используется pushreplacement, при входе в систему используйте push, чтобы перейти на панель инструментов, а на панели инструментов на страницу учетной записи, используемую push, и появляется диалоговое окно для запроса выхода из системы.
в pushreplacement делать - Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => Login(), settings: RouteSettings(name: '/login'), ), );
NavigatorState#popUntil()метод принимает только один параметр:RoutePredicate predicate