fromDynamic static method

JsonSwitchBuilder? fromDynamic(
  1. dynamic map, {
  2. JsonWidgetRegistry? registry,
})

Builds the builder from a Map-like dynamic structure. This expects the JSON format to be of the following structure:

{
  "activeColor": "<Color>",
  "activeThumbImage": "<ImageProvider<Object>>",
  "activeTrackColor": "<Color>",
  "autofocus": "<bool>",
  "autovalidateMode": "<AutovalidateMode>",
  "dragStartBehavior": "<DragStartBehavior>",
  "enabled": "<bool>",
  "focusColor": "<Color>",
  "focusNode": "<FocusNode>",
  "hoverColor": "<Color>",
  "inactiveThumbColor": "<Color>",
  "inactiveThumbImage": "<ImageProvider<Object>>",
  "inactiveTrackColor": "<Color>",
  "label": "<String>",
  "materialTapTargetSize": "<MaterialTapTargetSize>",
  "mouseCursor": "<MouseCursor>",
  "onActiveThumbImageError": "<ImageErrorListener>",
  "onChanged": "<ValueCallback<bool>>",
  "onInctiveThumbImageError": "<ImageErrorListener>",
  "onSaved": "<ValueCallback<bool>>",
  "overlayColor": "<MaterialStateProperty<Color>>",
  "splashRadius": "<double>",
  "thumbColor": "<MaterialStateProperty<Color>>",
  "thumbIcon": "<MaterialStateProperty<Icon>>",
  "trackColor": "<MaterialStateProperty<Color>>",
  "validators": "<List<ValueValidator>>",
  "value": "<bool>",
  "visualDensity": "<VisualDensity>"
}

As a note, the FocusNode and the ValueCallback<bool> cannot be decoded via JSON. Instead, the only way to bind those values to the builder is to use a function or a variable reference via the JsonWidgetRegistry.

See also:

  • buildCustom
  • ThemeDecoder.decodeAutovalidateMode
  • ThemeDecoder.decodeColor
  • ThemeDecoder.decodeDragStartBehavior
  • ThemeDecoder.decodeMaterialStatePropertyColor
  • ThemeDecoder.decodeMouseCursor
  • ThemeDecoder.decodeVisualDensity
  • Validator

Implementation

static JsonSwitchBuilder? fromDynamic(
  dynamic map, {
  JsonWidgetRegistry? registry,
}) {
  JsonSwitchBuilder? result;

  if (map != null) {
    result = JsonSwitchBuilder(
      activeColor: ThemeDecoder.decodeColor(
        map['activeColor'],
        validate: false,
      ),
      activeThumbImage: ThemeDecoder.decodeImageProvider(
        map['activeThumbImage'],
        validate: false,
      ),
      activeTrackColor: ThemeDecoder.decodeColor(
        map['activeTrackColor'],
        validate: false,
      ),
      autofocus: JsonClass.parseBool(map['autofocus']),
      autovalidateMode: map['autovalidate'] == null
          ? ThemeDecoder.decodeAutovalidateMode(
              map['autovalidateMode'],
              validate: false,
            )
          : JsonClass.parseBool(map['autovalidate']) == true
              ? AutovalidateMode.always
              : AutovalidateMode.disabled,
      dragStartBehavior: ThemeDecoder.decodeDragStartBehavior(
            map['dragStartBehavior'],
            validate: false,
          ) ??
          DragStartBehavior.start,
      enabled:
          map['enabled'] == null ? true : JsonClass.parseBool(map['enabled']),
      focusColor: ThemeDecoder.decodeColor(
        map['focusColor'],
        validate: false,
      ),
      focusNode: map['focusNode'],
      hoverColor: ThemeDecoder.decodeColor(
        map['hoverColor'],
        validate: false,
      ),
      inactiveThumbColor: ThemeDecoder.decodeColor(
        map['inactiveThumbColor'],
        validate: false,
      ),
      inactiveThumbImage: ThemeDecoder.decodeImageProvider(
        map['inactiveThumbImage'],
        validate: false,
      ),
      inactiveTrackColor: ThemeDecoder.decodeColor(
        map['inactiveTrackColor'],
        validate: false,
      ),
      label: map['label'],
      materialTapTargetSize: ThemeDecoder.decodeMaterialTapTargetSize(
        map['materialTapTargetSize'],
        validate: false,
      ),
      mouseCursor: ThemeDecoder.decodeMouseCursor(
        map['mouseCursor'],
        validate: false,
      ),
      onActiveThumbImageError: map['onActiveThumbImageError'],
      onChanged: map['onChanged'],
      onInactiveThumbImageError: map['onInactiveThumbImageError'],
      onSaved: map['onSaved'],
      overlayColor: ThemeDecoder.decodeMaterialStatePropertyColor(
        map['overlayColor'],
        validate: false,
      ),
      splashRadius: JsonClass.maybeParseDouble('splashRadius'),
      thumbColor: ThemeDecoder.decodeMaterialStatePropertyColor(
        map['thumbColor'],
        validate: false,
      ),
      thumbIcon: ThemeDecoder.decodeMaterialStatePropertyIcon(
        map['thumbIcon'],
        validate: false,
      ),
      trackColor: ThemeDecoder.decodeMaterialStatePropertyColor(
        map['trackColor'],
        validate: false,
      ),
      validator: map['validators'] == null
          ? null
          : Validator.fromDynamic({'validators': map['validators']}),
      value: JsonClass.parseBool(map['value']),
      visualDensity: ThemeDecoder.decodeVisualDensity(
        map['visualDensity'],
        validate: false,
      ),
    );
  }

  return result;
}