モケラ

Tech Sheets

mokelab

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")
  ...
}

一覧に戻る