Flutter Navigator.pushAndRemoveUntil удаляет все маршруты независимо от условий - PullRequest
0 голосов
/ 20 июня 2020

нажатием кнопки я хотел бы проложить sh маршрут к определенному экрану (PaintingScreen) и удалить все маршруты до другого (RoomScreen).

Мой стек до нажатие кнопки:

Экран приветствия -> Главный экран -> Экран комнаты -> Экран рисования -> Экран рисунка

и после должно быть:

Экран приветствия -> Главный экран -> Экран комнаты -> Экран рисования

вместо этого :

Экран рисования

Код следующий:

Navigator.pushAndRemoveUntil(
   context,
   MaterialPageRoute(builder: (context) {
      return PaintingScreen();
   }),
   ModalRoute.withName(RoomScreen.id),
);  

где RoomScreen.id определен в файле main.dart следующим образом:

routes: {
          WelcomeScreen.id: (context) => WelcomeScreen(),
          ...
          RoomScreen.id: (context) => RoomScreen(),
          ...
          PaintingScreen.id: (context) => PaintingScreen(),
          
        },

и все идентификаторы определены внутри классов:

class PaintingScreen extends StatefulWidget {
  static const String id = 'painting_screen';

Где я делаю не так? Спасибо

1 Ответ

0 голосов
/ 20 июня 2020

это потому, что вы передаете until равное Null, потому что ModalRoute.withName(RoomScreen.id) не может определять и передавать Null автоматически

вы можете передать null в untilPage, и он очистит стек

вы неправильно определяете маршруты,

в документах флаттера говорится, что вы должны передать карту для маршрута свойство

MaterialApp(
  routes: {
    // When navigating to the "/" route, build the FirstScreen widget.
    '/': (context) => FirstScreen(),
    // When navigating to the "/second" route, build the SecondScreen widget.
    '/second': (context) => SecondScreen(),
  },
);

, и ваши маршруты должны быть такими:

routes: {
    '/welcomeScreen': (context) => WelcomeScreen(),
    ...
    '/roomScreen': (context) => RoomScreen(),
    ...
    '/paintingScreen': (context) => PaintingScreen(),
},

ваш навигатор должен быть таким:

Navigator.pushAndRemoveUntil(
   context,
   MaterialPageRoute(builder: (context) {
      return PaintingScreen();
   }),
   ModalRoute.withName('/roomScreen'),
);  

и вы не может передавать свойства класса с именованными маршрутами

...