Навигатор PushReplacementName отдает кнопку назад во флаттере - PullRequest
1 голос
/ 20 февраля 2020

Это странно, но приведенный ниже код не работает для меня. Я получаю стрелку назад на главном экране при использовании приведенного ниже кода.

Первая строка ниже предназначена для закрытия диалогового окна. второй - go на главном экране.

 Navigator.of(context, rootNavigator: true).pop();
 Navigator.of(context).pushReplacementNamed(HomeScreen.id);

Это первый раз, когда я сталкиваюсь с такой ситуацией с pushReplacementNamed. что здесь происходит?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вероятно, потому что у вас есть другой экран в стеке. Когда вы вызываете pushReplacementNamed, он не заменяет весь стек тем, который вы даете. Можете ли вы попробовать следующий код:

// true не работает на основе вышеуказанного условия запроса Navigator.of(context).pushNamedAndRemoveUntil(HomeScreen.id, (Route<dynamic> route) => true);

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

0 голосов
/ 20 февраля 2020

Это не даст требуемого результата, так как вы уже вытолкнули контекст перед вызовом другого класса Navigator. Я попробовал функцию Navigator.of(context).pushNamedAndRemoveUntil(), но мой HomeScreen все равно дважды помещался в стек с кнопкой «Назад» на экране 1. Следовательно, я наконец-то получил эту функцию с помощью встроенной функции Navigator.of(context).popUntil(). Вы можете запустить этот дартпад код https://dartpad.dev/a10ed43452736b5c6b3d1abe6a7eda45 для просмотра желаемого эффекта или просмотра кода ниже. Ниже приведен фрагмент кода из сущности:

...
class ThirdPage extends StatelessWidget{
  static const routeName = '/third';
  @override
  Widget build(BuildContext context){
    void _nextPage(){
      //Logic here - ***************************
   Navigator.of(context).popUntil((Route<dynamic> route) => route.isFirst);
  }
    return Scaffold(
      appBar: AppBar(
        title: Text('Third Page'),
      ),
      body: Center(
        child: Text('Third Page'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _nextPage,
        child: Icon(Icons.add),
      ),
    );
  }
}

Удачного кодирования D:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...