Jetpack Compose CodeLab / Jetpack Compose の状態 - ViewModelの状態

警告: ViewModel はコンポジションの一部ではありません。そのため、コンポーザブルで作成された状態(保存された値など)は保持しないでください。メモリリークが発生する可能性があります。

とのこと。

ViewModel の外部から変更できないように_tasksを定義する。
外部から参照するときはtasks側を見る。
このViewModelのデータに変更を加えることが出来るのはこのクラス内のメソッドだけに制限する。

class WellnessViewModel : ViewModel() {
    private val _tasks = getWellnessTasks().toMutableStateList()
    val tasks: List<WellnessTask>
        get() = _tasks

   fun remove(item: WellnessTask) {
       _tasks.remove(item)
   }
}

private fun getWellnessTasks() = List(30) { i -> WellnessTask(i, "Task # $i") }

ViewModelは他のComposableには渡さない。
渡してしまうと依存が生まれ、部品として使いづらくなる。
必要なデータやメソッドだけを渡すようにする。
基本的にビジネスロジックはComposableな関数には作らないことでテストしやすくする。