#flutter #dart
#трепетание #дротик
Вопрос:
Я не использую именованные маршруты в приложении. Вместо этого, следуя вдохновению из библиотеки FlutterBloc, я использую определения маршрутов, подобные этому.
class OrganizationPage extends StatelessWidget {
static Route route() {
return MaterialPageRoute<void>(builder: (_) => OrganizationPage());
}
// ....
}
И я ориентируюсь с помощью…
Navigator.push(
context,
LoginPage.route(),
);
Предположим, с момента загрузки OrganizationPage
я несколько раз перемещался. Я хочу нажать кнопку, которая откроет маршрут страницы организации все остальное поверх него и загрузит новую страницу. Как это можно сделать?
Я думал о том, чтобы сделать что-то подобное…
Navigator.pushAndRemoveUntil(
context,
HomePage.route(),
(Route<dynamic> route) {
// print("Checking route: $route");
// return route.builder.toString().contains("OrganizationPage")
// `builder` is not available, even though it did in the debugger.
},
);
Можно ли сделать то, чего я хочу? Если да, то каким образом?
Я предполагаю, что если я буду использовать именованные маршруты, это может быть проще? К сожалению, я написал много кода и предпочитаю избегать рефакторинга. Кроме того, таким образом, я могу легко принимать любые аргументы на странице.
Заранее благодарю.
Ответ №1:
Пробовал (Route<dynamic> route) => route.settings.name == "/OrganizationPage"
?
Обновить
Использование метода, выделенного в вопросе, не приводит к получению имени маршрута. Но имя маршрута может быть указано явно.
static Route route() {
return MaterialPageRoute<void>(
builder: (_) => OrganizationPage(),
settings: RouteSettings(name: '/OrganizationPage'),
);
}
Теперь, когда у маршрута есть имя, мы можем использовать
Navigator.pushAndRemoveUntil(
context,
HomePage.route(),
(Route<dynamic> route) => route.settings.name == OrganzationPage.route().settings.name;
);
Комментарии:
1. Это не именованный маршрут. В результате
route.settings.name
получаетсяnull
.2. Как
null
? Если указано какое-либо имя, имя маршрута по умолчанию/PageClassName