我想从导航堆栈中获取一个特定的命名路由,并使用Navigator.removeRoute(context,route)删除它;但是我怎么才能得到路线呢?
mbskvtky1#
这个管用。。
Navigator.removeRoute(context, MaterialPageRoute(builder: (context) => ThePage()));
您必须指定要删除的Route,而不是名称
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); }, ), ); } }
输出:
9ceoxa922#
你可以试试这个方法Navigator.pushReplacement
Navigator.pushReplacement(context, CupertinoPageRoute(builder: (_) => NewScreen()));
此方法不会删除路由。但它在推送时不会发送它属于堆栈的页面
e0uiprwp3#
如果您正在使用GetX导航,下面的代码片段可以帮助您。Get.removeRoute(Get.rawRoute)
3条答案
按热度按时间mbskvtky1#
这个管用。。
您必须指定要删除的
Route
,而不是名称示例
输出:
9ceoxa922#
你可以试试这个方法
Navigator.pushReplacement
此方法不会删除路由。但它在推送时不会发送它属于堆栈的页面
e0uiprwp3#
如果您正在使用GetX导航,下面的代码片段可以帮助您。
Get.removeRoute(Get.rawRoute)