Instruction file imported from yumikokh/notion_todo (
.cursor/rules/coding-gideline.mdc). Copyright stays with the author.
Coding Guideline
コード変更時の留意点
- 指示した内容以外に修正したい内容があった場合、勝手にコードを書き換えないでください
- コメントは削除しないこと
- SwiftファイルのSourceKitリントエラーは無視してください
- コードスタイルはここに記載するルールに従ってください
動作要件
- iOS17-
設計
- MVVMパターンを採用する
- 将来的にMVVM + Repositoryパターンになるように設計を見直す予定。現状、データ層(NotionAPIやローカルストレージ)に関するロジックは XxxService や XxxRepositroy に分散している
コードスタイル
- グローバルステート管理はRiverpodを採用し、ViewModelをProviderとする
- Providerを作成するときは、 @riverpod アノテーションを優先して使用する
- 簡単なローカルステートは flutter_hooks を使用する。StatefulWidgetは使わない
- 複雑なローカルステートロジックが必要な場合はChangeNotifierを拡張したViewModelを作成し、View(Widget)でロジックは持たせない
ローカライズ
- ローカライズ辞書は app_en.arb app_ja.arb で管理する
- Widgetでの実装は task_date_sheet.dart, Context をもたないProvider管理下の実装は task_viewmodel.dart を参考にすること。それ以外の場合は、クラスにAppLocalizations型をもつパラメータを渡すようにする
Haptic
- よりよいユーザー体験のために、適度なHapticフィードバックを加える
- 使用側のWidgetで haptic_helper.dart を利用する
awaitする必要はない
HapticHelper.light()
- RadioやSwitchのようなインプット要素で変更があったことを示す
- 閾値をもつUI(Pull to Refresh、スワイプ、長押し)で閾値を超えたことを示す
- アクションの種類によってわかりづらければ、
HapticHelper.medium()を使う
- アクションの種類によってわかりづらければ、
- FABのような象徴的なボタンのタップ時
HapticHelper.selection()
- 確定要素のあるテキストボタンやアイコンボタンのタップ時
