标签: mutablestateof

为什么有时没有记住的 mutableStateOf 也能工作?

我一直在使用 Jetpack Compose Desktop。我注意到一些我真的不明白的事情:

import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application

@Composable
@Preview
fun App() {
    var text by mutableStateOf("Hello, World!")

    MaterialTheme {
        TextField(text, onValueChange = { text = it })
        Button(onClick = {
            text = "Hello, Desktop!"
        }) {
            Text(text)
        }
    }
}

fun main() = application {
    Window(onCloseRequest = ::exitApplication) {
        App()
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以更改 中的文本TextField?我认为在每次重组时,可变状态都会使用初始值重新实例化:所以Text应该无法更改

import androidx.compose.desktop.ui.tooling.preview.Preview
import …
Run Code Online (Sandbox Code Playgroud)

kotlin android-jetpack-compose mutablestateof

11
推荐指数
1
解决办法
3255
查看次数

Jetpack Compose TextField 在输入新字符时不更新

我从开发者网站上关注了这份文档。我想显示用户输入中的文本OutlinedTextField,并使其在配置更改后保持不变。

使用下面的代码,当用户从键盘输入文本时,OutlinedTextField不会更新文本。

HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而这行代码可以正常工作:

HelloContent(name = temp, onNameChange = { temp = it})//Work
Run Code Online (Sandbox Code Playgroud)

下面是我用来实现的代码:

@Composable
fun HelloScreen() {
    var city by rememberSaveable(stateSaver = CitySaver) {
        mutableStateOf(City("Hanoi","VietNam"))
    }
    var temp by rememberSaveable {
        mutableStateOf("")
    }
    Column {
        HelloContent(name = city.name, onNameChange = { city.name = it})//Doesn't work
        HelloContent(name = temp, onNameChange = { temp = it})//Work
    }
}
@Composable
    fun HelloContent(name: String, onNameChange: (String) -> Unit) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose compose-recomposition mutablestateof

8
推荐指数
1
解决办法
4834
查看次数

如何使用 null 作为默认值 - Compose mutableState

我有一个需要,比如第一次在 UI 加载时mutableStateOf Boolean值必须为null,而不是默认值 true/false 类似于 Kotlin 中的常规布尔值

var isBooleanValue: Boolean = null
Run Code Online (Sandbox Code Playgroud)

我需要的是如下

var isClassAccessedAtleastOnce = remember {  mutableStateOf(null) }
Run Code Online (Sandbox Code Playgroud)

请让我知道用例是否有任何可能性

android kotlin android-jetpack-compose mutablestateof

6
推荐指数
1
解决办法
3248
查看次数