如何在flutter中删除特定路径?

dohp0rv5  于 2023-05-19  发布在  Flutter
关注(0)|答案(3)|浏览(305)

我想从导航堆栈中获取一个特定的命名路由,并使用Navigator.removeRoute(context,route)删除它;但是我怎么才能得到路线呢?

mbskvtky

mbskvtky1#

这个管用。。

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);
        },
      ),
    );
  }
}

输出:

9ceoxa92

9ceoxa922#

你可以试试这个方法
Navigator.pushReplacement

Navigator.pushReplacement(context, CupertinoPageRoute(builder: (_) => NewScreen()));

此方法不会删除路由。但它在推送时不会发送它属于堆栈的页面

e0uiprwp

e0uiprwp3#

如果您正在使用GetX导航,下面的代码片段可以帮助您。
Get.removeRoute(Get.rawRoute)

相关问题