adjustPages method

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

Adjusts the page data when a page is added or removed.

Implementation

Future<void> adjustPages(int pageIndex, {bool isAdd = true}) async {
  final newTextBoxes = <int, List<TextBox>>{};
  final newHistory = <int, List<TextBoxAction>>{};
  final newUndoStack = <int, List<TextBoxAction>>{};

  // Adjust text boxes, history, and undo stack for each page.
  _textBoxes.forEach((key, value) {
    if (isAdd) {
      newTextBoxes[key >= pageIndex ? key + 1 : key] = value;
    } else {
      if (key == pageIndex) {
        // Skip deleted page
      } else {
        newTextBoxes[key > pageIndex ? key - 1 : key] = value;
      }
    }
  });

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

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

  // Replace with updated maps.
  _textBoxes
    ..clear()
    ..addAll(newTextBoxes);
  _history
    ..clear()
    ..addAll(newHistory);
  _undoStack
    ..clear()
    ..addAll(newUndoStack);

  // Adjust the current page based on the operation.
  if (!isAdd && _currentPage > pageIndex) {
    _currentPage -= 1;
  } else if (isAdd && _currentPage >= pageIndex) {
    _currentPage += 1;
  }

  notifyListeners(); // Notify listeners after adjusting pages.
}