onDragDrop method

void onDragDrop(
  1. IDragDrop droppable,
  2. IDragDrop draggable, {
  3. Offset? dropSpot,
})

Implementation

void onDragDrop(IDragDrop droppable, IDragDrop draggable,
    {Offset? dropSpot}) async {
  if (droppable is MenuItemModel && draggable is MenuItemModel) {
    // fire onDrop event
    await DragDrop.onDrop(droppable, draggable, dropSpot: dropSpot);

    // get drag and drop index
    var dragIndex = items.indexOf(draggable);
    var dropIndex = items.indexOf(droppable);

    //var center = DragDrop.getPercentOffset(dropBox, dropSpot);

    // move the cell in the items list
    if (dragIndex >= 0 && dropIndex >= 0 && dragIndex != dropIndex) {
      // move the cell in the dataset
      notificationsEnabled = false;
      myDataSource?.move(dragIndex, dropIndex, notifyListeners: false);
      data = myDataSource?.data ?? data;
      notificationsEnabled = true;

      // remove drag item from the list
      items.remove(draggable);

      // add drag item back into the list at drop index
      var moveUp = (dragIndex < dropIndex);
      var index = moveUp ? dropIndex - 1 : dropIndex;
      items.insert(index, draggable);

      // notify listeners
      notifyListeners('list', items);
    }
  }
}