fromDynamic static method

JsonRaisedButtonBuilder? 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:

{
  "animationDuration": <int; millis>,
  "autofocus": <bool>,
  "clipBehavior": <Clip>,
  "color": <Color>,
  "colorBrightness": <Brightness>,
  "disabledColor": <Color>,
  "disabledElevation": <double>,
  "disabledTextColor": <Color>>,
  "elevation": <double>,
  "focusColor": <Color>,
  "focusElevation": <double>,
  "focusNode": <FocusNode>,
  "highlightColor": <Color>,
  "highlightElevation": <double>,
  "hoverColor": <Color>,
  "hoverElevation": <double>,
  "materialTapTargetSize": <MaterialTapTargetSize>,
  "mouseCursor": <MouseCursor>,
  "onHighlightChanged": <ValueCallback<bool>>,
  "onPressed": <VoidCallback>,
  "onLongPress": <VoidCallback>,
  "padding": <EdgeInsetsGeometry>,
  "shape": <ShapeBorder>,
  "splashColor": <Color>,
  "textColor": <Color>,
  "textTheme": <ButtonTextTheme>,
  "visualDensity": <VisualDensity>
}

As a note, the FocusNode, ValueCallback<bool>, and VoidCallback 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:

  • ThemeDecoder.decodeBrightness
  • ThemeDecoder.decodeClip
  • ThemeDecoder.decodeColor
  • ThemeDecoder.decodeBoxDirection
  • ThemeDecoder.decodeEdgeInsetsGeometry
  • ThemeDecoder.decodeMaterialTapTargetSize
  • ThemeDecoder.decodeMouseCursor
  • ThemeDecoder.decodeShapeBorder
  • ThemeDecoder.decodeButtonTextTheme
  • ThemeDecoder.decodeVisualDensity

Implementation

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

  if (map != null) {
    result = JsonRaisedButtonBuilder(
      animationDuration:
          JsonClass.parseDurationFromMillis(map['animationDuration']),
      autofocus: JsonClass.parseBool(map['autofocus']),
      clipBehavior: ThemeDecoder.decodeClip(
            map['clipBehavior'],
            validate: false,
          ) ??
          Clip.none,
      color: ThemeDecoder.decodeColor(
        map['color'],
        validate: false,
      ),
      colorBrightness: ThemeDecoder.decodeBrightness(
        map['colorBrightness'],
        validate: false,
      ),
      disabledColor: ThemeDecoder.decodeColor(
        map['disabledColor'],
        validate: false,
      ),
      disabledElevation: JsonClass.parseDouble(map['disabledElevation']),
      disabledTextColor: ThemeDecoder.decodeColor(
        map['disabledTextColor'],
        validate: false,
      ),
      elevation: JsonClass.parseDouble(map['elevation']),
      focusColor: ThemeDecoder.decodeColor(
        map['focusColor'],
        validate: false,
      ),
      focusElevation: JsonClass.parseDouble(map['focusElevation']),
      focusNode: map['focusNode'],
      highlightColor: ThemeDecoder.decodeColor(
        map['highlightColor'],
        validate: false,
      ),
      highlightElevation: JsonClass.parseDouble(map['highlightElevation']),
      hoverColor: ThemeDecoder.decodeColor(
        map['hoverColor'],
        validate: false,
      ),
      hoverElevation: JsonClass.parseDouble(map['hoverElevation']),
      materialTapTargetSize: ThemeDecoder.decodeMaterialTapTargetSize(
        map['materialTapTargetSize'],
        validate: false,
      ),
      mouseCursor: ThemeDecoder.decodeMouseCursor(map['mouseCursor']),
      onHighlightChanged: map['onHighlightChanged'],
      onPressed: map['onPressed'],
      onLongPress: map['onLongPress'],
      padding: ThemeDecoder.decodeEdgeInsetsGeometry(
        map['padding'],
        validate: false,
      ) as EdgeInsets?,
      shape: ThemeDecoder.decodeShapeBorder(
        map['shape'],
        validate: false,
      ),
      splashColor: ThemeDecoder.decodeColor(
        map['splashColor'],
        validate: false,
      ),
      textColor: ThemeDecoder.decodeColor(
        map['textColor'],
        validate: false,
      ),
      textTheme: ThemeDecoder.decodeButtonTextTheme(
        map['textTheme'],
        validate: false,
      ),
      visualDensity: ThemeDecoder.decodeVisualDensity(
        map['visualDensity'],
        validate: false,
      ),
    );
  }

  return result;
}