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

Flutter中如何通过单选按钮勾选/取消勾选启用/禁用TextField

Flutter 实现单选按钮控制 TextField 启用/禁用

直接通过单选按钮的选中状态绑定 TextField 的启用状态即可实现需求,以下是调整后的代码和关键点说明:

1. 先确保枚举定义正确(如果还没定义)

enum SingingCharacter { checked, unchecked }

2. 状态类中维护单选按钮选中状态

在你的 State 类中声明变量:

SingingCharacter? _character;

3. 修改单选按钮与 TextField 代码

ListTile(
  title: const Text('按公里计费规则'),
  leading: Radio<SingingCharacter>(
    value: SingingCharacter.checked,
    groupValue: _character,
    fillColor: MaterialStateColor.resolveWith((states) => Colors.black),
    onChanged: (SingingCharacter? value) {
      setState(() {
        _character = value;
      });
    },
  ),
),
TextFormField(
  // 核心:单选按钮选中checked时启用,否则禁用
  enabled: _character == SingingCharacter.checked,
  onSaved: (value) => print(kiloMeter.text),
  decoration: InputDecoration(
    hintStyle: TextStyle(
      fontFamily: "Proxima Nova",
      fontWeight: FontWeight.w300,
    ),
    border: InputBorder.none,
    labelStyle: TextStyle(
      color: Color(0xffFAFAFA),
    ),
  ),
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp(r"[0-9]+"))
    // 若业务允许输入空格,可保留原正则中的|\s
  ],
  controller: kiloMeter,
  validator: (value) {
    // 仅当选中单选按钮时才校验输入
    if (_character == SingingCharacter.checked) {
      if (value == null || value.isEmpty) {
        return '请输入公里数';
      }
      final num? km = num.tryParse(value);
      if (km == null || km != 1000) {
        return '请输入正确的公里数(需为1000)';
      }
    }
    return null;
  },
),

关键点说明

  • 去掉了冗余的_kilometerButtonDisable变量,直接通过_character的状态控制 TextField 启用状态,逻辑更简洁。
  • 单选按钮选中SingingCharacter.checked时,TextField自动启用;切换到其他选项(或取消选中)时,TextField自动禁用。
  • 优化了校验逻辑:只有选中单选按钮时才触发输入校验,避免未选中时弹出错误提示。
  • 调整了输入格式规则,默认限制仅输入数字(需保留空格可自行修改正则)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:30