Контекст:
- Я использую go_router для маршрутизации в своем приложении Flutter.
- Мне нужно показывать AlertDialog, когда пользователь пытается вернуться с определенного маршрута, но PopScope этого не делает кажется, работает так, как задумано.
- Я хочу контролировать поведение при нажатии кнопки «Назад» и либо разрешать, либо запрещать навигацию в зависимости от пользователя. подтверждение.
Пример кода:
Вот соответствующий фрагмент кода, где Настраиваю PopScope и GoRouter:Код: Выделить всё
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class AppNavigation {
AppNavigation._();
static final rootNavigatorKey = GlobalKey();
static List routes = [
GoRoute(
path: "/home",
name: "Home",
builder: (BuildContext context, GoRouterState state) {
return HomePage();
},
),
// Other routes...
];
static final GoRouter router = GoRouter(
navigatorKey: rootNavigatorKey,
routes: routes,
);
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home')),
body: PopScope(
onPopInvoked: () async {
final shouldExit = await showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Confirmation'),
content: Text('Do you want to exit?'),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(false),
child: Text('No'),
),
TextButton(
onPressed: () => Navigator.of(context).pop(true),
child: Text('Yes'),
),
],
),
);
return shouldExit;
},
child: Center(child: Text('Home Page Content')),
),
);
}
}
Проблема:
- Виджет PopScope должен перехватывать обратную навигацию и отображение AlertDialog, но, похоже, он не работает должным образом.
- AlertDialog не отображается, когда кнопка «Назад» нажата, а поведение навигации не контролируется.
Что я пробовал:
- Убедился, что PopScope правильно используется в виджете «Навигатор».
- Проверено, что GoRouter настроен правильно. и что конфигурация маршрута правильна.
Вопрос:
Как убедиться, что PopScope правильно работает с go_router? Существует ли известная проблема или обходной путь использования PopScope с go_router для управления обратной навигацией?Спасибо за любую помощь или идеи!
Что я пробовал:
- Реализовал PopScope для обработки обратной навигации в настройке GoRouter.< /p>
- Использовал PopScope для отображения AlertDialog, запрашивающего у пользователя подтверждение при попытке вернуться назад.
- Настроил обратный вызов onPopInvoked в PopScope для отображения AlertDialog и определения необходимости продолжения навигации.
Что я Ожидается:
- При нажатии кнопки «Назад» PopScope должен перехватить событие и отобразить AlertDialog.
- AlertDialog должен предоставлять пользователю возможность подтвердить или отменить навигацию.
Если пользователь подтвердит, навигация должна продолжиться. Если пользователь отменяет отмену, навигация должна быть заблокирована.
Что на самом деле произошло:
- AlertDialog не отображается при нажатии кнопки «Назад».
- Навигация происходит сразу, без показа диалога, игнорируя PopScope конфигурация.
Подробнее здесь: https://stackoverflow.com/questions/788 ... ot-working