Flutter Navigator pushAndRemove Справка (маршруты без имен)

#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