fromDynamic static method

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

{
  "behavior": <HitTestBehavior>,
  "dragStartBehavior": <DragStartBehavior>,
  "excludeFromSemantics": <bool>
  "onDoubleTap": <GestureDoubleTapCallback>,
  "onDoubleTapCancel": <GestureTapCancelCallback>,
  "onDoubleTapDown": <GestureTapDownCallback>,
  "onForcePressEnd": <GestureForcePressEndCallback>,
  "onForcePressPeak": <GestureForcePressPeakCallback>,
  "onForcePressStart": <GestureForcePressStartCallback>,
  "onForcePressUpdate": <GestureForcePressUpdateCallback>,
  "onHorizontalDragCancel": <GestureDragCancelCallback>,
  "onHorizontalDragDown": <GestureDragDownCallback>,
  "onHorizontalDragEnd": <GestureDragEndCallback>,
  "onHorizontalDragStart": <GestureDragStartCallback>,
  "onHorizontalDragUpdate": <GestureDragUpdateCallback>,
  "onLongPress": <GestureLongPressCallback>,
  "onLongPressCancel": <GestureLongPressCancelCallback>,
  "onLongPressDown": <GestureLongPressDownCallback>,
  "onLongPressEnd": <GestureLongPressEndCallback>,
  "onLongPressMoveUpdate": <GestureLongPressMoveUpdateCallback>,
  "onLongPressStart": <GestureLongPressStartCallback>,
  "onLongPressUp": <GestureLongPressUpCallback>,
  "onPanCancel": <GestureDragCancelCallback>,
  "onPanDown": <GestureDragDownCallback>,
  "onPanEnd": <GestureDragEndCallback>,
  "onPanStart": <GestureDragStartCallback>,
  "onPanUpdate": <GestureDragUpdateCallback>,
  "onScaleEnd": <GestureScaleEndCallback>,
  "onScaleStart": <GestureScaleStartCallback>,
  "onScaleUpdate": <GestureScaleUpdateCallback>,
  "onSecondaryLongPress": <GestureLongPressCallback>,
  "onSecondaryLongPressCancel": <GestureLongPressCancelCallback>,
  "onSecondaryLongPressDown": <GestureLongPressDownCallback>,
  "onSecondaryLongPressEnd": <GestureLongPressEndCallback>,
  "onSecondaryLongPressMoveUpdate": <GestureLongPressMoveUpdateCallback>,
  "onSecondaryLongPressStart": <GestureLongPressStartCallback>,
  "onSecondaryLongPressUp": <GestureLongPressUpCallback>,
  "onSecondaryTap": <GestureTapCallback>,
  "onSecondaryTapCancel": <GestureTapCancelCallback>,
  "onSecondaryTapDown": <GestureTapDownCallback>,
  "onSecondaryTapUp": <GestureTapUpCallback>,
  "onTap": <GestureTapCallback>,
  "onTapCancel": <GestureTapCancelCallback>,
  "onTapDown": <GestureTapDownCallback>,
  "onTapUp": <GestureTapUpCallback>,
  "onTertiaryLongPress": <GestureLongPressCallback>,
  "onTertiaryLongPressCancel": <GestureLongPressCancelCallback>,
  "onTertiaryLongPressDown": <GestureLongPressDownCallback>,
  "onTertiaryLongPressEnd": <GestureLongPressEndCallback>,
  "onTertiaryLongPressMoveUpdate": <GestureLongPressMoveUpdateCallback>,
  "onTertiaryLongPressStart": <GestureLongPressStartCallback>,
  "onTertiaryLongPressUp": <GestureLongPressUpCallback>,
  "onTertiaryTapCancel": <GestureTapCancelCallback>,
  "onTertiaryTapDown": <GestureTapDownCallback>,
  "onTertiaryTapUp": <GestureTapUpCallback>,
  "onVerticalDragCancel": <GestureDragCancelCallback>,
  "onVerticalDragDown": <GestureDragDownCallback>,
  "onVerticalDragEnd": <GestureDragEndCallback>,
  "onVerticalDragStart": <GestureDragStartCallback>,
  "onVerticalDragUpdate": <GestureDragUpdateCallback>
}

As a note, none of the Gesture*Callback classes can 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.decodeDragStartBehavior
  • ThemeDecoder.decodeHitTestBehavior

Implementation

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

  if (map != null) {
    result = JsonGestureDetectorBuilder(
      behavior: ThemeDecoder.decodeHitTestBehavior(
        map['behavior'],
        validate: false,
      ),
      dragStartBehavior: ThemeDecoder.decodeDragStartBehavior(
            map['dragStartBehavior'],
            validate: false,
          ) ??
          DragStartBehavior.start,
      excludeFromSemantics: JsonClass.parseBool(map['excludeFromSemantics']),
      onDoubleTap: map['onDoubleTap'],
      onDoubleTapCancel: map['onDoubleTapCancel'],
      onDoubleTapDown: map['onDoubleTapDown'],
      onForcePressEnd: map['onForcePressEnd'],
      onForcePressPeak: map['onForcePressPeak'],
      onForcePressStart: map['onForcePressStart'],
      onForcePressUpdate: map['onForcePressUpdate'],
      onHorizontalDragCancel: map['onHorizontalDragCancel'],
      onHorizontalDragDown: map['onHorizontalDragDown'],
      onHorizontalDragEnd: map['onHorizontalDragEnd'],
      onHorizontalDragStart: map['onHorizontalDragStart'],
      onHorizontalDragUpdate: map['onHorizontalDragUpdate'],
      onLongPress: map['onLongPress'],
      onLongPressCancel: map['onLongPressCancel'],
      onLongPressDown: map['onLongPressDown'],
      onLongPressEnd: map['onLongPressEnd'],
      onLongPressMoveUpdate: map['onLongPressMoveUpdate'],
      onLongPressStart: map['onLongPressStart'],
      onLongPressUp: map['onLongPressUp'],
      onPanCancel: map['onPanCancel'],
      onPanDown: map['onPanDown'],
      onPanEnd: map['onPanEnd'],
      onPanStart: map['onPanStart'],
      onPanUpdate: map['onPanUpdate'],
      onScaleEnd: map['onScaleEnd'],
      onScaleStart: map['onScaleStart'],
      onScaleUpdate: map['onScaleUpdate'],
      onSecondaryLongPress: map['onSecondaryLongPress'],
      onSecondaryLongPressCancel: map['onSecondaryLongPressCancel'],
      onSecondaryLongPressDown: map['onSecondaryLongPressDown'],
      onSecondaryLongPressEnd: map['onSecondaryLongPressEnd'],
      onSecondaryLongPressMoveUpdate: map['onSecondaryLongPressMoveUpdate'],
      onSecondaryLongPressStart: map['onSecondaryLongPressStart'],
      onSecondaryLongPressUp: map['onSecondaryLongPressUp'],
      onSecondaryTap: map['onSecondaryTap'],
      onSecondaryTapCancel: map['onSecondaryTapChannel'],
      onSecondaryTapDown: map['onSecondartyTapDown'],
      onSecondaryTapUp: map['onSecondaryTapUp'],
      onTap: map['onTap'],
      onTapCancel: map['onTapCancel'],
      onTapDown: map['onTapDown'],
      onTapUp: map['onTapUp'],
      onTertiaryLongPress: map['onTertiaryLongPress'],
      onTertiaryLongPressCancel: map['onTertiaryLongPressCancel'],
      onTertiaryLongPressDown: map['onTertiaryLongPressDown'],
      onTertiaryLongPressEnd: map['onTertiaryLongPressEnd'],
      onTertiaryLongPressMoveUpdate: map['onTertiaryLongPressMoveUpdate'],
      onTertiaryLongPressStart: map['onTertiaryLongPressStart'],
      onTertiaryLongPressUp: map['onTertiaryLongPressUp'],
      onTertiaryTapCancel: map['onTertiaryTapCancel'],
      onTertiaryTapDown: map['onTertiaryTapDown'],
      onTertiaryTapUp: map['onTertiaryTapUp'],
      onVerticalDragCancel: map['onVerticalDragCancel'],
      onVerticalDragDown: map['onVerticalDragDown'],
      onVerticalDragEnd: map['onVerticalDragEnd'],
      onVerticalDragStart: map['onVerticalDragStart'],
      onVerticalDragUpdate: map['onVerticalDragUpdate'],
    );
  }

  return result;
}