如何使用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)
如果您的页面是通过 go_router 渲染的,则可以使用 context.pop()。但如果您使用的是 showModalBottomSheet 或 Dialog 类,那么您应该继续使用 Navigator.pop(context)
您使用
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"));
当您通过以下命令进入新页面时
onTap:(()=> context.go(“/第二页”))
路由器删除之前的目的地并覆盖所请求的目的地。这就是为什么当你弹出这个目的地时。您收到错误。但是,当您使用以下命令进入新页面时。
onTap: (() => context.push("/secondPage"))
上一页仍然保留在堆栈中,弹出新页面会暴露上一页。