reorder method

void reorder({
  1. int start = 0,
  2. int end = -1,
  3. dynamic reverse = false,
})

Implementation

void reorder({int start: 0, int end: -1, reverse: false}) {
  var slots = _relationship.keys.toList().getRange(start, end + 1).toList();
  // print('revers: $reverse, total: ${slots.length}, from $start to $end');
  if (reverse) {
    slots = slots.reversed.toList();
  }
  // print('after, from $start to $end');
  for (var i = 0; i < slots.length; i++) {
    final slot = slots[i];
    final tile = _relationship[slot];
    // print('i $i $tile');
    if (tile == null) {
      int next = -1;
      for (var j = i + 1; j < slots.length; j++) {
        // print('j $j');
        final nextItem = _relationship[slots[j]]?.item;
        if (j == (slots.length - 1) || nextItem?.fixed == false) {
          next = j;
          break;
        }
      }
      // print('next $next');
      if (next == -1) {
        break;
      } else {
        final nextSlot = _fromSlot = slots[next];
        final nextTile = _relationship[nextSlot];
        _relationship[slot] = nextTile;
        nextTile?.key.currentState?.rect = slot.key.currentState!.rect;
        _relationship[nextSlot] = null;
      }
    }
  }
}