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 GridItemModel && draggable is GridItemModel) {
    // fire onDrop event
    await DragDrop.onDrop(droppable, draggable, dropSpot: dropSpot);

    // get drag and drop index
    var dragIndex = items.entries
        .firstWhereOrNull((element) => element.value == draggable)
        ?.key;
    var dropIndex = items.entries
        .firstWhereOrNull((element) => element.value == droppable)
        ?.key;

    // move the cell in the items list
    if (dragIndex != null && dropIndex != null && dragIndex != dropIndex) {
      // reorder hashmap
      moveInHashmap(items, dragIndex, dropIndex);

      // reorder data
      notificationsEnabled = false;
      myDataSource?.move(dragIndex, dropIndex, notifyListeners: false);
      data = myDataSource?.data ?? data;
      notificationsEnabled = true;

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