CCExtractor / CCExtractor/taskwarrior-flutter

refactor: reduce duplication and improve readability of settings page

オープン
#641 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Dart
スター
244
フォーク
179
平均マージ
12時間 42分
マージ済み PR(30日)
2

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start in lib/app/modules/settings/views/ and read the settings page plus the four listed toggle trailing files. Trace SupportedLanguage and the inline delete-tasks confirmation before planning the shared SettingsGroup, language-name getter, and extracted delete-tasks tile. Done means repeated section and toggle logic is consolidated, language names have one source, the dialog is extracted, and the five absorbed files are removed.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
dart, flutter
領域
mobile
issue の種類
リファクタリング
難易度
4/5
見積もり時間
3〜5日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
55/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。