2024/11/03 授業パスワードを入力できるアプリを作る
ポータルを開く
ログインする
時間割から今の授業を探す
授業ページにアクセスする
(すべての回を表示する設定にしているので)今回の授業の回を探す
パスワードを入力する
設定画面
要件
アプリケーション設定ボタンから、設定画面に遷移させる
設定画面ではユーザ名、パスワードを入力し、保存ボタンを押さなくても自動で保存されるようにする
実装方法の検討
画面の遷移について
値の保存について
永続的に何らかの場所に保存しておきたいが..
ログインid とパスワードを保持するなら、セキュリティ面でも信頼されている方法で管理したい
この記事を参考に考えていきたい
ポータルへのアクセス
1. ユーザ名、パスワードを用いてバックグラウンドでログインする
2. 現在の時間が時間割の何行目 / 何列目かを計算する
3. トップ画面のDOMを解析して、<table />要素の中から現在の授業のリンクを取得する
4. 現在の授業ページにアクセスし、必要な情報を取得する
授業名
パスワード入力用 form の action 属性
https://scrapbox.io/files/6726f7abda743b465ace128d.png
1:Home
Icon要素がある
Icon(Icon.Home.)
2:Setting
3:Card
4:Text(授業名)
5:TextField(パスワード)
書き忘れたが、次の要素も必要だろう
パスワード送信ボタン
trailingIconにIconButtonを置けばよいかも?
エラーメッセージなど(パスワードが間違っている、など)
M3以降ではMaterial Designで定義されているSupporting Textを使えそう
そうでなくても自前でText要素を用意すれば良さそう
Composableな関数がどこにもないプロジェクトだった。どこから書き始めれば良いのか分からない..
MVVMがよくわからない..t6o_o6t.icon Controllerが現れない構造は、実際にAndroidアプリケーションを書いていると自然に感じられた
素直に書くとView(Composableなど)にビジネスロジックが偏りそう
そこでViewModelに状態とビジネスロジックを置くという流れ?
Reactにおけるhooksの導入も動機は同じようなものだったか..
まあ今は理解しなくても書けるくらいの小さなアプリケーションかな..
MVVMは慣習的に支持されてきたアーキテクチャだが、純Composeアプリにおいては賛否がある印象
remember があればviewModel要らない、とする人もいる
画面遷移について
そのComposable内でcomposable()でルーティングを定義する
「次へ」ボタンの押下など、画面遷移に関するイベントはApp用のComposableでキャッチし、navController.navigate(route)する
BottomNavigationとの連携は..
https://scrapbox.io/files/672789c845506d9d9eafa07e.jpg
ホームの画面構成は出来た
データ取得などの面倒なところはまだやっていないので、はりぼて
いちどここまででGit Commitしよう
(どのようにファイル分割するのだろうか?)
画面(screen )毎にファイルを切る、screen内部で呼び出すComposableも再利用を見越すならファイルごと切り分ける?iNoma.icon
状態とロジックはやはりViewModelに持たせるのが良いのか
一時的な入力値はComposableで管理しても良いような..?
画面回転などで値がリセットされることを期待するなら。
今回の要件ではViewModelを使ったほうが良さそう
入力中のパスワードが画面回転でリセットされるのは不適切だろう
ViewModelは、画面回転などのUIの事情に影響されずにデータを保持する
UIに依存される存在
Kotlinのドキュメントを少し読んで、コルーチンを使ったAndroid Developersのページを読めるようになった
なぜRepositoryとServiceに分けるのかはあまり納得がいかないが..
AndroidにServiceという概念が存在するようだ(これとは関係ない?)
あんまり関係ないと思います!iNoma.icon
語源とかで関係あったらごめん
自動テストを記述する
時間割(Timetable)について
時間割を取得する
fetchTimetableService
TimetableRepository.
現在の授業について
授業がある場合、それを表示する
授業がない場合、授業がない旨を表示する
授業の取得に失敗した場合、その旨を表示する
ユーザのログインについて
アプリケーションを立ち上げたとき、ログインする
ViewModelのinit {}に書くことになる?
ユーザのログインに失敗した場合、
ViewModelに状態を移す
アプリの起動時にPOSTリクエストを飛ばすようにする
ライフサイクルが指定した状態を満たしたときコルーチンが実行され、満たさなくなったときキャンセルしてくれる
ユーザ設定を保存する
DataStoreを使ってユーザ設定を保存するcodelab
プラスの要件
授業時間中はパスワードなどをダッシュボードの一番上に表示する
昼時間帯は食堂のメニュー
その日の授業より前の時間帯には行きのバス3件
そうでない場合は帰りのバス3件