Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

refactor: reduce duplication and improve readability of settings page

オープン
#641 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

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

調査の方向性

lib/app/modules/settings/views/ から始め、設定ページと、一覧にある4つのtoggle trailingファイルを読みます。共有のSettingsGroup、言語名getter、抽出したdelete-tasksタイルを計画する前に、SupportedLanguageとインラインのタスク削除確認をたどります。完了とは、繰り返されているセクションとtoggleのロジックが統合され、言語名のソースが1つになり、ダイアログが抽出され、取り込まれた5つのファイルが削除されている状態です。

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

説明

The settings page (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
  1. Add nativeName getter to SupportedLanguage
    Centralizes display names so Dart's exhaustive switch enforces updates when new languages are added.

  2. Extract delete-tasks tile into SettingsPageDeleteTasksTile
    Moves the FutureBuilder + confirmation dialog into its own widget file.

  3. Delete absorbed files
    Remove the 5 single-purpose trailing widget files whose logic is now handled by SettingsGroup.

主要言語
Dart
スター
244
フォーク
179
平均マージ
12時間 42分
マージ済み PR(30日)
2

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

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

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

CCExtractor/taskwarrior-flutter のほかの issue

CCExtractor/taskwarrior-flutter の issue をすべて見る

似ている issue

Dart の issue をもっと見る

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

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