У меня проблемы с использованием Navigator.popUntil
, чтобы вернуться к экрану, на который мне нужно вернуться.
Приложение является частью веб-страницы, и структура экрана / навигации: HomePage
толкает MainScreen
(первый экран приложения), который использует панель навигации для навигации по экранам приложения, одним из которых является PromotionsScreen
.
Затем PromotionScreen
нажимает на ChooseProductScreen
с помощью:
Navigator.push(
context,
MaterialPageRoute(
settings: RouteSettings(
name: 'PromotionsScreen'
),
builder: (_) =>
BlocProvider.value(
value: BlocProvider.of<
PromotionBloc>(
context),
child: ChooseProductScreen(
user: widget.user,
cityDb: widget.cityDb,
regionDb: widget.regionDb,
countryDb: widget.countryDb,
),
),
),
);
Затем ChooseProductScreen
переходит на NewEditPromotionScreen
с помощью:
Navigator.push(
// Navigator.pushReplacement( // Bloc event isn't sent from NewEditPromotionScreen
context,
MaterialPageRoute(
settings: RouteSettings(
name: 'ChooseProductScreen'
),
builder: (_) =>
BlocProvider.value(
value: BlocProvider
.of<
PromotionBloc>(
context),
child:
NewEditPromotionScreen(
type: 'New',
user: widget
.user,
cityDb:
widget.cityDb,
regionDb: widget
.regionDb,
countryDb: widget
.countryDb),
),
),
);
Теперь с NewEditPromotionScreen
я хочу вернуться к PromotionsScreen
:
// pop CircularProgressIndicator Dialog
Navigator.of(context, rootNavigator: true).pop(context);
// pop the screen
// Navigator.popUntil(context, (route) => route.isFirst); // pops to HomePage
// Navigator.popUntil(context, (route) => route.settings.name == 'PromotionsScreen'); // pops to white screen
// Navigator.popUntil(context, ModalRoute.withName('PromotionsScreen')); // pops only to ChooseProductScreen
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (BuildContext context) => PromotionsScreen()), // Screen is not in NavigationBar
(route) => false);
Я пытался:
Navigator.popUntil(context, (route) => route.isFirst);
, но это появится на веб-странице HomeScreen
.
Я попытался указать имя «PromotionsScreen» в RouteSettings
в PromotionsScreen
при нажатии на ChooseProductScreen
, а затем использовал Navigator.popUntil(context, ModalRoute.withName('PromotionsScreen'));
, но всплывает только до ChooseProductScreen
.
Это потому, что «PromotionsScreen» - это имя маршрута, который продвигается к ChooseProductScreen
, поэтому popUntil
действительно работает должным образом? Если это так, как можно вместо этого перейти к PromotionsScreen
, поскольку путь к нему управляется панелью навигации?
Я также пробовал:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (BuildContext context) => PromotionsScreen()),
(route) => false);
но при этом экран будет отображаться не на панели навигации ..
Можете ли вы определить, что я делаю в одежде?
Большое спасибо за помощь.