はじめに
今回はJetpackCompose実装時に必要な型やクラスをComponentにバケツリレーをしない方法を紹介していきます
本文
その方法とはCompositionLocalです
まずは準備からです
private val MyLocalColor: ProvidableCompositionLocal<Color> = compositionLocalOf<Color> {
error("No current color")
}
ラムダ内はデフォルト値で値が与えられる前に取得しようとすると呼ばれます。
値を適用するには下記のようにします
CompositionLocalProvider(MyLocalColor provides Color.Black) {
MyApp()
}
ラムダ内は使用したいComposable関数を定義します。
これは、子要素に伝播していくので基本的には該当Moduleや該当パッケージの上部要素に対して設定しておけば問題ないです。
滅多に変わらない値はstaticCompositionLocalOf()で生成するのをおすすめします。
最後に
普段何気なく使ってるLocalContext.currentなどはまさに今回紹介したCompositionLocalを使って実装されています
どなたかのお役に立てれば幸いです