使用go_router时路径匹配失败问题求助
解决go_router路径匹配异常(带参数路由无法匹配)
核心排查点及解决方案
1. 修正路由路径的绝对路径前缀
如果你的带参数路由是作为根路由注册的,路径必须以斜杠/开头:
GoRoute( path: '/something/:id', // 注意开头的斜杠 pageBuilder: (context, state) => NoTransitionPage( key: UniqueKey(), child: SomeWidget(id: state.pathParameters['id']!)))
不带斜杠的路径会被视为相对路径,无法匹配外部深度链接的绝对路径请求。
2. 正确嵌套子路由(如果已有单独的/something路由)
既然你已经配置了可正常工作的/something路由,建议将带参数的路由作为它的子路由嵌套,这样路径匹配逻辑更清晰:
GoRoute( path: '/something', pageBuilder: (context, state) => SomethingPage(), routes: [ // 子路由路径为相对路径,等同于'/something/:id' GoRoute( path: ':id', pageBuilder: (context, state) => NoTransitionPage( key: UniqueKey(), child: SomeWidget(id: state.pathParameters['id']!), ), ), ], )
3. 确认路由注册顺序
go_router的路由匹配遵循从上到下优先匹配的规则,确保带参数的路由没有被更宽泛的通配路由(比如/something/*)覆盖。如果有这类路由,将带参数的路由放在它前面。
内容的提问来源于stack exchange,提问作者Csaba Mihaly
相关产品推荐
相关产品推荐

