即使我將引數isChecked型別更改為MutableState<Boolean>另一個錯誤仍然回傳。
型別不匹配。必需:可變狀態。找到:布林值。
@Composable
fun PreferencesScreen(navController: NavController) {
var isChecked = remember { mutableStateOf(false) }
Scaffold(
topBar = {...},
content = {
LazyColumn(modifier = Modifier
.padding(it)
.fillMaxSize()
) {
item {
MyPreference(isChecked, "Test preference") { isChecked = !isChecked }
}
}
},
containerColor = MaterialTheme.colorScheme.background
)
}
@Composable
fun MyPreference(isChecked: Boolean, title: String, onCheckedChange: (Boolean) -> Unit) {
Row(
modifier = Modifier
.fillMaxWidth()
.toggleable(value = isChecked, onValueChange = onCheckedChange)
) {
Text(text = title)
Switch(checked = isChecked, onCheckedChange = null)
}
}
uj5u.com熱心網友回復:
TLDR:isChecked用宣告變數by:
var isChecked by remember { mutableStateOf(false) }
該函式mutableStateOf回傳 a State<T>,在這種情況下T是where 。Boolean因此,當您讀取或寫入 時isChecked,您處理的是一個State變數,而不是Boolean您期望的。
當您使用by(并匯入適當的方法)時,您會創建一個具有自定義 getter 和 setter 的變數;在這種情況下,當你讀取變數時,它實際上是讀取狀態值,而當你寫入變數時,它實際上是寫入狀態值。最后,它只是一個語法糖。這個 Kotlin 功能稱為委托。如果您想了解更多資訊,可以在他們的檔案中閱讀更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/497988.html
標籤:安卓 科特林 android-jetpack-compose android-jetpack-compose-material3
