CCExtractor / CCExtractor/taskwarrior-flutter
refactor: reduce duplication and improve readability of settings page
- Langage dominant
- Dart
- Étoiles
- 244
- Forks
- 179
- Merge moyen
- 12 h 42 min
- PR mergées (30 j)
- 2
Description
The settings page ([lib/app/modules/settings/views/](https://github.com/CCExtractor/taskwarrior-flutter/tree/main/lib/app/modules/settings/views)) has significant code duplication and readability
issues:
- Repeated section boilerplate - _buildSectionHeader() and _buildSettingsCard() are called manually for
every settings group with the same styling logic.
- Near-identical toggle widgets - 4 separate files (settings_page_on_task_start_list_tile_trailing.dart,
settings_page_on_task_create_list_tile_trailing.dart, settings_page_highlist_task_list_tile_trailing.dart,
settings_page_enable_24hr_format_list_tile_trailing.dart) each containing ~30 lines that all do the same
thing: Obx(() => Switch(...)).
- Hardcoded language names - _getLanguageName() duplicates what should be part of the SupportedLanguage enum, requiring updates in multiple places when a language is added.
- Large inline widgets - The delete-tasks confirmation dialog (~80 lines) is inlined directly in the body,
hurting readability.
---
Proposed Changes
1. Introduce SettingsGroup widget + SettingsItemConfig sealed class
A single reusable widget that accepts title, icon, and a List and handles section
header, card styling, and dividers internally. Three item types:
- SettingsToggleItem - title, subtitle, RxBool value, optional prefsKey (auto-saves to SharedPreferences),
optional onChanged for extra side effects
- SettingsDropdownItem - title, subtitle, Rx value, options list, labelBuilder, onChanged
- SettingsCustomItem wraps any custom widget
2. Add nativeName getter to SupportedLanguage
Centralizes display names so Dart's exhaustive switch enforces updates when new languages are added.
3. Extract delete-tasks tile into SettingsPageDeleteTasksTile
Moves the FutureBuilder + confirmation dialog into its own widget file.
4. Delete absorbed files
Remove the 5 single-purpose trailing widget files whose logic is now handled by SettingsGroup.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans lib/app/modules/settings/views/ et lisez la page des paramètres ainsi que les quatre fichiers trailing de toggle listés. Suivez SupportedLanguage et la confirmation inline de suppression des tâches avant de planifier la SettingsGroup partagée, le getter de nom de langue et la tuile delete-tasks extraite. C’est terminé lorsque la logique répétée des sections et des toggles est consolidée, que les noms de langue ont une source unique, que la boîte de dialogue est extraite et que les cinq fichiers absorbés sont supprimés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- dart, flutter
- Domaine
- mobile
- Type d'issue
- Refactorisation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 55/100