fromDynamic static method

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

Builds the builder from a Map-like dynamic structure. The scaffold is a special case that uses child as an alias for the body attribute. This preserves the tree-like structure of the dynamic widgets internally but allows developers to use the more common terms. This expects the JSON format to be of the following structure:

{
  "appBar": <JsonWidgetData>,
  "backgroundColor": <Color>,
  "body": <JsonWidgetData>,
  "bottomNavigationBar": <JsonWidgetData>,
  "bottomSheet": <JsonWidgetData>,
  "drawer": <JsonWidgetData>,
  "drawerDragStartBehavior": <DragStartBehavior>,
  "drawerEdgeDragWidth": <double>,
  "drawerEnableOpenDragGesture": <bool>,
  "drawerScrimColor": <Color>,
  "endDrawer": <JsonWidgetData>,
  "endDrawerEnableOpenDragGesture": <bool>,
  "extendBody": <bool>,
  "extendBodyBehindAppBar": <bool>,
  "floatingActionButton": <JsonWidgetData>,
  "floatingActionButtonAnimator": <FloatingActionButtonAnimator>,
  "floatingActionButtonLocation": <ActionButtonLocation>,
  "onDrawerChanged": <ValueChanged<bool>>,
  "onEndDrawerChanged": <ValueChanged<bool>>,
  "persistentFooterButtons": <JsonWidgetData[]>,
  "primary": <bool>,
  "resizeToAvoidBottomInset": <bool>,
  "restorationId": <String>
}

See also:

  • JsonWidgetData.fromDynamic
  • ThemeDecoder.decodeActionButtonLocation
  • ThemeDecoder.decodeDragStartBehavior
  • ThemeDecoder.decodeFloatingActionButtonAnimator

Implementation

static JsonScaffoldBuilder? fromDynamic(
  dynamic map, {
  JsonWidgetRegistry? registry,
}) {
  JsonScaffoldBuilder? result;
  if (map != null) {
    result = JsonScaffoldBuilder(
      appBar: JsonWidgetData.fromDynamic(
        map['appBar'],
        registry: registry,
      ),
      backgroundColor: ThemeDecoder.decodeColor(
        map['backgroundColor'],
        validate: false,
      ),
      body: JsonWidgetData.fromDynamic(
        map['body'],
        registry: registry,
      ),
      bottomNavigationBar: JsonWidgetData.fromDynamic(
        map['bottomNavigationBar'],
        registry: registry,
      ),
      bottomSheet: JsonWidgetData.fromDynamic(
        map['bottomSheet'],
        registry: registry,
      ),
      drawer: JsonWidgetData.fromDynamic(
        map['drawer'],
        registry: registry,
      ),
      drawerDragStartBehavior: ThemeDecoder.decodeDragStartBehavior(
            map['drawerDragStartBehavior'],
            validate: false,
          ) ??
          DragStartBehavior.start,
      drawerEdgeDragWidth: JsonClass.parseDouble(map['drawerEdgeDragWidth']),
      drawerEnableOpenDragGesture: map['drawerEnableOpenDragGesture'] == null
          ? true
          : JsonClass.parseBool(map['drawerEnableOpenDragGesture']),
      drawerScrimColor: ThemeDecoder.decodeColor(
        map['drawerScrimColor'],
        validate: false,
      ),
      endDrawer: JsonWidgetData.fromDynamic(
        map['endDrawer'],
        registry: registry,
      ),
      endDrawerEnableOpenDragGesture:
          map['endDrawerEnableOpenDragGesture'] == null
              ? true
              : JsonClass.parseBool(map['endDrawerEnableOpenDragGesture']),
      extendBody: JsonClass.parseBool(map['extendBody']),
      extendBodyBehindAppBar:
          JsonClass.parseBool(map['extendBodyBehindAppBar']),
      floatingActionButton: JsonWidgetData.fromDynamic(
        map['floatingActionButton'],
        registry: registry,
      ),
      floatingActionButtonAnimator:
          ThemeDecoder.decodeFloatingActionButtonAnimator(
        map['floatingActionButtonAnimator'],
        validate: false,
      ),
      floatingActionButtonLocation:
          ThemeDecoder.decodeFloatingActionButtonLocation(
        map['floatingActionButtonLocation'],
        validate: false,
      ),
      onDrawerChanged: map['onDrawerChanged'],
      onEndDrawerChanged: map['onEndDrawerChanged'],
      persistentFooterButtons: map['persistentFooterButtons'] == null
          ? null
          : JsonClass.fromDynamicList(
              map['persistentFooterButtons'],
              (map) => JsonWidgetData.fromDynamic(
                map['persistentFooterButtons'],
                registry: registry,
              )!,
            ),
      primary:
          map['primary'] == null ? true : JsonClass.parseBool(map['primary']),
      resizeToAvoidBottomInset: map['resizeToAvoidBottomInset'] == null
          ? null
          : JsonClass.parseBool(map['resizeToAvoidBottomInset']),
      restorationId: map['restorationId'],
    );
  }

  return result;
}