如何使用 FLUTTER go_router 弹出上下文?

问题描述 投票:0回答:3

如何使用flutter的go_router返回上一屏幕?如何弹出上下文?

目前我只是将一个新屏幕添加到堆栈中,无论我想返回还是前进。

 onTap: (() => context.go("/secondPage"))

我已经使用了

 context.pop()
但它抛出错误说 -

_AssertionError ('package:go_router/src/matching.dart': Failed assertion: line 102 pos 9: '_matches.isNotEmpty': You have popped the last page off of the stack, there are no pages left to show)

flutter dart mobile navigation gorouter
3个回答
23
投票

如果您的页面是通过 go_router 渲染的,则可以使用 context.pop()。但如果您使用的是 showModalBottomSheet 或 Dialog 类,那么您应该继续使用 Navigator.pop(context)


16
投票

您使用

context.pop()
将其弹出。

但是为了弹出某些内容,它应该位于路由器的堆栈中。

所以,实际的问题是如何将路由放入路由器堆栈中。 Go_router 有两个方法

go
push
都会带你到参数指定的下一个屏幕。

但是,

push
always添加(推送)新路由到堆栈,而
go
仅在指定为前一屏幕的子路由时才会添加新路由。否则,它将用新的路线替换之前的路线。

因此,使用给定的示例:

要么使用

push

 onTap: (() => context.push("/secondPage"));

或指定

secondPage
作为
firstPage
的子路线,然后使用
go

GoRoute(
    path: "/firstPage",
    builder: (context, state) => const FirstPage(),
    routes: [
      GoRoute(
        path: "secondPage",
        builder: (context, state) => const SecondPage(),
      ),

    ],
  ),

...

   onTap: (() => context.go("/secondPage"));

这是我学到以上所有内容的文章


0
投票

当您通过以下命令进入新页面时

onTap:(()=> context.go(“/第二页”))

路由器删除之前的目的地并覆盖所请求的目的地。这就是为什么当你弹出这个目的地时。您收到错误。但是,当您使用以下命令进入新页面时。

onTap: (() => context.push("/secondPage"))

上一页仍然保留在堆栈中,弹出新页面会暴露上一页。

© www.soinside.com 2019 - 2024. All rights reserved.