adjustPages method

Future<void> adjustPages(
  1. int pageIndex, {
  2. bool isAdd = true,
})

Adjust image mappings when a page is added or removed

Implementation

Future<void> adjustPages(int pageIndex, {bool isAdd = true}) async {
  final newImageBoxes = <int, List<ImageBox>>{};
  final newHistory = <int, List<ImageAction>>{};
  final newUndoStack = <int, List<ImageAction>>{};

  _imageBoxes.forEach((key, value) {
    if (isAdd) {
      newImageBoxes[key >= pageIndex ? key + 1 : key] = value;
    } else {
      if (key != pageIndex) {
        newImageBoxes[key > pageIndex ? key - 1 : key] = value;
      }
    }
  });

  _history.forEach((key, value) {
    if (isAdd) {
      newHistory[key >= pageIndex ? key + 1 : key] = value;
    } else {
      if (key != pageIndex) {
        newHistory[key > pageIndex ? key - 1 : key] = value;
      }
    }
  });

  _undoStack.forEach((key, value) {
    if (isAdd) {
      newUndoStack[key >= pageIndex ? key + 1 : key] = value;
    } else {
      if (key != pageIndex) {
        newUndoStack[key > pageIndex ? key - 1 : key] = value;
      }
    }
  });

  _imageBoxes
    ..clear()
    ..addAll(newImageBoxes);
  _history
    ..clear()
    ..addAll(newHistory);
  _undoStack
    ..clear()
    ..addAll(newUndoStack);

  if (!isAdd && _currentPage > pageIndex) {
    _currentPage -= 1;
  } else if (isAdd && _currentPage >= pageIndex) {
    _currentPage += 1;
  }

  notifyListeners();
}