decodeMaterialStatePropertyEdgeInsetsGeometry static method

MaterialStateProperty<EdgeInsetsGeometry?>? decodeMaterialStatePropertyEdgeInsetsGeometry(
  1. dynamic value, {
  2. bool validate = true,
})

Decodes a value into a EdgeInsetsGeometry based MaterialStateProperty.

If the value is a String, double, or int then this will parse the number and pass it to EdgeInsets.all for each state.

If the value is an array with two entities, this calls EdgeInsets.symmetric with the first element passed as the horizontal and the second as the vertical.

If the value is an array with four entities, this calls EdgeInsets.fromLTRB passing each element in order.

The value may be a Map in the following format:

{
  "bottom": <double>,
  "left": <double>,
  "right": <double>,
  "top": <double>
}

Finally, the value may be a Map in the following format:

{
  "disabled": <EdgeInsetsGeometry>,
  "dragged": <EdgeInsetsGeometry>,
  "empty": <EdgeInsetsGeometry>,
  "error": <EdgeInsetsGeometry>,
  "focused": <EdgeInsetsGeometry>,
  "hovered": <EdgeInsetsGeometry>,
  "pressed": <EdgeInsetsGeometry>,
  "scrolledUnder": <EdgeInsetsGeometry>,
  "selected": <EdgeInsetsGeometry>
}

See also:

Implementation

static MaterialStateProperty<EdgeInsetsGeometry?>?
    decodeMaterialStatePropertyEdgeInsetsGeometry(
  dynamic value, {
  bool validate = true,
}) {
  MaterialStateProperty<EdgeInsetsGeometry?>? result;

  if (value is MaterialStateProperty<EdgeInsetsGeometry?>) {
    result = value;
  } else if (value != null) {
    if (value is EdgeInsetsGeometry) {
      result = MaterialStateProperty.all<EdgeInsetsGeometry?>(value);
    } else if (value is String || value is List || value is int) {
      result = MaterialStateProperty.all<EdgeInsetsGeometry?>(
        decodeEdgeInsetsGeometry(value),
      );
    } else if (value is Map) {
      var testValues = [
        'disabled',
        'dragged',
        'empty',
        'error',
        'focused',
        'hovered',
        'pressed',
        'scrolledUnder',
        'selected',
      ];

      var isMsp = false;
      for (var key in value.keys) {
        if (testValues.contains(key)) {
          isMsp = true;
          break;
        }
      }

      if (isMsp != true) {
        result = MaterialStateProperty.all<EdgeInsetsGeometry?>(
          decodeEdgeInsetsGeometry(value),
        );
      } else {
        assert(SchemaValidator.validate(
          schemaId:
              '$_baseSchemaUrl/material_state_property_edge_insets_geometry',
          value: value,
          validate: validate,
        ));

        result = MaterialStateProperty.resolveWith((states) {
          EdgeInsetsGeometry? result;
          if (states.contains(MaterialState.disabled)) {
            result = decodeEdgeInsetsGeometry(value['disabled']);
          } else if (states.contains(MaterialState.dragged)) {
            result = decodeEdgeInsetsGeometry(value['dragged']);
          } else if (states.contains(MaterialState.error)) {
            result = decodeEdgeInsetsGeometry(value['error']);
          } else if (states.contains(MaterialState.focused)) {
            result = decodeEdgeInsetsGeometry(value['focused']);
          } else if (states.contains(MaterialState.hovered)) {
            result = decodeEdgeInsetsGeometry(value['hovered']);
          } else if (states.contains(MaterialState.pressed)) {
            result = decodeEdgeInsetsGeometry(value['pressed']);
          } else if (states.contains(MaterialState.scrolledUnder)) {
            result = decodeEdgeInsetsGeometry(value['scrolledUnder']);
          } else if (states.contains(MaterialState.selected)) {
            result = decodeEdgeInsetsGeometry(value['selected']);
          } else {
            result = decodeEdgeInsetsGeometry(value['empty']);
          }

          return result;
        });
      }
    } else {
      result = MaterialStateProperty.all<EdgeInsetsGeometry?>(value);
    }
  }
  return result;
}