0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

状態を保存する

Last updated at Posted at 2024-11-16

Conposeで状態を保存する方法のメモ

ただ変数に値を設定しただけではComposeによってトラッキングされていないため、下記コードのクリックイベントを動かすことはできない。Sampleが呼び出されるたびにexpanded変数はfalseにリセットされる。
再コンポジションされない内部状態を追加するにはmutableStateOf 関数を使用する。これは、Composeが状態を読み取り関数を再コンポーズするようになる。さらに状態を保持するrememberと合わせて使うことコンポーズを超えて状態が保持されるようになるので、値が初期化(false)されることはなくなる。

@Composable
fun Sample() {
var expanded = false
    // var expanded = false 
    // 内部状態を保存していないため、関すが呼び出されるたびにリセットされる

    // var expanded = mutableStateOf(false) 
    // 内部状態を追加できる。しかし再コンポジションが発生した場合、値がリセット(false)される

    val expanded = remember { mutableStateOf(false) }
    // 再Composeを超えて状態が保持されるようになるので、初期化されることはない
    
    Surface(
        color = MaterialTheme.colorScheme.primary,
        modifier = Modifier.fillMaxSize()
    ) {
        Row {
            ElevatedButton(onClick = { expanded.value = !expanded.value }) {
                Text(if (expanded.value) "Show less" else "Show more")
            }
        }
    }
}

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?