相关疑难解决方法(0)

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

使用 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

4
推荐指数
1
解决办法
1527
查看次数