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
相关产品推荐
相关产品推荐

