Я создаю нижнюю панель навигации, и все работает нормально, кроме случаев, когда пользователь нажимает кнопку «Назад» на своем устройстве. Состояние панели навигации не обновляется для отображения страницы, на которой они находятся. Чтобы это исправить, я узнал о NavigatorObserver
. Теперь я вижу, когда маршрут прерывается, но у меня нет возможности обновить состояние. Моя навигационная панель использует маршруты, поэтому, когда пользователь нажимает кнопку, он выводит новый маршрут. Я пытаюсь обновить индекс панели навигации, но не вижу способа сделать это. Навбар использует StatefulWidget
, поэтому я могу использовать обратный вызов setState
.
Я пробовал использовать ключи, но не могу использовать их повторно, поскольку они находятся на разных Scaffold
с. Я не могу получить доступ к BuildContext
из NavigationObserver
, поэтому я не могу использовать такие вещи, как Provider
, чтобы уведомить об изменении и восстановить.
class CustomBottomNavBar extends StatefulWidget {
@override
_CustomBottomNavBarState createState() => _CustomBottomNavBarState();
}
class _CustomBottomNavBarState extends State<CustomBottomNavBar> {
static int _selectedIndex;
int get selectedIndex => _selectedIndex;
set selectedIndex(int newIndex) {
setState(() {
_selectedIndex = newIndex;
});
}
//...
}
class NavBarObserver extends NavigatorObserver {
@override
void didPop(Route route, Route previousRoute) {
final navBarRoutes = Routes.all.sublist(0,4);
final routeName = route.settings.name;
if (navBarRoutes.contains(routeName)) {
final index = navBarRoutes.indexOf(routeName);
// selectedIndex = index;
}
}
}