Jetpack ComposeのCompositionLocalProviderとは
こんばんは。
Jetpack Composeの公式サンプルアプリの一つであるJetsurveyのソースコードを読んでいてCompositionLoacalProvider
というものが分からなかったため調べてみました。
どうやらCompositionLocalProvider
のラムダ内では引数として渡さなくても事前定義した変数を使いまわせるみたいです。
例を見てましょう。
まず以下のようなデータクラスがあるとします。
data class CompositionData( val name: String = "" )
次に `compositionLocalOf()' で変数のデフォルトを定義します。ラムダ内の処理がデフォルト値となるようです。
val LocalUser = compositionLocalOf {
CompositionData()
}
最後に`CompositionLocalProvider()'を記述します。
CompositionLocalProvider(LocalUser provides CompositionData("gouta", 100)) { MyContent() //変数を使用したいCompose関数 }
'MyContent()'には引数として明示的にデータを渡していませんが以下のように使用することができます。
@Composable fun MyContent() { val user = LocalUser.current Text( text = user.name, modifier = Modifier.fillMaxWidth(), ) }
まとめ
以上、CompositionLocalProvider
の簡単な説明でした。変数がGlobalチックになるので使いまわしは危険そうです。しかし公式の実装にもあるようにContextの取得など他にも便利なものがあるので使ってみたいと思います。
LocalContext
- 'LocalConfiguration'
- 'LocalLifecycleOwner'
などなど