Flutter页面传参报错:OrderRouteArgs不能为空求助
解决Flutter AutoRoute传参错误:OrderRouteArgs can not be null
问题场景
接手他人开发的Flutter应用,从Login Page跳转至Order Page传递userSchool参数时,抛出错误:
OrderRouteArgs can not be null because the corresponding page has a required parameter
相关代码片段如下:
Login Page跳转逻辑
// 省略其他代码 GestureDetector( onTap: () async { if (_formKey.currentState!.validate()) { // 省略校验逻辑 if (isValidOrderDay) { if (context.mounted) { context.router.replace( OrderRoute(userSchool: selectedSchool), ); } } // 省略其他分支 } }, )
Order Page定义
@RoutePage() class OrderPage extends StatefulWidget { const OrderPage({Key? key, required dynamic userSchool}) : super(key: key); @override State<OrderPage> createState() => _OrderPageState(); }
路由配置
OrderRoute.name: (routeData) { final args = routeData.argsAs<OrderRouteArgs>(); return AutoRoutePage<dynamic>( routeData: routeData, child: OrderPage(key: args.key, userSchool: args.userSchool), ); },
错误原因
- OrderPage参数定义不规范:使用
dynamic类型且未将参数存储为widget成员变量,AutoRoute生成OrderRouteArgs时无法正确识别参数的必填性与类型。 - 路由代码未同步更新:修改页面参数后未重新生成AutoRoute的路由代码,导致
OrderRoute与OrderRouteArgs不匹配。
修复步骤
1. 修正OrderPage的参数定义
将dynamic替换为具体类型(例如String,根据实际业务类型调整),并将参数存储为类成员变量,供State访问:
@RoutePage() class OrderPage extends StatefulWidget { final String userSchool; // 指定具体类型 const OrderPage({Key? key, required this.userSchool}) : super(key: key); @override State<OrderPage> createState() => _OrderPageState(); } class _OrderPageState extends State<OrderPage> { @override Widget build(BuildContext context) { // 通过widget.userSchool获取传递的参数 return Scaffold( // 页面内容 ); } }
2. 重新生成AutoRoute路由代码
在终端运行以下命令,让AutoRoute重新生成匹配的OrderRoute和OrderRouteArgs类:
flutter packages pub run build_runner watch --delete-conflicting-outputs
执行完成后,AutoRoute会根据修正后的OrderPage参数,生成包含必填userSchool的OrderRouteArgs,确保路由跳转时参数能正确传递。
3. 确认跳转参数的有效性
虽然Login Page的Form已校验selectedSchool不为空,但仍需确保selectedSchool的类型与OrderPage定义的userSchool类型一致(例如都是String),避免类型不匹配导致的隐性错误。
内容的提问来源于stack exchange,提问作者plushay
相关产品推荐
相关产品推荐

