#dart #flutter
#dart #флаттер
Вопрос:
У меня есть новый навигатор внутри главного навигатора приложения, и я хочу наблюдать за новыми методами navigator push и pop, но, похоже, обратные вызовы наблюдателя вызываются только для главного навигатора, а не для нового навигатора. как я могу это исправить?
инициализация :
final GlobalKey<NavigatorState> newNavigatorKey = GlobalKey<NavigatorState>();
final RouteObserver<PageRoute> _routeObserver = RouteObserver<PageRoute>();
onInit: (store) => _routeObserver.subscribe(this, ModalRoute.of(context)),//I think problem is from this line
отменить подписку :
onDispose: (store) => _routeObserver.unsubscribe(this)
новый навигатор:
Navigator(
key: newNavigatorKey,
observers: [_routeObserver],
onGenerateRoute: (routeSettings) {
return MaterialPageRoute(
builder: (context) =>
routs[routeSettings.name],
);
})
класс контейнера:
class CategoryNavigator extends StatelessWidget with RouteAware
Смешивание делегатов RouteAware:
@override
void didPop() {
_routeState--;
super.didPopNext();
}
@override
void didPush() {
_routeState ;
super.didPushNext();
}
Комментарии:
1. Зачем вам 2 навигатора? каков ваш вариант использования?
2. У меня есть обозреватель категорий, в котором есть панель истории на одной странице, панель истории должна быть одинаковой для всех экранов проводника. итак, мне нужен новый навигатор для изменения страниц внутри одной страницы.
3. Почему вы не можете использовать тот же навигатор и просто пропустить маршрут к этой единственной странице?
4. потому что есть общий виджет Explorer, который должен быть одинаковым для всех страниц.
Ответ №1:
Причина, по которой вы наблюдаете основные события навигатора вместо того, которое вы создали, заключается в том, что вы указали строку, в которой ошибка.
onInit: (store) => _routeObserver.subscribe(this, ModalRoute.of(context))
context
Ваш переход здесь относится к виджету, который создается Navigator
в его build() .
Это означает, что он находится над тем навигатором, который вы создали в дереве виджетов. Поэтому вы получаете события для основного навигатора
Комментарии:
1. спасибо, харш, но что исправить? как я могу получить доступ к правильному контексту?