refactor: Gott-Datei settings_modal.dart in 12 Dateien aufgeteilt
Reine Verschiebung per Dart part/part-of (keine Umbenennung, keine Logikänderung) - settings_modal.dart schrumpft von 5541 auf 270 Zeilen. Verifiziert per automatisiertem Blockvergleich gegen das Original und flutter analyze (Baseline unverändert: 1 bekannter Hinweis). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+76
@@ -13,6 +13,82 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – M2: Gott-Datei `settings_modal.dart` aufgeteilt (12 Dateien)
|
||||
|
||||
**Erledigt:** `widgets/settings_modal.dart` (5541 Zeilen, 50+ Klassen) war laut
|
||||
Ist-Analyse die größte „Gott-Datei". „Call-Schicht entwirren" (nächster
|
||||
ROADMAP-Punkt) bleibt weiter blockiert, da es dabei um Verhaltens-/State-
|
||||
Management-Änderungen an einem CLAUDE.md-„heiligen" Bereich (Calls) geht, die
|
||||
laut Arbeitsregeln nach jedem Schritt einen echten App-Test brauchen –
|
||||
auf dem Pi ohne GUI-Toolchain (kein Android-SDK, kein Linux-Desktop-Build,
|
||||
siehe `flutter doctor`) unmöglich zu prüfen. Stattdessen den in
|
||||
`docs/M2_MODULE_SCHNITT.md` als zweiten (risikoärmeren) Schritt vorgeschlagenen
|
||||
Umbau vorgezogen: reine Datei-Aufteilung ohne Verhaltensänderung, komplett über
|
||||
`flutter analyze` prüfbar.
|
||||
|
||||
- Technik: Dart `part`/`part of` statt eigenständiger Libraries – dadurch
|
||||
bleiben alle privaten Klassen (`_ProfileSection`, `_SettingsGroup`, …) ohne
|
||||
Umbenennung nutzbar, und alle Imports bleiben zentral in `settings_modal.dart`
|
||||
(Part-Dateien brauchen keine eigenen Imports). Kein Klassenname geändert,
|
||||
kein Zeichen Logik angefasst.
|
||||
- 12 neue Dateien unter `lib/widgets/settings/`: `settings_shared.dart`
|
||||
(gemeinsame Low-Level-Widgets wie `_SettingsGroup`/`_Toggle`/`_Divider`),
|
||||
`settings_profile.dart`, `settings_notifications.dart`,
|
||||
`settings_appearance.dart`, `settings_voice.dart`, `settings_keybinds.dart`
|
||||
(Tastaturkürzel-Anzeige, NICHT zu verwechseln mit Verschlüsselungs-Keys),
|
||||
`settings_privacy.dart`, `settings_sessions.dart`, `settings_verification.dart`
|
||||
(SAS/QR-Dialog), `settings_encryption.dart` (inkl. der Megolm-Export/Import-
|
||||
Kryptofunktionen `_runPbkdf2`/`_aesCtr`/`_encryptMegolmKeys`/`_decryptMegolmKeys`,
|
||||
die bisher lose im Datei-Kopf lagen), `settings_account.dart` (Passwort ändern/
|
||||
Account löschen), `settings_about.dart`.
|
||||
- `settings_modal.dart` selbst: von 5541 auf 270 Zeilen geschrumpft – enthält
|
||||
nur noch Imports, die 12 `part`-Direktiven, `SettingsModal` und
|
||||
`_SettingsModalState` (Navigation/Layout).
|
||||
- Verifikation (da kein GUI-Test möglich): Skript-gestützte Extraktion per
|
||||
Klammer-Zählung (kein manuelles Copy-Paste, um Übertragungsfehler
|
||||
auszuschließen); anschließend automatisiert geprüft, dass alle 61
|
||||
ursprünglichen Klassen/Enums wortwörtlich (`in`-Substring-Check) in den neuen
|
||||
Dateien wieder auftauchen; Anzahl `class`/`enum`-Deklarationen (60) und
|
||||
`Widget build(`-Methoden (40) vorher/nachher identisch; alle Lücken zwischen
|
||||
den Klassenblöcken im Original einzeln geprüft – ausschließlich Leerzeilen
|
||||
und dekorative Trennkommentare, kein Code verloren.
|
||||
- `flutter analyze`: weiterhin nur der eine bekannte, zurückgestellte Hinweis
|
||||
(`chat_provider.dart:42`).
|
||||
- **Stolperfalle vermieden:** `dart format` versuchte 40 neue Lint-Hinweise
|
||||
einzuführen (`curly_braces_in_flow_control_structures`) – Ursache: die
|
||||
Originaldatei war selbst nie komplett `dart format`-clean (bestätigt per
|
||||
`dart format --set-exit-if-changed` auf dem Original-Git-Stand), und Reflow
|
||||
einzelner langer Einzeiler-`if`s ohne Klammern erzeugte neue Zeilenumbrüche,
|
||||
die der Linter anders bewertet als die Originalformatierung. Formatierung
|
||||
komplett verworfen und die Dateien unformatiert aus dem Original übernommen,
|
||||
um „keine Verhaltensänderung ohne Not" strikt einzuhalten und die
|
||||
`flutter analyze`-Baseline (1 Hinweis) nicht zu verwässern.
|
||||
|
||||
**Offen/Nächster Schritt:** UNGETESTET (Pi) im Sinne von „nicht in echter UI
|
||||
gesehen". Nächster Windows-Lauf: Einstellungen öffnen, durch alle Reiter
|
||||
klicken (Profil, Benachrichtigungen, Erscheinungsbild, Voice, Tastaturkürzel,
|
||||
Privatsphäre, Sessions, Verschlüsselung inkl. SAS/QR-Verifizierung und
|
||||
Recovery-Key-Anzeige/-Import, Passwort ändern, Account löschen-Dialog öffnen
|
||||
(ohne zu bestätigen!), Über). Da rein mechanisch verschoben, ist das Risiko
|
||||
gering, aber Verschlüsselung/Recovery-Key ist laut CLAUDE.md heilig – bitte
|
||||
gezielt den Recovery-Key-Anzeige- und Passphrase-Export/Import-Flow einmal
|
||||
durchklicken. Danach ROADMAP-Häkchen für „Ordnerstruktur vereinheitlichen"
|
||||
erst setzen, wenn auch die übrigen Gott-Dateien (`message_group.dart`,
|
||||
`rooms_panel.dart`, `space_admin_dialog.dart`, `chat_view.dart`,
|
||||
`document_viewer.dart`) angegangen sind – aktuell nur `settings_modal.dart`
|
||||
erledigt.
|
||||
|
||||
**Stolperfallen:** `dart format` NICHT blind nach einem Refactoring laufen
|
||||
lassen, wenn die Baseline vorher nicht schon formatter-clean war – kann neue,
|
||||
unrelated Lint-Hinweise einführen und die vermeintlich reine Verschiebung mit
|
||||
Formatierungsrauschen vermischen (siehe oben).
|
||||
|
||||
**Fragen an Bernd:** Keine neuen – die offene Frage zum Call-Pilot aus dem
|
||||
Eintrag „M2: Modul-Schnitt definiert" ist weiterhin unbeantwortet, blockiert
|
||||
aber nicht (siehe dort).
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – M2: Toten Code & Duplikate entfernt (Chat-Timeline)
|
||||
|
||||
**Erledigt:** Vorgriff auf den ROADMAP-Punkt „Toten Code & Duplikate entfernen"
|
||||
|
||||
Reference in New Issue
Block a user