Draggable(
//这个参数是和DragTarget配合使用的,当用户将控件拖动到DragTarget时此数据会传递给DragTarget
data: value,
//子控件
child: DragTarget(
//当onWillAccept返回true时, candidateData参数的数据是Draggable的data数据。
// 当onWillAccept返回false时, rejectedData参数的数据是Draggable的data数据,
builder: (context, candidateData, rejectedData) {
return baseItem(value);
},
//onWillAccept:拖到该控件上时调用,需要返回true或者false,返回true,松手后会回调onAccept,否则回调onLeave。
onWillAccept: (moveData) {
print('=== onWillAccept: $moveData ==> $value');
var accept = moveData != null;
if (accept) {
exchangeItem(moveData, value, false);
}
return true;
},
//onAccept:onWillAccept返回true时,用户松手后调用。
onAccept: (moveData) {
print('=== onAccept: $moveData ==> $value');
exchangeItem(moveData, value, true);
},
//onLeave:onWillAccept返回false时,用户松手后调用。
onLeave: (moveData) {
print('=== onLeave: $moveData ==> $value');
},
),
//拖动时跟随移动的组件
feedback: baseItem(value, color: Colors.grey),
//拖动的时候子组件显示其他样式
childWhenDragging: null,
//开始拖动时回调。
onDragStarted: () {
print('=== onDragStarted');
setState(() {
_movingValue = value; //记录开始拖拽的数据
});
},
//拖动到DragTarget控件上时回调。
onDragCompleted: () {
print('=== onDragCompleted');
setState(() {});
},
//未拖动到DragTarget控件上时回调。
onDraggableCanceled: (Velocity velocity, Offset offset) {
print('=== onDraggableCanceled');
setState(() {
_movingValue = null; //清空标记进行重绘
});
},
//拖动结束时回调。
onDragEnd: (dragDetail) {},
);
网友评论