Flutter перейти к главному экрану вместо предыдущего - PullRequest
0 голосов
/ 02 августа 2020

Я только начал работать с Flutter и не собираюсь ie это потрясающе. Однако одна «проблема», с которой я столкнулся, заключается в том, что, когда вы нажимаете клавишу возврата, происходит переход к предыдущему экрану. Я знаю, что это должно произойти, но как я могу это изменить? Кроме того, кнопка appBar делает то же самое, поэтому я ищу "исправление" и для нее.

Если вам нужен какой-либо код, дайте мне знать! Удачного вам дня и извините за опечатки!

Ответы [ 3 ]

2 голосов
/ 02 августа 2020

Сначала вам нужно установить имена для ваших маршрутов в MaterialApp:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/': (context) => MyHomePage(),
        '/second': (context) => Page2(),
        '/third': (context) => Page3(),
      },
    );
  }
}

Затем вам нужно обернуть Scaffold третьей страницы (или любой другой страницы, с которой вы хотите чтобы вернуться к HomePage) с помощью WillPopScope, чтобы изменить то, что происходит, когда пользователь нажимает кнопку «Назад». Наконец, вам нужно использовать popUntil, чтобы вернуться к HomePage.

Это код для метода build третьей страницы:

@override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
        Navigator.of(context)
            .popUntil(ModalRoute.withName("/"));
        return Future.value(false);
      },
      child: Scaffold(
        body: Center(
          child: Container(
            child: Text('third page'),
          ),
        ),
      ),
    );
  }
0 голосов
/ 02 августа 2020

Если вы укажете свойство «home» в MaterialApp, нет необходимости создавать какой-либо маршрут. Затем можно перейти на главный экран, как показано ниже:

Navigator.of(context).popUntil(ModalRoute.withName('/'));
0 голосов
/ 02 августа 2020

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

 Navigator.of(context).pushNamedAndRemoveUntil(
                    '/', (Route<dynamic> route) => false);

Создайте именованный маршрут '/', который соответствует главному экрану, и готово. Если возникнут дополнительные вопросы, не стесняйтесь спрашивать

...