Module-schakelaar notifiers consolideren (~350-450 regels boilerplate) #2070

Closed
opened 2026-09-13 08:05:15 +00:00 by brenno · 0 comments
Owner

Probleem

Tien bestanden in lib/state/ implementeren een vrijwel identiek patroon voor module-schakelaars:

  1. const _enabledKey = '...'
  2. Een ...State-klasse met bool enabled en bool loading
  3. Een ...Notifier extends Notifier<...State> met build() { _initialize(); return ...; }
  4. _initialize() leest SharedPreferences.getInstance() en roept prefs.getBool(_enabledKey) aan
  5. setEnabled(bool value) schrijft state en prefs.setBool(_enabledKey, value)
  6. Providers: ...Provider, ...EnabledProvider, ...RevealProvider

Betrokken bestanden

Bestand State-klasse Notifier
state/procesverbetering_provider.dart 37-53 53-100
state/managementsysteem_provider.dart 40-54 56-92
state/elearning_provider.dart 34-47 49-89
state/import_module_provider.dart 81-95 97-142
state/online_storage_provider.dart 76-91 93-126
state/info_safety_provider.dart 71-89 91-135
state/asset_rights_module_provider.dart 22-27 29-58
state/meeting_session_provider.dart 52-58 59-88
state/collaboration_provider.dart 53-79 81-122
state/openkat_provider.dart 86-128 137-335

procesverbetering, managementsysteem en elearning zijn nagenoeg identieke kopieen. De anderen hebben kleine variaties (Completer, legacy key cleanup, extra state, etc.).

Voorstel

De codebase heeft al een goed voorbeeld in state/consent_provider.dart: daar is de SharedPreferences-operatie geabstraheerd naar een ConsentStore interface. Voor de modules zou een generieke BoolPreferenceNotifier<T> of ModuleToggleNotifier gemaakt kunnen worden, waarbij alleen enabledKey en eventuele extra lifecycle callbacks verschillen.

Begin met de drie meest identieke files (procesverbetering, managementsysteem, elearning) als proefballonnetje.

Schatting

Per file ~35-50 regels identieke boilerplate. Voor 8-10 bestanden: ~350-450 verwijderbare regels.

Labels

duplicate, enhancement

## Probleem Tien bestanden in `lib/state/` implementeren een vrijwel identiek patroon voor module-schakelaars: 1. `const _enabledKey = '...'` 2. Een `...State`-klasse met `bool enabled` en `bool loading` 3. Een `...Notifier extends Notifier<...State>` met `build() { _initialize(); return ...; }` 4. `_initialize()` leest `SharedPreferences.getInstance()` en roept `prefs.getBool(_enabledKey)` aan 5. `setEnabled(bool value)` schrijft `state` en `prefs.setBool(_enabledKey, value)` 6. Providers: `...Provider`, `...EnabledProvider`, `...RevealProvider` ## Betrokken bestanden | Bestand | State-klasse | Notifier | |---|---|---| | `state/procesverbetering_provider.dart` | 37-53 | 53-100 | | `state/managementsysteem_provider.dart` | 40-54 | 56-92 | | `state/elearning_provider.dart` | 34-47 | 49-89 | | `state/import_module_provider.dart` | 81-95 | 97-142 | | `state/online_storage_provider.dart` | 76-91 | 93-126 | | `state/info_safety_provider.dart` | 71-89 | 91-135 | | `state/asset_rights_module_provider.dart` | 22-27 | 29-58 | | `state/meeting_session_provider.dart` | 52-58 | 59-88 | | `state/collaboration_provider.dart` | 53-79 | 81-122 | | `state/openkat_provider.dart` | 86-128 | 137-335 | `procesverbetering`, `managementsysteem` en `elearning` zijn nagenoeg identieke kopieen. De anderen hebben kleine variaties (Completer, legacy key cleanup, extra state, etc.). ## Voorstel De codebase heeft al een goed voorbeeld in `state/consent_provider.dart`: daar is de SharedPreferences-operatie geabstraheerd naar een `ConsentStore` interface. Voor de modules zou een generieke `BoolPreferenceNotifier<T>` of `ModuleToggleNotifier` gemaakt kunnen worden, waarbij alleen `enabledKey` en eventuele extra lifecycle callbacks verschillen. Begin met de drie meest identieke files (`procesverbetering`, `managementsysteem`, `elearning`) als proefballonnetje. ## Schatting Per file ~35-50 regels identieke boilerplate. Voor 8-10 bestanden: **~350-450 verwijderbare regels**. ## Labels duplicate, enhancement
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#2070
No description provided.