calculateNewSortOrder2<T extends Sortable2> static method

double calculateNewSortOrder2<T extends Sortable2>(
  1. List<T> items,
  2. int oldIndex,
  3. int newIndex,
  4. SortOrderType sortOrderType,
)

Implementation

static double calculateNewSortOrder2<T extends Sortable2>(
    List<T> items, int oldIndex, int newIndex, SortOrderType sortOrderType) {
  double newSortOrder;

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

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

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

    // items[oldIndex].sortOrder2 = newSortOrder;
  }

  // items.sort((a, b) => sortOrderType == SortOrderType.sortOrder1
  //     ? a.sortOrder1.compareTo(b.sortOrder1)
  //     : a.sortOrder2.compareTo(b.sortOrder2));

  return newSortOrder;
}