14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Jetpack Compose】特定の条件のときだけModifierを追加したい

Last updated at Posted at 2022-12-02

はじめに

この記事は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の記事もお楽しみに:santa:

14
1
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
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?