ネストされたパッケージ インスタンス

ネストされた UI パッケージ
インスタンス

UI パッケージには、他の UI パッケージのインスタンスを含める(「ネスト」)でき、 動的コンテンツとインタラクティビティを、レベルごとに自動的に Relay for Android Studio プラグインを使用します

ネストされたインスタンスの追加とネストされたパラメータの公開

パッケージ インスタンスは、通常の方法でコンポーネント インスタンスを追加する場合と同様に Figma

ネストされたパッケージ インスタンスをパッケージに追加すると、コンテンツと ネストされたインスタンス パラメータに基づいて 次のプロパティを使用します。

  • パッケージ化されたインスタンス レイヤを選択します。
  • [Relay for Figma UI] で [+] 追加パラメータをクリックします。
  • ネストされたパッケージ パラメータのいずれかを選択します。

選択したパラメータまたは操作が親コンポーネントによって公開され、ネストされたパッケージ パラメータと親コンポーネントに追加された新しいパラメータの間の接続を形成します。生成されたコードでは、作成したコードを 値が親に追加され、ネストされたフィールドのインスタンスに コード コンポーネントを指定します。

ネストされたインスタンスが親の複数の Figma バリアントに存在する場合 UI はバリアント インスタンスをグループ化して個別の構成を有効にします。

インスタンスのグループ化
パターン

デフォルトでは、ネストされたパッケージ インスタンス パラメータは親コンポーネントによって公開されません。代わりに、生成されるコードは、通常のパラメータのオーバーライドと同様に、Figma で指定した値を使用します。

ネストされたインスタンス パラメータを
親

次の例を見てみましょう。

  • Chip パッケージには、テキスト パラメータ chip-text が 1 つあります。
  • Description Card パッケージには、チップ パッケージが含まれます。パラメータは次のとおりです。
    • title
    • Chip インスタンスの chip-text パラメータを公開する subchip-text
    • sub-icon
    • details
  • Reservation Card パッケージには、Description Card パッケージが含まれています。パラメータは次のとおりです。

    • hero-image
    • headline は、説明カード インスタンスの title を公開します。 パラメータを指定します。

    • reservation-text は、Description Card インスタンスの chip-text パラメータ。

    • summary は、説明カード インスタンスの details を公開します。 パラメータを指定します。

Description Card の唯一のパラメータである sub-icon は、Reservation Card により公開されません。そのため、Reservation Card のすべてのインスタンスが、Description Card がデフォルトで提供するアイコンを使用します。

ネストされたコンポーネント インスタンスのパラメータを公開するには:

  1. パラメータを持つ UI パッケージのネストされたインスタンスを選択します。インスタンスは、キャンバスで直接選択するか、Relay for Figma プラグインの [Relay instances] で選択できます。
  2. [Parameters] の横にある [+] をクリックします。選択したインスタンスのパラメータがメニューに表示されます。パラメータを選択します。

    これにより、ネストされたインスタンスからパラメータが公開されます。この例では、 Description Card インスタンスを選択し、詳細を公開しました。 パラメータを指定します。

    Description の details パラメータの公開
カード

  3. Relay for Figma プラグインの右側にあるペインで、 パラメータを変更するか、パラメータ名を変更して 生成されます。この例では、パラメータ名を summary: 引き続き、ネストされた details パラメータを参照します 構成されます

    details パラメータの名前を
概要

親コンポーネント(この場合は予約カード)を Android Studio では、ネストされたパッケージがすべて自動的にインポートされます(この場合は、 説明カードチップ)。コードが生成されると、各パッケージは独自のコンポーズ可能な関数を生成します。

UI パッケージと生成済み
コード

この例で生成されるコードは次のようになります。

ReservationCard.kt

..
import com.example.hellofigma.descriptioncard.DescriptionCard
...

@Composable
fun ReservationCard(
    modifier: Modifier = Modifier,
    heroImage: Painter,
    headline: String,
    summary: String,
    reservationText: String
) {
    ...
    DescriptionCard(
        title = headline,
        details = summary,
        subchipText = reservationText,
        subIcon = painterResource(R.drawable.reservation_card_bookmark_icon),
        modifier = modifier
    )
    ...
}

DescriptionCard.kt

...
import com.example.hellofigma.chip.Chip
...
@Composable
fun DescriptionCard(
    modifier: Modifier = Modifier,
    title: String,
    details: String,
    subchipText: String,
    subIcon: Painter
) {
   ...
   Chip(chipText = subchipText)
   ...
}

ネストされたパッケージ インスタンスのプロパティのオーバーライド

Figma でネストされたインスタンス プロパティの値をオーバーライドすると、 ネストされたコンポーネントにパラメータが追加された場合にのみ、Compose コードで変換される そのプロパティを選択します。それ以外の場合、新しい値は破棄され、元の値は 使用されることを認識します。

次の例を考えてみましょう。Description Card コンポーネントには、Chip コンポーネント インスタンスがあります。次のように変更することで、Chip インスタンスにオーバーライドを追加しました。 [Chip Text] から抽出したテキストを「予約が必要」に変更:

[Description](説明)欄の Chip component インスタンス
カード

Chip にテキストのパラメータがない場合、生成されるコードでは、 説明カードのチップに「予約が必要」ではなく、「チップテキスト」が引き続き表示されます。

@Composable
fun DescriptionCard(
    modifier: Modifier = Modifier,
) {
    ...
    Chip(
        modifier = modifier
        // No parameter available to override the chip's text
    )
    ...
}

@Composable
fun Chip(
    modifier: Modifier = Modifier,
) {...}

Chip にテキストのパラメータ(chip-text など)がある場合、 生成されたコードの場合、DescriptionCard が「予約が必要」で Chip を呼び出します。 chipText パラメータの値:

@Composable
fun DescriptionCard(
    modifier: Modifier = Modifier,
) {
    ...
    Chip(
        modifier = modifier,
        chipText = "Reservation Required"
    )
    ...
}

@Composable
fun Chip(
    modifier: Modifier = Modifier,
    chipText: String
) {...}

Description CardChip's Chip-text パラメータが次のように公開されている場合 subchip-text です。生成されたコードでは、DescriptionCard には subchipText があります。 パラメータを追加し、chipText の値として subchipText を指定して Chip を呼び出します。 parameter:

@Composable
fun DescriptionCard(
    modifier: Modifier = Modifier,
    subchipText: String
) {
    ...
    Chip(
        modifier = modifier,
        chipText = subchipText
    )
    ...
}

@Composable
fun Chip(
    modifier: Modifier = Modifier,
    chipText: String
) {...}

また 「予約が必要」というラベルがパラメータの値です。つまり、 DescriptionCard のプレビューにのみ、生成されたコードで表示されます。

@Preview
@Composable
private fun DescriptionCardPreview() {
    MaterialTheme {
        RelayContainer {
            DescriptionCard(
                subchipText = "Reservation Required",
                modifier = Modifier.rowWeight(1.0f).columnWeight(1.0f)
            )
        }
    }
}

制限事項