当我使用 viewModel.observeAsState() 与 Jetpack 撰写时,我得到"Type mismatch. Required: State<String?> Foun



我正在创建一个应用程序,它接受用户在文本字段中的输入,而不是使用:

var textState = remember { mutableStateOf("") }

我选择使用像这样的视图模型

var title : State<String?> = addTaskViewModel.title.observeAsState()
TextField(
modifier = Modifier.fillMaxWidth(),
value = title.value!!,
onValueChange = { title = it },
shape = textFieldShape,
colors = textFieldColors,
label = {Text("Add a title",)} )

我收到一个错误

类型不匹配。必需:状态<字符串>找到:字符串

在TextField小部件上设置onValueChange = { title = it }时。

如何将viewModel.observeAsState()与TextField一起使用?

最好的方法是在ViewModel类内部创建一个函数来更改此值。

类似于:

class TaskViewModel : ViewModel() {
//Just an example
private var _title = MutableLiveData("")
var title: LiveData<String> = _title
fun onTitleChange(newName: String) {
_title.value = newName
}
}

然后:

val title : State<String> = taskViewModel.title.observeAsState("")
TextField(
modifier = Modifier.fillMaxWidth(),
value = title.value,
onValueChange = { taskViewModel.onTitleChange(it) },
label = {Text("Add a title")} )

或:

val title: String by taskViewModel.title.observeAsState("")
TextField(
modifier = Modifier.fillMaxWidth(),
value = title,
onValueChange = { taskViewModel.onTitleChange(it) },
label = {Text("Add a title")} )

相关内容

最新更新