如何在颤动中删除特定路线?

Posted

技术标签:

【中文标题】如何在颤动中删除特定路线?【英文标题】:How to remove a particular route in flutter? 【发布时间】:2020-05-05 11:24:47 【问题描述】:

我想从导航堆栈中获取特定命名的路由并使用 Navigator.removeRoute(context, route); 将其删除但是我怎样才能获得路线

【问题讨论】:

欢迎来到堆栈溢出。您能否通过举例说明您想要的更具体一些。 【参考方案1】:

这行得通...

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

输出:

【讨论】:

不工作。收到此错误:断言失败:第 2185 行 pos 12:'route._navigator == this':不正确。如果你做过这样的事情,你能分享一个例子吗? 你是用 MaterialPageRoute 导航的吗? 是的。我用过 MaterialPageRoute【参考方案2】:

你可以试试这个方法

Navigator.pushReplacement

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

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

【讨论】:

以上是关于如何在颤动中删除特定路线?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中删除蜂巢中的所有框?

如何从列表中删除项目并返回新列表而不在颤动中删除项目

在颤动中从地图<日期时间,列表>中删除项目

如何在颤动中相对于前一个路由转换动画

如何在颤动中显示来自firestore的特定文档详细信息

如何在颤动中从实时数据库中获取特定数据?