Checklist clear-all actie, grotere voortgangsgrafiek en leesbaardere bullet auto-fit #4

Merged
brenno merged 10 commits from fix/two-bullets-independent-scaling into main 2026-06-09 21:38:10 +00:00
2 changed files with 18 additions and 2 deletions
Showing only changes of commit 9fe5771d44 - Show all commits

View file

@ -346,7 +346,12 @@ class DeckNotifier extends StateNotifier<DeckState> {
slides.add(s);
}
}
if (changed) _mutate(deck.copyWith(slides: slides));
// Bump de revisie zodat de editor van de geselecteerde slide remount en de
// uitgevinkte checkboxen ook in het invoerpaneel toont (niet alleen in de
// slidepreview).
if (changed) {
_mutate(deck.copyWith(slides: slides), bumpRevision: true);
}
}
// Zoeken & vervangen
@ -553,7 +558,14 @@ class DeckNotifier extends StateNotifier<DeckState> {
/// binnen [_coalesceWindow] valt, wordt geen nieuwe ongedaan-stap aangemaakt
/// (zodat typen niet per teken een aparte stap oplevert). Een [coalesceKey]
/// van null markeert een losse, discrete stap.
void _mutate(Deck deck, {String? coalesceKey}) {
///
/// Wanneer [bumpRevision] waar is, wordt de inhouds-revisie opgehoogd. Dat
/// dwingt de editor-subtree (die op `revision` is gesleuteld) om te remounten
/// en zijn velden opnieuw uit de slide te laden. Nodig bij deck-brede
/// bewerkingen die de huidige slide aanpassen zonder dat de editor zelf de
/// bron van de wijziging was (anders blijft de editor de oude, gecachte
/// waarden tonen).
void _mutate(Deck deck, {String? coalesceKey, bool bumpRevision = false}) {
final previous = state.deck;
if (previous != null) {
final now = DateTime.now();
@ -576,6 +588,7 @@ class DeckNotifier extends StateNotifier<DeckState> {
isDirty: true,
canUndo: _undoStack.isNotEmpty,
canRedo: false,
revision: bumpRevision ? state.revision + 1 : null,
);
}
}

View file

@ -151,6 +151,7 @@ void main() {
n.loadDeck(n.state.deck!.copyWith(slides: [s1, s2]));
expect(n.checkedChecklistCount, 4);
final revisionBefore = n.state.revision;
n.clearAllChecklists();
@ -159,6 +160,8 @@ void main() {
expect(out[0].bullets, ['[ ] Klaar', '\t[ ] Subklaar', '[ ] Open']);
expect(out[1].bullets, ['[ ] Eerste kolom']);
expect(out[1].bullets2, ['[ ] Tweede kolom', '[ ] Nog open']);
// Revision bumps so the open slide editor remounts and reflects the change.
expect(n.state.revision, greaterThan(revisionBefore));
});
test('clearAllChecklists is a no-op when nothing is checked', () {