android 在rememberUpdatedState()中记住lambda函数的用法

bgibtngc  于 12个月前  发布在  Android
关注(0)|答案(1)|浏览(193)

我在谷歌的撰写文档(链接)中看到,
有一个LoginScreenCompose函数,基于一个动作(例如,这里,成功登录),我们希望然后使用lambda函数从LoginScreen的输入导航到HomeScreen
在Google文档的例子中,他们记住了LoginScreen rememberUpdatedState()输入的lambda函数,当成功登录时,rememberUpdatedState()的值用于导航。

@Composable
fun LoginScreen(
    onUserLogIn: () -> Unit, // Caller navigates to the right screen
    viewModel: LoginViewModel = viewModel()
) {
    Button(
        onClick = {
            // ViewModel validation is triggered
            viewModel.login()
        }
    ) {
        Text("Log in")
    }
    // Rest of the UI

    val lifecycle = LocalLifecycleOwner.current.lifecycle
    val currentOnUserLogIn by rememberUpdatedState(onUserLogIn)
    LaunchedEffect(viewModel, lifecycle)  {
        // Whenever the uiState changes, check if the user is logged in and
        // call the `onUserLogin` event when `lifecycle` is at least STARTED
        snapshotFlow { viewModel.uiState }
            .filter { it.isUserLoggedIn }
            .flowWithLifecycle(lifecycle)
            .collect {
                currentOnUserLogIn()
            }
    }
}

字符串
我知道rememberUpdatedState()的用法,用于记住一个值并获取最新的
但是这个结构的用法是从一个rememberedUpdateState非直接调用lambda函数(onUserLogIn()),
为什么不直接调用onUserLogIn lambda函数呢?

5kgi1eie

5kgi1eie1#

这就是rememberUpdatedState的作用--将更新的状态传递到LaunchedEffect中。如果直接调用onUserLogIn,它将使用LaunchedEffect启动时的初始值。

相关问题