Skip to content

icoriha/gethub

Repository files navigation

GetHub

はじめに

issue数、watcher数の表示にはSearch APIのレスポンスに含まれる「open_issues_count」および「watchers_count」を用いたが、
実装中これらから得られる値がブラウザから確認できる値と異なることに気づいた。
Search APIを利用する条件の範疇で修正しようとしたが、期限内に修正できる目処がつかなかったため保留とした。
関連issue: #50

Android

検索ページ(Light) 詳細ページ(Light) 検索ページ(Dark) 詳細ページ(Dark)
search_light_android detail_light_android search_dark_android detail_dark_android

iOS

検索ページ(Light) 詳細ページ(Light) 検索ページ(Dark) 詳細ページ(Dark)
search_light_ios detail_light_ios search_dark_ios detail_dark_ios

環境

Android、iOSともに 開発環境と本番環境の2種類を用意した

Android iOS
dev_prod_android dev_prod_ios

実行

バージョン
Flutter 3.0.5
Dart 2.17.6

Dart defineを用いて環境分けをしているため、実行時に環境変数としてFLAVORを表す文字列を渡す必要がある。
ただし、Makefileを作成しコマンドを定義しているため、make~ から始まる短いコマンドでも実行が可能。
また、環境変数による環境分けのため、Codemagicを用いた自動デプロイにも簡単に対応可能。

開発環境

flutter run --dart-define=FLAVOR=dev

または

make run

本番環境

flutter run --dart-define=FLAVOR=prod

または

make run-prod

アーキテクチャ

アーキテクチャは、Presentation層をMVVMとしたクリーンアーキテクチャとした。
Flutterプロジェクトとしては、Freezed + Riverpod + StateNotifierを用いた構成になっている。
ViewModelはStateNotifierを継承したクラス(HogePageNotifeirと命名)とし、その状態はFreezedで生成する。
APIとの通信処理は検索結果の取得のみであり、UseCaseは必要性を感じなかったため採用していない。

アピールしたい点

  • ページネーションを実装し、検索結果が100件を超える場合でもListViewを底までスクロールすることで追加でリポジトリを取得してリストを更新するようにした。
  • アプリ起動時に検索フィールドに自動でフォーカスするようにしたり、入力内容の確定時に検索を実行するようにするなどユーザーが快適に目的を達成できるようにした。
  • アプリの環境を開発環境と本番環境に分け、環境に応じてアプリ名とアプリケーションID(Androidの場合)またはバンドルID(iOSの場合)が変更されるようにした。
  • 【ライトモード / ダークモード / 端末の設定モード】という3種のモードをアプリから切り替えられるようにした。
  • 上記のモードをSharedPreferencesを用いて永続化できるようにした。
  • ダークモードの場合はCardの影を非表示にするなど、UIの質の向上に努めた。
  • 多言語対応をおこなった。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages