Flutter报错:Object?类型值无法分配给ProductDetailsArguments类型变量如何解决
问题原因
这个报错是因为ModalRoute.of(context)!.settings.arguments的返回值类型是Object?,属于Dart的顶层可空泛型,Dart不允许将父类类型直接赋值给子类类型的变量,必须显式做类型转换。
修复方案
方案1:直接强制转换(确定传参类型正确时使用)
直接修改获取参数的代码行,添加as关键字做类型转换即可:
final ProductDetailsArguments arguments = ModalRoute.of(context)!.settings.arguments as ProductDetailsArguments;
方案2:增加类型校验(更稳妥,避免传参错误导致崩溃)
先校验参数类型是否符合预期,不符合时走异常处理逻辑,避免闪退:
@override Widget build(BuildContext context) { final args = ModalRoute.of(context)!.settings.arguments; // 校验参数类型 if (args is! ProductDetailsArguments) { return const Scaffold( body: Center(child: Text('页面参数错误,请返回重试')), ); } final ProductDetailsArguments arguments = args; return Scaffold( backgroundColor: const Color(0XFFF5F6F9), appBar: CustomAppBar(arguments.product.rating), body: const Body(), ); }
注意:跳转页面时要确保传递的参数类型正确,示例跳转代码如下:
Navigator.pushNamed( context, ProductDetails.routeName, arguments: ProductDetailsArguments(product: demoProducts[0]), );
内容的提问来源于stack exchange,提问作者Ahmed Al-Khateeb
相关产品推荐
相关产品推荐

