Как убрать конкретный маршрут при флаттере? - PullRequest
0 голосов
/ 05 мая 2020

Я хочу получить конкретный именованный маршрут из стека навигации и удалить его с помощью Navigator.removeRoute (context, route ); но как я могу получить маршрут ?

1 Ответ

0 голосов
/ 05 мая 2020

Это работает ...

Navigator.removeRoute(context, MaterialPageRoute(builder: (context) => ThePage()));

Вы должны указать Route, которое вы хотите удалить, а не имя

Пример

var page2Route = MaterialPageRoute(builder: (context) => Page2());
var page3Route = MaterialPageRoute(builder: (context) => Page3());

class Page1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Page 1"),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.navigate_next),
        onPressed: () {
          Navigator.push(
              context, page2Route);
        },
      ),
    );
  }
}

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Page 2"),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.navigate_next),
        onPressed: () {
          Navigator.push(
              context, page3Route);
        },
      ),
    );
  }
}

class Page3 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Page 3"),
      ),
      floatingActionButton: FloatingActionButton.extended(
        icon: Icon(Icons.delete),
        label: Text("Remove Page 2"),
        onPressed: () {
          Navigator.removeRoute(
              context, page2Route);
        },
      ),
    );
  }
}

Вывод:

enter image description here

...