Flutter - всплывает до экрана без маршрута - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение Flutter, которое начинается так:

void main() async {

  // Check if user is logged in

  runApp(
    MaterialApp(
      home: (isLoggedIn) ? MainPage() : PageLogin(),
    ),
  );
}

Моя MainPage (и моя LoginPage) - это всего лишь 2 обычных виджета с отслеживанием состояния.

class MainPage extends StatefulWidget {
  MainPage({Key key, this.selectedPageDefault = 0}) : super(key: key);

  @override
  _MainPageState createState() => _MainPageState();
}

Допустим, у меня есть 2 больше страниц, как и MainPage: PageOne и PageTwo.
Когда я нажимаю кнопку на MainPage, я попадаю на PageOne, а когда я нажимаю кнопку на PageOne, он переводит меня к PageTwo.
I go к ним, используя:

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => PageOne(), // Or PageTwo
  ),
);

Теперь, когда я нажимаю кнопку в PageTwo, я хочу go вернуться к MainPage.
Я мог бы использовать Navigator.of(context).popUntil(...), однако он должен использовать маршруты, и я не использовал go до MainPage с использованием маршрута.

Это всего лишь пример, но на самом деле app У меня больше, чем 2 страницы после MainPage, поэтому я не могу просто использовать pushReplacement или хитрый способ добиться этого.

Как я могу go вернуться к MainPage?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Используйте это Navigator.of(context).popUntil((route) => route.isFirst)

1 голос
/ 29 мая 2020

Вам нужно добавить такие настройки


Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => MainPage(),
    settings : RouteSettings()..name = 'MainPage',
  ),
);
Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => PageOne(),
    settings : RouteSettings()..name = 'PageOne',
  ),
);
Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => PageTwo(),
    settings : RouteSettings()..name = 'PageTwo',
  ),
);

, и вы можете использовать это

 Navigator.of(context).popUntil(ModalRoute.withName('MainPage'));
...