Architecture: Handling UI events - MAD Skills
URL:https://www.youtube.com/watch?v=lwGtp0Yr0PE
一言で表すと
どのようにUIイベントをハンドリングするか
概要
UIイベントは2つに分けられる
User Events
ボタンをタップするなど、ユーザーが操作するイベント
ViewModel Events
ViewModelがUIに対して行うイベント
Jetpack Composeでこれらをどう扱うか
User Events
例えばボタンを押して読み込みを行う画面の場合
Button ComposableにonClickパラメータを渡す
親のComposableからよりビジネスロジックに近い関数パラメータを受け取り、上位にUIイベントを伝播させていく
ロジックをViewModelに委譲し、最上位のStateful ComposableがViewModelを持つ
子のComposableの onRefreshPosts ラムダで viewModel.refreshPosts() を呼んでいる
ViewModel Events
インターネットに接続されていない場合などにどうやってエラーを表示するか
UiStateをStateFlowとしてViewModelが持つ
LiveDataやmutableStateOfでも可
UiStateがエラーメッセージのリストをstringResourceのidのリストとして持つ
順番にユーザーに表示させるためのキュー
ViewModelはUIに依存しないため、これらのメッセージはToastで表示することもDialogで出すことも可
Snackbarでエラーメッセージを出す場合
ViewModelがリクエストの失敗をハンドリングすると、Ui Stateにエラーメッセージを追加する
UIはstateをobserveし、エラーメッセージを表示する
Snackbarメッセージをユーザーが消すと、メッセージが消えたことをUIがViewModelに通知する
ViewModelはUiStateをエラーメッセージが無い状態に更新する
https://scrapbox.io/files/627bb14c40b8cb0020e7d085.png
https://scrapbox.io/files/627bb171ff51e7001d1200f8.png
気になるポイント
メモ
コメント
RyuNen344.icon >UiStateがエラーメッセージのリストをstringResourceのidのリストとして持つ あれViewModelにR.classを使っちゃうの・・・・・