decodeInputBorder static method

InputBorder? decodeInputBorder(
  1. dynamic value, {
  2. bool validate = true,
})

Decodes the given value to an InputBorder. This expects a specific "type" attribute to be one of:

  • outline
  • underline

The expected structure depends on the exact "type" value passed in.

Type: outline

{
  borderRadius: "<BorderRadius>",
  borderSide: "<BorderSide>",
  gapPadding: "<double>"
}

Type: underline

{
  borderRadius: "<BorderRadius>",
  borderSide: "<BorderSide>"
}

See also:

Implementation

static InputBorder? decodeInputBorder(
  dynamic value, {
  bool validate = true,
}) {
  InputBorder? result;
  if (value is InputBorder) {
    result = value;
  } else {
    assert(value == null || value['type'] is String);
    _checkSupported(
      'InputBorder.type',
      [
        'outline',
        'underline',
      ],
      value == null ? null : value['type'],
    );

    if (value != null) {
      assert(SchemaValidator.validate(
        schemaId: '$_baseSchemaUrl/input_border',
        value: value,
        validate: validate,
      ));
      final String? type = value['type'];

      switch (type) {
        case 'outline':
          result = OutlineInputBorder(
            borderRadius: decodeBorderRadius(
                  value['borderRadius'],
                  validate: false,
                ) ??
                const BorderRadius.all(Radius.circular(4.0)),
            borderSide: decodeBorderSide(
                  value['borderSide'],
                  validate: false,
                ) ??
                const BorderSide(),
            gapPadding: JsonClass.maybeParseDouble(value['gapPadding'], 4.0)!,
          );
          break;

        case 'underline':
          result = UnderlineInputBorder(
            borderRadius: decodeBorderRadius(
                  value['borderRadius'],
                  validate: false,
                ) ??
                const BorderRadius.only(
                  topLeft: Radius.circular(4.0),
                  topRight: Radius.circular(4.0),
                ),
            borderSide: decodeBorderSide(
                  value['borderSide'],
                  validate: false,
                ) ??
                const BorderSide(),
          );
          break;
      }
    }
  }

  return result;
}