Flutter创建Radio Button报错:Object?无法赋值给int类型
解决Flutter Radio按钮类型不匹配报错
修复后的完整代码
import 'package:flutter/material.dart'; void main() => runApp(MaterialApp( home: Home(), )); class Home extends StatefulWidget { const Home({Key? key}) : super(key: key); @override State<Home> createState() => _HomeState(); } class _HomeState extends State<Home> { // 移除多余的@override,_value是自定义成员变量 int _value = 1; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('My Rent'), ), body: Column( children: [ // 指定Radio的泛型为<int>,让onChanged参数类型匹配int Radio<int>( value: 1, groupValue: _value, onChanged: (value){ setState(() { _value = value!; }); }, ), Radio<int>( value: 2, groupValue: _value, onChanged: (value){ setState(() { _value = value!; }); }, ), Radio<int>( value: 3, groupValue: _value, onChanged: (value){ setState(() { _value = value!; }); }, ), ], ), ); } }
错误原因及修复说明
多余的@override:代码中
@override int _value = 1;这行存在错误,@override仅用于重写父类的方法或属性,_value是自定义成员变量,不需要添加该注解,直接定义即可。Radio组件泛型缺失:默认情况下
Radio组件的泛型为Object?,导致onChanged回调返回的value类型是Object?,无法直接赋值给int类型的_value。通过指定Radio<int>泛型,让回调参数类型变为int?,再通过!(确定value不为空的场景下)完成赋值;如果要更严谨,也可以用空安全判断:
onChanged: (value){ if(value != null){ setState(() { _value = value; }); } },
这样修改后即可解决类型不匹配的报错问题。
内容的提问来源于stack exchange,提问作者Siddh Purohit
相关产品推荐
相关产品推荐

