android - 为什么我在使用 Jetpack Compose TextField 时会出错?
问题描述
编辑
我仍在努力让它发挥作用。Text
我现在有并且我在标签上收到错误。我在一个标有@Composable 的函数中。并且仍然有类似的问题TextField
。
@Composable 调用只能在 @Composable 函数的上下文中发生
TextField(
value = "Text(text = \"\")",
onValueChange = { },
label = { Text("Label") },// copied from android developer website
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
END EDIT
我正在尝试制作一个登录屏幕,并且我正在使用TextField
它来允许用户输入电子邮件和密码。我看不出我所拥有的有什么问题,但我遇到了错误
不能使用提供的参数调用以下函数。
这是我的代码的一部分:
Row(Modifier.padding(dimensionResource(id = R.dimen.container_edge_padding))) {
Text(
text = "${stringResource(id = R.string.email)}} : ",
Modifier
.padding(0.dp) // equivalent to padding inside
.padding(end = dimensionResource(id = R.dimen.child_edge_padding)) // second padding acts as to margin putting space on the inside of the item
)
TextField(
value = "",
placeholder = stringResource(id = R.string.login_email_hint),
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
当我将鼠标悬停在它上面时,这就是我所看到的。
使用参数的名称,我使用哪些参数或它们相对于声明的位置无关紧要。如果我这样更改它,因为前 3 个参数是值、占位符、修饰符,它可以工作。但两者都应该工作,因为这就是命名参数的工作方式。提供默认值允许这样做。我可以让这个工作的唯一方法是按照声明的顺序使用参数。这意味着如果我想使用placeHolder
它,我必须按照它声明的顺序使用它之前的每个参数的名称,以便使用它。唯一必须正确声明的是value
并且onValueChange
因为它们是唯一没有声明默认值的 2 个。
TextField(
value = "",
onValueChange = {},
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
解决方案
占位符参数有一点您尝试使用的另一种类型:
placeholder: @Composable (() -> Unit)? = null,
原因:它不能使用String
代替@Composable (() -> Unit)?
推荐阅读
- python - 当使用列表找到某个值时,从一行中提取多个值
- sql - SQL Server:检查用户是否足够大
- scala - Scala:方法的多个重载替代方案
- python - 使用 Python 将扫描的 PDF 填充字段与可填充 PDF 模板合并
- python-3.x - 发送 SSDP 发现数据包时无法接收 SSDP 响应数据包 - Scapy
- smtp - 他们赢了。我无法使用自定义 SMTP 服务器进行用户注册
- javascript - xml 发布后服务器端 (php) 上的空表单
- java - 出现错误:AssertEquals 不公开,无法从外部访问
- python - 如何从列表中删除停用词?
- reactjs - 在道具更改时重新渲染功能组件