[Kwaliteit][P3] AI-statuscontrole stopt na de eerste instellingswijziging #2635

Closed
opened 2026-10-28 16:31:53 +00:00 by brenno · 1 comment
Owner

Symptoom

Het AI-statuslampje ververst niet meer nadat je één keer een AI-instelling hebt gewijzigd (of toestemming hebt gegeven); het blijft de laatste uitkomst tonen tot je erop klikt of de app herstart.

Oorzaak

AiStatusNotifier.build (lib/state/ai_status_provider.dart:70-98):

ref.onDispose(() => _timer?.cancel());   // regel 73
...
_timer ??= Timer.periodic(               // regel 92
  kAiStatusRefreshInterval,
  (_) => unawaited(_check(generation)),
);

Bij een herbouw (gewijzigde aiSettings of hasAccepted) annuleert onDispose de timer, maar zet _timer niet op null. De ??= maakt daarna geen nieuwe timer, dus de periodieke controle is weg. Daarbij legt de closure de generation van de éérste build vast; ook een timer die zou blijven lopen, zou door generation != _generation niets meer doen.

Oplossing

ref.onDispose(() {
  _timer?.cancel();
  _timer = null;
});
...
_timer = Timer.periodic(kAiStatusRefreshInterval, (_) => unawaited(_check(_generation)));

Toets

fake_async: instelling wijzigen, kAiStatusRefreshInterval laten verstrijken → testConnection is opnieuw aangeroepen.

Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).

## Symptoom Het AI-statuslampje ververst niet meer nadat je één keer een AI-instelling hebt gewijzigd (of toestemming hebt gegeven); het blijft de laatste uitkomst tonen tot je erop klikt of de app herstart. ## Oorzaak `AiStatusNotifier.build` (`lib/state/ai_status_provider.dart:70-98`): ```dart ref.onDispose(() => _timer?.cancel()); // regel 73 ... _timer ??= Timer.periodic( // regel 92 kAiStatusRefreshInterval, (_) => unawaited(_check(generation)), ); ``` Bij een herbouw (gewijzigde `aiSettings` of `hasAccepted`) annuleert `onDispose` de timer, maar zet `_timer` niet op `null`. De `??=` maakt daarna geen nieuwe timer, dus de periodieke controle is weg. Daarbij legt de closure de `generation` van de éérste build vast; ook een timer die zou blijven lopen, zou door `generation != _generation` niets meer doen. ## Oplossing ```dart ref.onDispose(() { _timer?.cancel(); _timer = null; }); ... _timer = Timer.periodic(kAiStatusRefreshInterval, (_) => unawaited(_check(_generation))); ``` ## Toets `fake_async`: instelling wijzigen, `kAiStatusRefreshInterval` laten verstrijken → `testConnection` is opnieuw aangeroepen. Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).
Author
Owner

Opgepakt. Tak: fix/prestatie-2635-2621-2622-2625. Verwachte reikwijdte: lib/state/ai_status_provider.dart en de bijbehorende test.

Opgepakt. Tak: fix/prestatie-2635-2621-2622-2625. Verwachte reikwijdte: lib/state/ai_status_provider.dart en de bijbehorende test.
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#2635
No description provided.