adjustPages method
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.
}