Flutter получить текущую страницу, чтобы предотвратить ее повторное открытие в Navigator.pu sh? - PullRequest
0 голосов

У меня один AppBar во всем приложении. А для go на новые страницы я использую Navigator.push. Но когда я открываю новую страницу, например «Поиск», из нее я могу открыть новый экземпляр страницы «Поиск». Как избежать дублирования страниц? Могу ли я определить, какая страница у меня открыта сейчас, чтобы предотвратить ее повторное открытие?

onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => Search()),
          );

Моя полная панель приложений

  @override
  Widget build(BuildContext context) {
  return AppBar(
  backgroundColor: getAppBarColor(),
  actions: <Widget>[
    Padding(
        padding: EdgeInsets.only(right: 20.0),
        child: GestureDetector(
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => Search()),
            );

          },
          child: Icon(
            Icons.search,
            size: 26.0,
          ),
        )),
    Padding(
        padding: EdgeInsets.only(right: 20.0),
        child: GestureDetector(
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => Contacts()),
            );
          },
          child: Icon(Icons.call),
        )),

      Padding(
        padding: EdgeInsets.only(right: 20.0),
        child: GestureDetector(
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => Basket()),
            );

          },
          child: Icon(Icons.shopping_cart),
          )),
     ],
   );
  }

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

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

Navigator.pushReplacementNamed(context, routeName);

, если он был определен в контексте, или вы можете использовать

Navigator.pushReplacement(context, newRoute)

, если хотите заменить маршрут

0 голосов
/ 13 июля 2020

Вместо Navigator.push(context, route) Используйте Navigator.pushReplacement(context, newRoute)

Это автоматически sh новая страница заменяет старую, поэтому дублирования не будет

...