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

