はじめに
この記事はand factory.inc Advent Calendar 2022 2日目の記事です。
昨日は @doihei さんの GitHub Apps + Dangerをやってみる でした。
特定の条件のときだけModifierを追加したい
jetpack compose で開発しているとちょいちょい
- hasRead(既読)のときだけ背景をグレーにしたい
- isRecommend(オススメ)のときだけ文字色を青にしたい
ということをしたいケースがあったりします。
if (hasRead) {
Box(
modifier = Modifier.background(Color.Gray)
){
// 既読用のコンポーザブル
}
} else {
Box(
modifier = Modifier.background(Color.Gray)
){
// 未読用のコンポーザブル
}
}
とかすれば良いのですが『背景しか変わらないんだよな〜。。。』ということがあると思います。
特定条件のときのみModifierが設定できるような拡張を作る
/**
* predicateがtrueの時にactionを付与する拡張メソッド
*
* ```kotlin
* Modifier.applyIf(true) { background(Color.Black) }
* ```
*/
fun Modifier.applyIf(predicate: Boolean, action: Modifier.() -> Modifier): Modifier {
return if (predicate) {
action()
} else this
}
使い方
一番最初に書いたコードを以下のようにリファクタリングできるようになります。
Box(
modifier = Modifier.applyIf(hasRead) { background(Color.Gray) }
) {
// 既読・未読共通のコンポーザブル
}
最後に
拡張関数やスコープ関数を使うとより重複コードを削減できたりコーディングしやすくなったりしますので色々と試したくなりますね。
明日のAdvent Calendarの記事もお楽しみに