defaultOnReorder<M> static method

Future<M> defaultOnReorder<M>(
  1. int oldPosition,
  2. int newPosition,
  3. M data,
  4. List<M> reordered, {
  5. required double onRetrieve(
    1. M data
    ),
  6. required FutureOr<void> onUpdate(
    1. M data,
    2. double order
    ),
  7. double? defaultOrderValue,
})

Method to define ReorderableListBuilder.onReorder when the data in the list consists of M.

The elements to be reordered are passed to data, oldPosition and newPosition are the old and new positions, and reordered is the list after the reordering.

Specify a callback to onRetrieve to retrieve the numerical value of the order.

Specify a callback to execute after reordering in onUpdate.

Specify the initial value to be passed to defaultOrderValue if key has no value.

リストのデータがMで構成されている場合のReorderableListBuilder.onReorderを定義するためのメソッド。

dataに順番が入れ替わった対象の要素、oldPositionnewPositionに新旧の位置、reorderedに順番が入れ替わった後のリストが渡されます。

onRetrieveに順番の数値を取得するためのコールバックを指定します。

onUpdateに順番を入れ替えた後に実行するコールバックを指定します。

defaultOrderValuekeyに値がなかったときに渡す初期値を指定します。

Implementation

static Future<M> defaultOnReorder<M>(
  int oldPosition,
  int newPosition,
  M data,
  List<M> reordered, {
  required double Function(M data) onRetrieve,
  required FutureOr<void> Function(M data, double order) onUpdate,
  double? defaultOrderValue,
}) async {
  if (reordered.length <= 1) {
    return data;
  }
  if (oldPosition < newPosition) {
    if (reordered.length <= newPosition) {
      await onUpdate(
        data,
        defaultOrderValue ?? DateTime.now().millisecondsSinceEpoch.toDouble(),
      );
    } else {
      await onUpdate(
        data,
        (onRetrieve(reordered[newPosition]) +
                onRetrieve(reordered[newPosition - 2])) /
            2.0,
      );
    }
  } else {
    if (newPosition <= 0) {
      await onUpdate(
        data,
        onRetrieve(reordered[1]) / 2.0,
      );
    } else if (reordered.length - 1 <= newPosition) {
      await onUpdate(
        data,
        defaultOrderValue ?? DateTime.now().millisecondsSinceEpoch.toDouble(),
      );
    } else {
      await onUpdate(
        data,
        (onRetrieve(reordered[newPosition + 1]) +
                onRetrieve(reordered[newPosition - 1])) /
            2.0,
      );
    }
  }
  return data;
}