build method
Implementation
@override
Widget build(BuildContext context) {
_controller = TextEditingController(text: _format(convertTo(_value) ?? ''));
final theme = FormThemeData.of(context);
final child = TextFormField(
key: key,
focusNode: focusNode,
controller: _controller,
decoration: InputDecoration(
label: PlaceholderWidget(
label: placeholder,
isRequired: isRequired && theme.showRequired,
),
helperText: helperText,
errorStyle: theme.requiredText?.isNotEmpty == true
? null
: const TextStyle(height: 0),
suffixIcon: _suffix,
hintText: hintText,
),
validator: (e) {
final value = convertFrom(e);
if (isRequired && value == null) {
isValid = false;
return requiredText ?? theme.requiredText;
}
final result = validator == null ? null : validator!(value);
isValid = result == null;
if (onChanged != null && !emitDirty) {
onChanged!(_value);
}
return result;
},
onChanged: (value) {
_onChanged(convertFrom(value));
},
onSaved: (value) {
setHasChanged(false);
if (onSaved != null) {
onSaved!(_value);
}
},
onFieldSubmitted: (_) {
if (onSubmit != null) {
onSubmit!();
}
},
readOnly: isDisabled,
inputFormatters: formatters ?? [],
minLines: minLines,
maxLines: maxLines,
textInputAction: inputAction,
keyboardType: keyboardType,
autocorrect: autocorrect,
obscureText: _obscureText,
autofillHints: autofillHints,
);
return child;
}