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

Flutter使用go_router传参触发_AssertionError错误求助

解决GoRouter传递参数时的断言错误问题

你遇到的_AssertionError核心原因是:GoRouter的路由配置未声明materialURL参数——虽然你在pageBuilder中尝试获取该参数,但路由的path字段没有定义对应的参数占位符,导致GoRouter无法识别这个参数。

修复步骤

方式一:通过路径参数传递(适合无特殊字符的参数)

修改myCourseMaterial的路由配置,在path中添加参数占位符:materialURL:

GoRoute(
  path: 'myCourseMaterial/:materialURL', // 添加参数占位符
  name: AppRoute.myCourseMaterial.name,
  pageBuilder: (context, state) {
    final materialSingleURL = state.params['materialURL']!;
    return MaterialPage(
      key: state.pageKey,
      fullscreenDialog: false,
      child: MyCourseMaterialPage(
        materialURL: materialSingleURL,
      ),
    );
  },
),

跳转代码无需修改,保持原有的params传递方式即可。

方式二:通过查询参数传递(适合带特殊字符的URL)

由于你传递的是PDF地址,可能包含/、?等特殊字符,直接用路径参数会引发解析错误,推荐改用queryParams:

  1. 修改跳转代码:
ElevatedButton(
  onPressed: () {
    context.goNamed(AppRoute.myCourseMaterial.name,
        queryParams: { // 替换为queryParams
          'materialURL': materialURL,
        });
  },
  style: ElevatedButton.styleFrom(
    minimumSize: const Size.fromHeight(60),
    shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(16)),
  ),
  child: const Text('View PDF'),
),
  1. 修改路由配置的pageBuilder:
GoRoute(
  path: 'myCourseMaterial', // 无需路径占位符
  name: AppRoute.myCourseMaterial.name,
  pageBuilder: (context, state) {
    final materialSingleURL = state.queryParams['materialURL']!; // 从queryParams获取
    return MaterialPage(
      key: state.pageKey,
      fullscreenDialog: false,
      child: MyCourseMaterialPage(
        materialURL: materialSingleURL,
      ),
    );
  },
),

验证修复

完成上述修改后,点击按钮跳转时,GoRouter将正确识别materialURL参数,不会再抛出断言错误,PDF页面也能正常加载对应的资源。

内容的提问来源于stack exchange,提问作者sachax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:17:35