Tweede Cmd/Ctrl+S tijdens een lopende opslag verdwijnt stilletjes #1952

Closed
opened 2026-09-03 10:14:36 +00:00 by brenno · 0 comments
Owner

Het probleem

Tijdens een lopende opslag wordt een tweede Cmd/Ctrl+S genegeerd: save geeft meteen false terug, zonder snackbar, zonder dat het tabblad vuil blijft om die reden, en zonder dat de gebruiker ziet dat de tweede poging niet is meegenomen.

De eerste opslag loopt nog. De tweede was vaak "ik weet niet of de eerste aankwam, ik druk nog eens". In de menubalk en via unawaited(saveTabWithDestination(...)) is er geen wachtaanduiding die die onzekerheid wegneemt. Wie daarna meteen sluit of crasht, kan de kloof tot de volgende autosave (25 s) mislopen.

De lock zelf is terecht — twee schrijfbeurten door elkaar is erger. Het zwijgen is het probleem.

Hoe het nu werkt

lib/state/deck_provider.dart:

if (_saving) return false;

Commentaar: "A dropped trigger is harmless — the deck is still dirty." Dat is waar zolang de eerste save nog niet klaar is. Is de eerste net klaar en was er getypt tijdens het schrijven, dan speelt een ander pad (userEdited). De UI-laag in lib/widgets/app_shell.dart doet unawaited(...) en reageert niet op false.

De lock is getest in save_hardening_test.dart; de UX bij dubbele sneltoets niet.

Denkrichting (niet uitgewerkt)

  1. Bij _saving == true: geen tweede schrijfbeurt, wél een korte melding ("Bezig met opslaan…") of de tweede poging in een wachtrij van lengte 1 zetten die ná de eerste opnieuw opslaat als het tabblad nog vuil is.
  2. De menubalk/statusbalk al tijdens de eerste save "Bezig met opslaan" laten zien, zodat de tweede druk overbodig voelt.

Geen formaatwijziging.

Raakvlakken

  • lib/state/deck_provider.dart (save, _saving)
  • lib/widgets/app_shell.dart (_saveActive)
  • test/save_hardening_test.dart
## Het probleem Tijdens een lopende opslag wordt een tweede Cmd/Ctrl+S genegeerd: `save` geeft meteen `false` terug, zonder snackbar, zonder dat het tabblad vuil blijft *om die reden*, en zonder dat de gebruiker ziet dat de tweede poging niet is meegenomen. De eerste opslag loopt nog. De tweede was vaak "ik weet niet of de eerste aankwam, ik druk nog eens". In de menubalk en via `unawaited(saveTabWithDestination(...))` is er geen wachtaanduiding die die onzekerheid wegneemt. Wie daarna meteen sluit of crasht, kan de kloof tot de volgende autosave (25 s) mislopen. De lock zelf is terecht — twee schrijfbeurten door elkaar is erger. Het zwijgen is het probleem. ## Hoe het nu werkt `lib/state/deck_provider.dart`: ```dart if (_saving) return false; ``` Commentaar: "A dropped trigger is harmless — the deck is still dirty." Dat is waar zolang de eerste save nog niet klaar is. Is de eerste net klaar en was er getypt tijdens het schrijven, dan speelt een ander pad (`userEdited`). De UI-laag in `lib/widgets/app_shell.dart` doet `unawaited(...)` en reageert niet op `false`. De lock is getest in `save_hardening_test.dart`; de UX bij dubbele sneltoets niet. ## Denkrichting (niet uitgewerkt) 1. Bij `_saving == true`: geen tweede schrijfbeurt, wél een korte melding ("Bezig met opslaan…") of de tweede poging in een wachtrij van lengte 1 zetten die ná de eerste opnieuw opslaat als het tabblad nog vuil is. 2. De menubalk/statusbalk al tijdens de eerste save "Bezig met opslaan" laten zien, zodat de tweede druk overbodig voelt. Geen formaatwijziging. ## Raakvlakken - `lib/state/deck_provider.dart` (`save`, `_saving`) - `lib/widgets/app_shell.dart` (`_saveActive`) - `test/save_hardening_test.dart`
brenno 2026-09-03 14:52:40 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1952
No description provided.