はじめに
今回はJetpackCompose
を使ってsetFragmentResult
のように遷移先から遷移元にデータを返す方法を紹介していきます
本文
やること自体は至極単純です。
まず、遷移先から遷移元に戻る時に下記のようにします
navController.previousBackStackEntry?.run {
savedStateHandle["result"] = "hoge"
}
次に遷移元で結果を受け取るように処理を書きます
val result: String? = navController
.currentBackStackEntry?.savedStateHandle?.get("result")
こうすることで簡単に値を戻すことができます。
ここで注意が必要なのがデータが保持され続けることと何度もrecompose
されてしまう可能性があるということです。
そのため、下記のようにすることで回避することができます。
navController.currentBackStackEntry?.run {
if (savedStateHandle.contains("result")) {
val result: String? = savedStateHandle["result"]
viewModel.someAction(result)
savedStateHandle.remove<String>("result")
}
}
LaunchedEffect(Unit) {
navController.currentBackStackEntry?.run {
if (savedStateHandle.contains("result")) {
}
}
}
最後に
今回はJetpackComposeでのsetFragmentResultのような書き方を紹介しました
どなたかのお役に立てれば幸いです