使用 SavedStateHandle 发送回结果不适用于 ViewModel 中注入的 SavedStateHandle。
使用navController.currentBackStackEntry?.savedStateHandle?它可以得到结果!
fun CreatePostScreen(
navController: NavController,
coroutineScope: CoroutineScope,
snackbarState: SnackbarHostState,
viewModel: CreatePostViewModel = hiltViewModel(),
) {
LaunchedEffect(key1 = Unit) {
navController.currentBackStackEntry?.savedStateHandle?.getStateFlow(
"result", ""
)?.collect { result ->
Timber.d("Result -> $result")
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 ViewModel 中使用saveStateHandleHilt 注入不会得到结果!
@HiltViewModel
class CreatePostViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
init {
viewModelScope.launch {
savedStateHandle.getStateFlow("result", "").collect {
Timber.d("Result -> $it")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我将结果发送回前一屏幕的方式!
navController.previousBackStackEntry?.savedStateHandle?.set("result", "this is result")
Run Code Online (Sandbox Code Playgroud) android android-jetpack-navigation android-jetpack-compose viewmodel-savedstate dagger-hilt