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

Flutter RadioListTile的onChanged回调val报Object?无法赋值给int错误

报错原因

这个类型错误是泛型类型未显式指定、Dart自动类型推导失效导致的。
RadioListTile是泛型组件,当你没有手动指定它的泛型参数,且代码上下文无法让Dart准确推断出组件绑定的数值类型时,Dart会默认将该组件的泛型类型推导为Object?,直接导致onChanged回调返回的参数val类型为Object?,自然无法赋值给要求接收int类型参数的setSelectedRadio方法。

修复方法

推荐方案:显式指定泛型类型(类型安全)

在组件名后显式声明<int>泛型,让Dart明确知道当前单选框绑定的数值是int类型,此时组件的value、groupValue、onChanged入参都会被自动约束为int相关类型,从根源解决类型不匹配问题。
修复后的代码如下:

RadioListTile<int>(
  value: 1,
  groupValue: selectedRadio,
  title: Text("Doctor", style: TextStyle(fontSize: 19.0)),
  activeColor: Colors.green,
  onChanged: (val) {
    // val类型此时为int?,做非空判断后即可安全传入
    if (val != null) {
      setSelectedRadio(val);
    }
  },
),

使用该方案需要提前确认两个前提:

  • 存储选中值的selectedRadio变量类型为int
  • setSelectedRadio方法的入参类型声明为int

不推荐方案:强制类型转换

如果不想修改组件泛型声明,也可以在传参时手动将val强转为int类型:

onChanged: (val) {
  setSelectedRadio(val as int);
},

这种写法存在运行时报错风险,如果后续代码改动导致val实际传入非int类型值,会直接抛出类型转换异常,不建议在生产代码中使用。

内容的提问来源于stack exchange,提问作者Ayush Singroly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:45:32