defaultOnReorder<M> static method
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
に順番が入れ替わった対象の要素、oldPosition
、newPosition
に新旧の位置、reordered
に順番が入れ替わった後のリストが渡されます。
onRetrieve
に順番の数値を取得するためのコールバックを指定します。
onUpdate
に順番を入れ替えた後に実行するコールバックを指定します。
defaultOrderValue
にkeyに値がなかったときに渡す初期値を指定します。
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;
}