decodeTableColumnWidth static method

TableColumnWidth? decodeTableColumnWidth(
  1. dynamic value, {
  2. bool validate = true,
})

Decodes the given value to a TableColumnWidth. This expects the value to have the following structure:

{
  "a": <TableColumnWidth>,
  "b": <TableColumnWidth>,
  "type": <"fixed" | "flex" | "fraction" | "intrinsic" | "max" | "min">,
  "value": <double>
}

Implementation

static TableColumnWidth? decodeTableColumnWidth(
  dynamic value, {
  bool validate = true,
}) {
  TableColumnWidth? result;

  if (value is TableColumnWidth) {
    result = value;
  } else if (value != null) {
    assert(SchemaValidator.validate(
      schemaId: '$_baseSchemaUrl/table_column_width',
      value: value,
      validate: validate,
    ));
    var type = value['type'];

    switch (type) {
      case 'fixed':
        result = FixedColumnWidth(JsonClass.parseDouble(value['value'])!);
        break;

      case 'flex':
        result = FlexColumnWidth(
          JsonClass.parseDouble(value['value']) ?? 1.0,
        );
        break;

      case 'fraction':
        result = FractionColumnWidth(
          JsonClass.parseDouble(value['value'])!,
        );
        break;

      case 'intrinsic':
        result = IntrinsicColumnWidth(
          flex: JsonClass.parseDouble(value['value']),
        );
        break;

      case 'max':
        result = MaxColumnWidth(
          decodeTableColumnWidth(value['a'], validate: false)!,
          decodeTableColumnWidth(value['b'], validate: false)!,
        );
        break;

      case 'min':
        result = MinColumnWidth(
          decodeTableColumnWidth(value['a'], validate: false)!,
          decodeTableColumnWidth(value['b'], validate: false)!,
        );
        break;

      default:
        throw Exception(
          '[decodeTableColumnWidth]: unknown type encountered: [$type]',
        );
    }
  }

  return result;
}