Jetpack Compose 文本未更新

Jetpack Compose text is not getting updated

我正在尝试井字游戏示例项目。一旦用户执行点击,我就会收到回调,但在尝试更新文本时,它基本上不会更新文本。下面是我的代码,请帮助。到目前为止,我已经尝试过需要在文本下方放置闭嘴所以错误 bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla:

enum class Player {
    Human, Computer
}

var board = arrayListOf("", "", "", "", "", "", "", "", "")
private var currentPlayer = Player.Computer

fun updatePosition(position: Int) {
    if (board[position].isEmpty())
        if (currentPlayer == Player.Human) {
            board[position] = "X"
            currentPlayer = Player.Computer
        } else {
            board[position] = "O"
            currentPlayer = Player.Human
        }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        ComposeTicTacToeTheme {
            Surface(
                modifier = Modifier.fillMaxWidth(),
                color = MaterialTheme.colors.background
            ) {
                Greeting(board, this::updatePosition)
            }
        }
    }
}
@Composable
fun Greeting(board: ArrayList<String>, onclick: (Int) -> Unit) {
    Column{
        Row {
            Cell(board[0]) { onclick(0) }
            Cell(board[1]) { onclick(1) }
            Cell(board[2]) { onclick(2) }
        }
        Row {
            Cell(board[3]) { onclick(3) }
            Cell(board[4]) { onclick(4) }
            Cell(board[5]) { onclick(5) }
        }
        Row {
            Cell(board[6]) { onclick(6) }
            Cell(board[7]) { onclick(7) }
            Cell(board[8]) { onclick(8) }
        }
    }
}

@Composable
fun Cell(
    name: String,
    onClick: () -> Unit
) {
    Card(
        modifier = Modifier
            .width(130.dp)
            .height(130.dp)
            .padding(12.dp),
        elevation = 8.dp,
        contentColor = Color.Black,
        shape = RoundedCornerShape(80.dp),
        onClick = onClick
    ) {
        Text(
            name, fontSize = 80.sp,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .background(color = Color.Yellow)
        )
    }
}

为了让 Compose 知道需要重组,您必须为您的值使用特殊的 State 包装器。如果是数组,您可以使用 mutableStateListOf 而不是 arrayListOf:

val board = mutableStateListOf("", "", "", "", "", "", "", "", "")

有关更多详细信息,我建议您从 Compose documentation, including this youtube video 中的状态开始,它解释了基本原理。