0
0

Jetpack Composeでバケツリレーをしない方法

Posted at

はじめに

今回は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を使って実装されています
どなたかのお役に立てれば幸いです

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