setWillAccept method
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;
}