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:
- 修改跳转代码:
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'), ),
- 修改路由配置的
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
相关产品推荐
相关产品推荐

