inline fun 的计算参数内不允许组合调用
Composable calls are not allowed inside the calculation parameter of inline fun
我正在尝试访问用于存储名称的房间数据库的 dao 实例(我编写的这段代码只是为了熟悉 Jetpack Compose)。
我试图在我的可组合函数中访问我的 dao 实例,但给我这个错误 -> 在内联乐趣的计算参数中不允许可组合调用 remember(calculation: () -> TypeVariable(T)):类型变量(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: 我已经解决了这个错误,但想知道这个错误是什么意思,为什么我无法在 remember 中获取 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())
}
我正在尝试访问用于存储名称的房间数据库的 dao 实例(我编写的这段代码只是为了熟悉 Jetpack Compose)。
我试图在我的可组合函数中访问我的 dao 实例,但给我这个错误 -> 在内联乐趣的计算参数中不允许可组合调用 remember(calculation: () -> TypeVariable(T)):类型变量(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: 我已经解决了这个错误,但想知道这个错误是什么意思,为什么我无法在 remember 中获取 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())
}