Flutter中如何根据controller.unit状态控制文本框验证与禁用?
解决方案
要实现你的需求,需要对CmnTextField的核心参数及验证逻辑做如下调整:
1. 修改CmnTextField配置
CmnTextField( labelText: "Location", controller: LocationController, readOnly: true, // 当controller.unit为false时开启自动验证,为true时关闭 autoValidateMode: controller.unit ? AutovalidateMode.disabled : AutovalidateMode.always, onTap: () async { final result = await Navigator.of(context).push(MaterialPageRoute( builder: (_) => SelectLocation(whichLocation: 'From Location'))); if (result != null && result is Locations) { _assignFromLocation(result); } }, // controller.unit为true时移除验证逻辑,设为null validator: controller.unit ? null : _validateInput, // controller.unit为true时禁用文本框,其他情况保留原有启用逻辑 enabled: isEdit ? false : (controller.isMove || controller.isCustomMove) && !controller.unit, ),
2. 简化验证函数
由于只有controller.unit为false时才会触发验证,可去掉函数内的条件判断,简化逻辑:
String? _validateInput(String? value) { if (value == null || value.isEmpty) { return 'required'; } return null; }
关键调整说明
- 自动验证模式:反转原有逻辑,确保
controller.unit为true时关闭自动验证,为false时开启 - 验证器:当
controller.unit为true时将validator设为null,彻底移除验证逻辑 - 文本框状态:在原有启用条件基础上增加
&& !controller.unit,保证controller.unit为true时文本框禁用
内容的提问来源于stack exchange,提问作者Tulsi virani
相关产品推荐
相关产品推荐

