fromDynamic static method

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

{
  "alignment": "<AlignmentGeometry>",
  "crossFadeState": "<CrossFadeState>",
  "duration": "<int; millis>",
  "excludeBottomFocus": "<bool>",
  "firstCurve": "<Curve>",
  "layoutBuilder": "<AnimatedCrossFadeBuilder>",
  "reverseDuration": "<int; millis>",
  "secondCurve": "<Curve>",
  "sizeCurve": "<Curve>"
}

As a note, the Curve and AnimatedCrossFadeBuilder 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.

Implementation

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

  if (map != null) {
    result = JsonAnimatedCrossFadeBuilder(
      alignment: ThemeDecoder.decodeAlignment(
            map['alignment'],
            validate: false,
          ) ??
          Alignment.topCenter,
      crossFadeState: ThemeDecoder.decodeCrossFadeState(
        map['crossFadeState'],
        validate: false,
      )!,
      duration: JsonClass.maybeParseDurationFromMillis(
        map['duration'],
      )!,
      excludeBottomFocus: JsonClass.parseBool(
        map['excludeBottomFocus'],
        whenNull: true,
      ),
      firstCurve: map['firstCurve'] ?? Curves.linear,
      layoutBuilder:
          map['layoutBuilder'] ?? AnimatedCrossFade.defaultLayoutBuilder,
      reverseDuration: JsonClass.maybeParseDurationFromMillis(
        map['reverseDuration'],
      ),
      secondCurve: map['secondCurve'] ?? Curves.linear,
      sizeCurve: map['sizeCurve'] ?? Curves.linear,
    );
  }

  return result;
}