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

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!;
              });
            },
          ),
        ],
      ),
    );
  }
}

错误原因及修复说明

  1. 多余的@override:代码中@override int _value = 1;这行存在错误,@override仅用于重写父类的方法或属性,_value是自定义成员变量,不需要添加该注解,直接定义即可。

  2. Radio组件泛型缺失:默认情况下Radio组件的泛型为Object?,导致onChanged回调返回的value类型是Object?,无法直接赋值给int类型的_value。通过指定Radio<int>泛型,让回调参数类型变为int?,再通过!(确定value不为空的场景下)完成赋值;如果要更严谨,也可以用空安全判断:

onChanged: (value){
  if(value != null){
    setState(() {
      _value = value;
    });
  }
},

这样修改后即可解决类型不匹配的报错问题。

内容的提问来源于stack exchange,提问作者Siddh Purohit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:24:21