Ниже приведен код.
- Переход на страницу входа с домашней страницы
ElevatedButton(
onPressed: () => Navigator.of(context, rootNavigator: true)
.push(MaterialPageRoute(
fullscreenDialog: true,
builder: (context) => UserLoginPage(),
)),
child: Text('Login to continue'),
),
Внутренняя страница входа в систему:
BlocConsumer<UserAuthCubit, UserAuthState>(
listener: (context, state) {
if (state is UserAuthorized) {
Navigator.of(context, rootNavigator: true).pop();
}
if (state is UserAuthWaiting) {
showModalBottomSheet(
useRootNavigator: true,
isDismissible: false,
context: context,
builder: (context) {
return WillPopScope(
onWillPop: () async => false,
child: Center(
child: Text(state.msg),
),
);
});
dialog = true;
} else {
if (dialog) {
Navigator.of(context, rootNavigator: true).pop();
dialog = false;
}
}
},
builder: (context, state) { // some widget code... }
Когда состояние равно UserAuthorized
, я хочу открыть диалоговое окно, а также страницу входа в систему, чтобы вернуться на последнюю страницу, т.е. домашнюю страницу. Однако с приведенным выше кодом иногда это работает, а в другой раз домашняя страница также выскакивает. Я пробовал с / без rootNavigator, установленным на true, но не смог достичь своей цели.
Пожалуйста, помогите мне понять, что мне здесь не хватает.
Я проверил ответ здесь Как закрыть диалоговое окно флаттера?.