Flutter go_router中context.goNamed跳转错误页问题咨询
GoRouter 14.3.0: 让context.goNamed跳转不存在命名路由时触发ErrorPage
在go_router 14.3.0里,context.go跳不存在的路径会自动触发errorBuilder显示ErrorPage,但context.goNamed找不到对应命名路由时直接抛异常,要实现同样的错误页跳转,可以这么做:
手动捕获异常处理
每次调用goNamed时用try-catch包裹,捕获到"unknown route name"异常后,手动触发错误页逻辑:// 示例按钮点击事件 onPressed: () { try { context.goNamed('/non-existent'); } catch (e) { // 直接跳转到ErrorPage对应的路径,或者复用errorBuilder逻辑 context.go('/error'); // 或者通过GoRouter实例触发errorBuilder // GoRouter.of(context).go('/__non-existent__'); } },封装安全的命名导航方法
写一个Context的扩展方法,统一处理异常,避免重复写try-catch:extension SafeGoNamed on BuildContext { void goNamedSafe( String name, { Map<String, String> params = const {}, Map<String, dynamic> queryParams = const {}, Object? extra, }) { try { goNamed(name, params: params, queryParams: queryParams, extra: extra); } on Exception { // 触发errorBuilder的话,可以跳一个肯定不存在的路径 GoRouter.of(this).go('/__invalid_route__'); // 或者直接导航到ErrorPage // pushNamed('error'); } } }之后直接用
context.goNamedSafe('/non-existent')即可,出错时自动跳转到ErrorPage。
需要注意的是,go_router 14.3.0版本的goNamed设计就是找不到命名路由时抛出异常,没有内置配置让它自动走errorBuilder,所以只能通过手动捕获异常的方式实现需求。
内容的提问来源于stack exchange,提问作者NEB
相关产品推荐
相关产品推荐

