buildJsonEditText static method

Widget buildJsonEditText({
  1. required BuildContext context,
  2. required String id,
  3. String? defaultValue,
  4. required TranslationEntry label,
  5. List<ValueValidator>? validators,
  6. required Map<String, dynamic> values,
})

Implementation

static Widget buildJsonEditText({
  required BuildContext context,
  required String id,
  String? defaultValue,
  required TranslationEntry label,
  List<ValueValidator>? validators,
  required Map<String, dynamic> values,
}) {
  assert(id.isNotEmpty == true);

  if (values[id] == null && defaultValue != null) {
    values[id] = defaultValue;
  }

  final translator = Translator.of(context);
  final encoder = const JsonEncoder.withIndent('  ');
  var initialValue = values[id]?.toString();
  if (initialValue?.isNotEmpty == true) {
    try {
      initialValue = encoder.convert(json.decode(initialValue!));
    } catch (e) {
      // no-op
    }
  }

  return TextFormField(
    autovalidateMode: validators?.isNotEmpty == true
        ? AutovalidateMode.always
        : AutovalidateMode.disabled,
    decoration: InputDecoration(
      labelText: translator.translate(label),
    ),
    initialValue: initialValue,
    inputFormatters:
        autoformatJson == true ? [_JsonTextInputFormatter()] : null,
    maxLines: 5,
    onChanged: (value) {
      var encoded = '';

      try {
        encoded = json.encode(json.decode(value));
      } catch (e) {
        encoded = '';
      }
      values[id] = encoded;
    },
    onEditingComplete: () {},
    smartQuotesType: SmartQuotesType.disabled,
    validator: (value) => validators?.isNotEmpty == true
        ? Validator(validators: validators!).validate(
            context: context,
            label: translator.translate(label),
            value: value,
          )
        : null,
  );
}