Navigation Composeでパラメータを渡す
最終更新日:2023-11-11
Navigation Composeで画面遷移時にパラメータを渡すには、ルートのパスパラメータとして渡します。 Parcelable
のようなオブジェクトは渡せないので注意しましょう。
パラメータはルート中で {}
を使って表します。
composable("users/{userId}") { entry ->
val userId = entry.arguments?.getString("userId")
...
}
ViewModelで直接受け取る
ViewModelに SavedStateHandle
をプロパティとして追加すると、パラメータを直接受け取ることもできます。
@HiltViewModel
class UserDetailViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
private val userId = savedStateHandle.get<String>("id") ?: ""
}
String以外で受け取る
arguments
でこのパラメータはこの型だよーという情報を与えると、String以外で受け取ることもできます。
composable(
"users/{userId}",
arguments = listOf(
navArgument("userId") {
type = NavType.LongType
}
)
) { entry ->
val userId = entry.arguments?.getLong("userId")
...
}