Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

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.

and factory.incAdvent Calendar 2022

Day 3

【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

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

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?