setDragScope method

Widget setDragScope(
  1. T data,
  2. Widget child,
  3. Key key
)

Implementation

Widget setDragScope(T data, Widget child, Key key) {
  final Widget keyWidget = child;
  return DragAnimWidget(
    controller: _animationController,
    contextOffset: () => _contextOffsetMap[key],
    isExecuteAnimation: () => isDragStart && isOnWillAccept,
    didAndChange: (BuildContext context, bool isDispose) {
      if (isDispose) {
        if (_contextOffsetMap[key]?.context == context) {
          _contextOffsetMap.remove(key);
        }
      } else {
        if (_contextOffsetMap.containsKey(key)) {
          _contextOffsetMap[key]?.context = context;
          _contextOffsetMap[key]?.updateOffset();
        } else {
          _contextOffsetMap[key] = ContextOffset(context, Offset.zero)..updateOffset();
        }
      }
    },
    key: key,
    child: DragTarget<T>(
      onWillAcceptWithDetails: (DragTargetDetails<T> details) {
        acceptDetails = details;
        acceptData = data;
        if (isDragStart && !DragAnimNotification.isScroll) {
          return setWillAccept(details, data);
        }
        return false;
      },
      onAcceptWithDetails: widget.onAcceptWithDetails == null
          ? null
          : (DragTargetDetails<T> details) => widget.onAcceptWithDetails?.call(details, data),
      onLeave: widget.onLeave == null ? null : (T? moveData) => widget.onLeave?.call(moveData, data),
      onMove: widget.onMove == null ? null : (DragTargetDetails<T> details) => widget.onMove?.call(data, details),
      hitTestBehavior: widget.hitTestBehavior,
      builder: (BuildContext context, List<T?> candidateData, List<dynamic> rejectedData) {
        if (widget.maxSimultaneousDrags == 1 && data != dragData) {
          return keyWidget;
        }
        if (widget.draggingWidgetOpacity > 0 && dragData == data) {
          return AnimatedOpacity(
            opacity: widget.draggingWidgetOpacity,
            duration: Duration(milliseconds: 300),
            child: keyWidget,
          );
        }
        return Visibility(
          child: keyWidget,
          maintainState: true,
          maintainSize: true,
          maintainAnimation: true,
          visible: dragData != data,
        );
      },
    ),
  );
}