使用@Model Jetpack Compose管理状态不起作用

时间:2020-01-24 09:53:59

标签: android kotlin android-jetpack-compose

我有一个带有@Model状态的撰写按钮。

@Model
class CounterState(var count: Int = 0)

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        MyApp {
            Counter(CounterState())
        }
    }
  }
}

@Composable
fun Counter(state: CounterState) {
Button(
    text = "I've been clicked ${state.count} times",
    onClick = {
        state.count++
    },
    style = ContainedButtonStyle(color = if (state.count > 5) Color.Green else Color.White)
  )
}

当我单击按钮时,其文本不会更新。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

在此行

Counter(CounterState())

您每次都会创建一个新的CounterState,每次重新创建时都会将其重置为零。您应该在合成之外创建一次,然后将其存储在变量中,以便每次都传递到Counter中。