create method
Implementation
@override
Widget create(TextWidgetData data, Environment environment, BuildContext context) {
var widgetContext = WidgetContextScope.of(context);
var mapper = widgetContext.formMapper;
TextEditingController controller = TextEditingController();
FocusNode? focusNode = FocusNode();
var adapter = environment.get<MaterialTextFormFieldAdapter>();
var typeProperty = data.databinding != null && data.databinding!.isNotEmpty ? mapper.computeProperty(widgetContext.typeDescriptor, data.databinding!) : null;
TextFormField result;
if (typeProperty != null) {
var (displayValue, parseValue, validate, textInputType, inputFormatters) = customize(typeProperty);
controller.addListener(() {
var value = parseValue(controller.text);
mapper.notifyChange(property: typeProperty, value: value);
//if (form != null) {
// form!.triggerValidation();
});
//TODO getValidator -> FormMapping!
// TODO Form!
result = TextFormField(
key: ValueKey(data.id), // was databinding TODO
controller: controller,
focusNode: focusNode,
decoration: InputDecoration(labelText: resolveValue(widgetContext, data.label).$1),
validator: validate,
keyboardType: textInputType,
inputFormatters: inputFormatters
);
mapper.map(property: typeProperty, widget: result, adapter: adapter, displayValue: displayValue, parseValue: parseValue);
}
else result = TextFormField(
key: ValueKey(data.id), // TODO databinding
controller: controller,
focusNode: focusNode,
decoration: InputDecoration(labelText: resolveValue(widgetContext, data.label).$1)
);
return result;
}