You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:02:34