这是我的自定义验证文本字段
CmnTextField(
labelText: "Location",
controller: LocationController,
readOnly: true,
autoValidateMode: controller.unit
? AutovalidateMode.always
: AutovalidateMode.disabled,
onTap: () async {
final result = await Navigator.of(context).push(MaterialPageRoute(
builder: (_) => SelectLocation(whichLocation: 'From Location')));
if (result != null && result is Locations) {
_assignFromLocation(result);
}
},
validator: _validateInput,
enabled: isEdit
? false
: controller.isMove ||
controller.isCustomMove ||
controller.unit,
),
这是我的验证功能:
String? _validateInput(String? value) {
if (controller.unit) {
if (value == null || value.isEmpty) {
return 'required';
}
}
return null;
}
当 controller.unit 这是条件为真时,禁用文本字段并删除验证,当此条件为假时,我需要自动验证模式,那么我如何才能实现这一点?
如果有人有任何想法请告诉我
要实现所需的行为,其中:
当
controller.unit
为true
时:
TextField
。当
controller.unit
为false
时:
TextField
。AutovalidateMode.always
启用自动验证,并在用户与字段交互时执行验证。您可以通过根据
enabled
的值管理 autoValidateMode
的 validator
、TextField
和 controller.unit
属性来实现此目的。
以下是构建
CmnTextField
小部件的方法:
CmnTextField(
labelText: "Location",
controller: LocationController,
readOnly: true,
// Set autoValidateMode based on controller.unit
autoValidateMode: controller.unit
? AutovalidateMode.disabled // Disable auto-validation when controller.unit is true
: AutovalidateMode.always, // Enable auto-validation when controller.unit is false
onTap: () async {
final result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => SelectLocation(whichLocation: 'From Location')
)
);
if (result != null && result is Locations) {
_assignFromLocation(result);
}
},
// Validator function, which is only called when the TextField is enabled
validator: _validateInput,
// Enable or disable the TextField based on controller.unit and other flags
enabled: !(controller.unit || isEdit) && (controller.isMove || controller.isCustomMove)
)
String? _validateInput(String? value) {
// Only perform validation if the TextField is enabled and controller.unit is false
if (!controller.unit) {
if (value == null || value.isEmpty) {
return 'Required'; // Show 'Required' error if the field is empty
}
}
return null; // Return null if validation passes
}
autoValidateMode
:
controller.unit
为 true
时,我们使用 AutovalidateMode.disabled
禁用自动验证。controller.unit
为false
时,我们使用AutovalidateMode.always
启用自动验证。这意味着当字段更改时将立即进行验证。enabled
:
controller.unit
为 true
时,TextField
被禁用,用户无法与其交互。controller.unit
为false
时,TextField
基于其他标志(isEdit
、controller.isMove
和controller.isCustomMove
)启用。如果 isEdit
为 true
,则该字段被禁用,否则,取决于移动标志。验证器:
controller.unit
为 false
时)。controller.unit
为 true
,则该字段被禁用,并且不会进行验证。'Required'
。controller.unit
为true
时,TextField
将被禁用,自动验证被关闭,并且不会进行任何验证。controller.unit
为 false
时,TextField
将启用,自动验证将启用,验证将按预期进行。