gpt4 book ai didi

android - inline fun 的计算参数内不允许可组合调用

转载 作者:行者123 更新时间:2023-12-05 00:17:49 25 4
gpt4 key购买 nike

我正在尝试访问用于存储名称的房间数据库的 dao 实例(我编写此代码只是为了熟悉 jetpack compose)。
我试图在我的可组合函数中访问我的 dao 实例,但给了我这个错误 -> inline fun remember(calculation: () -> TypeVariable(T)): TypeVariable(T) 的计算参数内不允许可组合调用
我的代码

@Composable
fun HomeScreen(navController: NavController){
var dao by remember{
mutableStateOf(NameDatabase.getInstance(LocalContext.current).getDao())
}
var scope = rememberCoroutineScope()
var username by rememberSaveable{ mutableStateOf("") }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
){
OutlinedTextField(value = username, onValueChange = {username=it})
Spacer(modifier = Modifier.height(10.dp))
Button(onClick = {
navController.navigate("showScreen/$username")

}) {
Text("Submit")
}
}
}
我在这条线上收到错误 mutableStateOf(NameDatabase.getInstance(LocalContext.current).getDao())具体 LocalContext.current给出这个错误。
PS:我已经解决了这个错误,但想知道这个错误是什么意思,为什么我无法记住里面的 dao 实例。

最佳答案

LocalContext.current标有 @Composable并且只能在另一个 @Composable 内部使用功能。 remember lambda 标记为 @DisallowComposableCalls ,并且从名称中您可以理解它不允许可组合调用。所以它与 mutableStateOf 无关, 仅限 remember .
您可能会遇到同样的副作用问题,例如 LaunchedEffect ,或事件回调,如 clickable - 在这些情况下,没有 @DisallowComposableCalls因为这些不是内联函数,并且回调将在 @Composable 之外调用范围。
您需要在函数之外读取值:

val context = LocalContext.current
var dao by remember {
mutableStateOf(NameDatabase.getInstance(context).getDao())
}

关于android - inline fun 的计算参数内不允许可组合调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71459790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com