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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:18:03