0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jetpack composeで遷移先から遷移元にデータを返す

Posted at

はじめに

今回は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のような書き方を紹介しました
どなたかのお役に立てれば幸いです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?