我在使用 viewModel.observeAsState() 和 Jetpack compose 时得到 "Type mismatch. Required: State<String?> Found: String"
I get "Type mismatch. Required: State<String?> Found: String" when Using viewModel.observeAsState() with Jetpack compose
我正在创建一个让用户在文本字段中输入的应用程序,而不是使用:
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",)} )
我收到一个错误
Type mismatch. Required: State<String?> Found: String
在 TextField 小部件上设置 onValueChange = { title = it }
时。
如何将 viewModel.observeAsState()
与 TextField 一起使用?
最好的方法是在 ViewModel
class 内部创建一个函数来更改此值。
类似于:
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")} )
我正在创建一个让用户在文本字段中输入的应用程序,而不是使用:
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",)} )
我收到一个错误
Type mismatch. Required: State<String?> Found: String
在 TextField 小部件上设置 onValueChange = { title = it }
时。
如何将 viewModel.observeAsState()
与 TextField 一起使用?
最好的方法是在 ViewModel
class 内部创建一个函数来更改此值。
类似于:
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")} )