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

