reorderItems<T extends Sortable> static method

int reorderItems<T extends Sortable>(
  1. List<T> items,
  2. int oldIndex,
  3. int newIndex
)

Implementation

static int reorderItems<T extends Sortable>(List<T> items, int oldIndex, int newIndex) {
  double newSortOrder;

  //TODO: This might be necessary only because of the Flutter reorderable list.
  // if (newIndex > oldIndex) {
  //   newIndex -= 1;
  // }

  if (oldIndex < newIndex) {
    // Moving down the list.
    double nextSortOrder = newIndex + 1 < items.length
        ? items[newIndex + 1].sortOrder
        : items[newIndex].sortOrder + 1;
    newSortOrder = (items[newIndex].sortOrder + nextSortOrder) / 2;
  } else {
    // Moving up the list.
    double previousSortOrder =
        newIndex - 1 >= 0 ? items[newIndex - 1].sortOrder : items[newIndex].sortOrder - 1;
    newSortOrder = (items[newIndex].sortOrder + previousSortOrder) / 2;
  }

  items[oldIndex].sortOrder = newSortOrder;

  items.sort((a, b) => a.sortOrder.compareTo(b.sortOrder));

  return newIndex;
}