Y&S SoftWareのホームページ
使いかってのいいソフトウェアを開発します

LaunchedEffect

LaunchedEffect のブロック内では サスペンド関数や ViewModel の関数呼び出しも可能です。

Compose が初回コンポーズした後に一度だけ実行されるので、初期化処理や起動時のデータロードに適しています。

例:

LaunchedEffect(Unit) {
  val initialFolderId = 10
  if (treeViewModel.selectedIdState.intValue == -1) {
    treeViewModel.selectedIdState.intValue = initialFolderId
    treeViewModel.selectFolder(initialFolderId)
    treeViewModel.setNoteTitles(initialFolderId)
  }
}



Unit をキーにしているので、起動時の1回だけ実行されます。

ブロック内で viewModelScope.launch は不要です。LaunchedEffect 自体が CoroutineScope 内なので suspend 関数も直接呼べます。

Compose 側の StateFlow を更新するような関数呼び出しも安全に行えます。

つまり、TreeViewModel の初期設定や DB からのデータロードを LaunchedEffect 内で行うのは正しい方法です。


DataStore の依存関係
Gradle に依存関係を追加する
Preferences DataStore の場合

dependencies {
  implementation "androidx.datastore:datastore-preferences:1.1.0" // 最新版
}