setWillAccept method

bool setWillAccept(
  1. DragTargetDetails<T> details,
  2. T data
)

Implementation

bool setWillAccept(DragTargetDetails<T> details, T data) {
  if (details.data == data) return false;
  if (widget.maxSimultaneousDrags == 1 && details.data != dragData) return false;
  // 如果正在执行滚动,逻辑上应该允许在滚动间隙进行排序判定
  if (status == AnimationStatus.completed && scrollEndTimer == null) {
    endWillAccept();
    _timer = Timer(const Duration(milliseconds: 100), () {
      // 缩短排序延迟,增加响应速度
      if (!mounted || DragAnimNotification.isScroll) {
        return;
      }
      acceptDetails = null;
      acceptData = null;
      isOnWillAccept = true;
      if (widget.onWillAcceptWithDetails != null) {
        widget.onWillAcceptWithDetails?.call(details, data, true);
      } else {
        var dataList = widget.dataList;
        if (dataList != null) {
          setState(() {
            final int index = dataList.indexOf(data);
            dataList.remove(details.data);
            dataList.insert(index, details.data);
          });
        }
      }
    });
    return true;
  }
  return false;
}