taratara10 / Topicker

0 stars 0 forks source link

ViewModelの実装 #17

Closed taratara10 closed 2 years ago

taratara10 commented 2 years ago

goodとskip押したときの実装

taratara10 commented 2 years ago

仮にofflineするとて、ステータスはどのタイミングでpostするんだろうか

taratara10 commented 2 years ago

goodしたら、震えて、ステータス更新

onClick: (Int) -> ()
taratara10 commented 2 years ago

うーん

taratara10 commented 2 years ago

saveStateHandleとは https://note.com/kauche/n/n27d456bcaa78 https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate?hl=ja

viewModelを復元するsharedPref的なやつ?

taratara10 commented 2 years ago

正直stateFlowがコールドストリームであること以外何もしらないので、コードラボやった方がいいかもしれない。

taratara10 commented 2 years ago

https://zenn.dev/ko2ic/articles/3601dea3d35013

ほーん。 viewModelに@Stableするとメソッド呼び出しだけのrecompositionが防げそう?

viewModelでどっち採用するか

taratara10 commented 2 years ago

rememberMyAppみたいなUiStateHolder作るの良さそう https://developer.android.com/jetpack/compose/state?hl=ja#state-holder-source-of-truth

https://zenn.dev/ko2ic/articles/2fff45bd160de7#viewmodel%E3%81%AB%E7%8A%B6%E6%85%8B%E3%82%92%E6%8C%81%E3%81%9F%E3%81%9B%E3%82%8B

taratara10 commented 2 years ago

そもそもStateってなにもの

A value holder where reads to the value property during the execution of a Composable function, the current RecomposeScope will be subscribed to changes of that value.

Stateに変化があるとrecompositionがinvoke. なにそれ凄すぎ

taratara10 commented 2 years ago

https://medium.com/androiddevelopers/migrating-from-livedata-to-kotlins-flow-379292f419fb

うーんStateFlowをListでやるのが良く分からん。 <Result<UiState>>(Result.Success(UiState(...)))みたいにSugerしたほうがええんやろか

StateFlow, It only has one value.

Since the state holders always have a value, it’s a good idea to wrap our UI state in some kind of Result class that supports states such as Loading, Success, and Error.

あ~~~ なるほど。 UiStateの観点でいったら、常に値がある方が望ましいのか。

taratara10 commented 2 years ago

https://stackoverflow.com/questions/69932411/correct-way-to-handle-mutable-state-of-list-of-data-in-jetpack-compose https://medium.com/geekculture/add-remove-in-lazycolumn-list-aka-recyclerview-jetpack-compose-7c4a2464fc9f

mutableStateList vs mutableState(listOf)

mutableStateListで良さそう。

https://stackoverflow.com/questions/67252538/jetpack-compose-update-composable-when-list-changes

Caution: Using mutable objects such as ArrayList or mutableListOf() as state in Compose will cause your users to see incorrect or stale data in your app.

In your code use

val favourites by mutableStateListOf()

instead of

var favourites: MutableList by mutableStateOf(mutableListOf())

なるほど!?mutableListでState持つと、整合性バグる可能性あるっぽいな

公式にかいてあったわ https://developer.android.com/jetpack/compose/state?hl=ja

taratara10 commented 2 years ago

https://stackoverflow.com/questions/67252538/jetpack-compose-update-composable-when-list-changes

when state list work. たぶん、equalじゃなくなった時

個々のitemのStateを変化させたときに発火するかが気になる。 {page-> } の中にrememberで各ページのStateでも持たせたろか

taratara10 commented 2 years ago

うーん なにがやりたいか問題が定式化できてないので、とりあえずrepository作るか

taratara10 commented 2 years ago

repositoryからはgetTopicで単一のデータを取得する、、、RepositoryからFlowで取得できない?

taratara10 commented 2 years ago

Flowってつまり、、、元のデータソースに変更があったら通知してくれるLiveData的な値、、、ってコト!?

問題は、List が各 DAO 関数から 1 回しか返されないことです。基となるデータが更新されても、submitList() が呼び出されて UI が更新されることはありません。ユーザーからは、何も変わっていないように見えます。

これを修正するには、「非同期フロー」(多くの場合は単に「フロー」と呼びます)という Kotlin の機能を利用して、DAO が継続的にデータベースからデータを出力できるようにします。項目が挿入、更新、削除されると、その結果がフラグメントに返されます。collect(), という関数を使用すると、フローから出力された新しい値を使用して submitList() を呼び出すことができます。これにより、ListAdapter は新しいデータに基づいて UI を更新できます。

https://developer.android.com/codelabs/basic-android-kotlin-training-intro-room-flow#8

taratara10 commented 2 years ago

RoomでLiveDataを指定すると、observerで登録できて、テーブルに更新があると自動で通知してくれんのか。 は~~~~~

taratara10 commented 2 years ago

https://zenn.dev/rockname/articles/75d716e83f81e1

すごい良さそう

taratara10 commented 2 years ago

でけた