create method

  1. @override
Widget create(
  1. TextWidgetData data,
  2. Environment environment,
  3. BuildContext context
)
override

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;
}