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

Flutter Radio组件报错:Object?类型值无法赋值给int类型变量

Flutter Radio组件类型不匹配报错修复方案

报错根因

Flutter空安全版本下,未指定泛型的Radio组件会默认将onChanged的回调参数推断为Object?类型,无法直接赋值给你定义的int类型选中值变量。你之前尝试将变量改为String?再强转参数的方案逻辑错误:Radio回调返回值类型和你传入的value属性类型完全一致,你传入的是int类型的列表index,回调返回值自然是int,强转为String必然触发运行时类型转换错误。

报错表现

  • 静态检查报错位置:onChanged: (i) => setState(() => value = i), 行参数i出现红色下划线,提示:

    A value of type 'Object?' can't be assigned to a variable of type 'int'

  • 错误修改后的运行时报错:

    _CastError (type 'int' is not a subtype of type 'String?' in type cast)

正确修复方式

两种方案都可以保留你最初用int类型存储选中支付方式索引的设计:

方案1:显式指定Radio泛型类型(推荐)

给Radio组件声明<int>泛型,让Dart正确推断回调参数类型,同时做空值兜底适配空安全规则,仅需要修改Radio部分代码即可:

leading: Radio<int>(
  activeColor: Colors.black,
  value: index,
  groupValue: value,
  // 此时i被自动推断为int?类型,用??做非空兜底避免空安全报错
  onChanged: (i) => setState(() => value = i ?? 0),
),

方案2:对回调参数做正确类型强转

如果不指定泛型,可以直接将回调参数强转为int类型,注意必须匹配你传入Radio的value的实际类型:

leading: Radio(
  activeColor: Colors.black,
  value: index,
  groupValue: value,
  onChanged: (i) => setState(() => value = i as int),
),

注意:使用强转方案时,必须保证所有传给Radio的value属性值都是int类型,否则会触发运行时强转错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:01:03