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

Flutter中Radio按钮状态无法更新的问题求助

问题分析与解决

问题根源

你代码里的核心问题是更新Observable变量的方式错误:
在onChangedGender方法中,你直接重新赋值了gender变量(gender = (value ?? "M").obs;),这会创建一个全新的RxString对象,而Obx监听的是最初绑定的那个Observable实例,新实例的变化不会被原有监听捕获,所以Radio按钮的选中状态不会更新。

修复后的代码

import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() => runApp(GetMaterialApp(home: Home()));

class Controller extends GetxController {
  var gender = "F".obs;

  void onChangedGender(String? value) {
    // 正确做法:更新现有Observable的value,而非重新赋值变量
    gender.value = value ?? "M";
    print(gender.value);
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(context) {
    final Controller c = Get.put(Controller());

    return Scaffold(
      body: Center(
        child: SizedBox(
          width: 400,
          child: Obx(
            () => Row(
              children: [
                Expanded(
                  child: RadioListTile(
                    value: "M",
                    groupValue: c.gender.value,
                    title: const Text("Male"),
                    onChanged: c.onChangedGender,
                  ),
                ),
                Expanded(
                  child: RadioListTile(
                    value: "F",
                    groupValue: c.gender.value,
                    title: const Text("Female"),
                    onChanged: c.onChangedGender,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

额外说明

  • 不需要给每个RadioListTile单独加Obx,当前外层的一个Obx已经足够监听gender的变化,触发整个Row的UI更新。
  • 也不需要用TextEditingController来处理Radio的选中状态,直接通过GetX的Observable变量即可完成状态管理。

内容的提问来源于stack exchange,提问作者Topaz Rindu Nabiyallah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:12