UI-Pakete können Instanzen anderer UI-Pakete enthalten (auch verschachteln) und unterstützen dynamische Inhalte und Interaktivität auf jeder Ebene. Alle werden automatisch mit dem Relay-Plug-in für Android Studio importiert.
Verschachtelte Instanzen hinzufügen und verschachtelte Parameter verfügbar machen
Paketinstanzen können wie gewohnt in Figma hinzugefügt werden.
Nachdem Sie einem Paket eine verschachtelte Paketinstanz hinzugefügt haben, können Sie Inhalts- und Interaktionsparameter auf Grundlage der verschachtelten Instanzparameter hinzufügen, genau wie die Eigenschaften jeder anderen Ebene:
- Wählen Sie den Layer der gepackten Instanz aus.
- Klicken Sie in der Relay for Figma-Benutzeroberfläche auf +.
- Wählen Sie einen der verschachtelten Paketparameter aus.
Der ausgewählte Parameter oder die ausgewählte Interaktion wird von der übergeordneten Komponente verfügbar gemacht und stellt eine Verbindung zwischen dem verschachtelten Paketparameter und einem neuen Parameter her, der der übergeordneten Komponente hinzugefügt wurde. Im generierten Code kannst du jetzt einen Wert für das übergeordnete Element angeben, der an eine Instanz der Codekomponente des verschachtelten Pakets übergeben wird.
Wenn die verschachtelte Instanz in mehreren Figma-Varianten in der übergeordneten Komponente vorhanden ist, werden Varianteninstanzen in der UI gruppiert, um eine individuelle Konfiguration zu ermöglichen.
Standardmäßig werden verschachtelte Paketinstanzparameter von der übergeordneten Komponente nicht verfügbar gemacht. Stattdessen verwendet der generierte Code den in Figma angegebenen Wert, genau wie normale Parameterüberschreibungen.
Sehen wir uns dieses Beispiel an:
- Das Chip-Paket hat den Textparameter
chip-text
. - Das Beschreibungskartenpaket enthält ein Chip-Paket. Seine Parameter sind:
title
subchip-text
, der den Parameterchip-text
der Chip-Instanz verfügbar machtsub-icon
details
Das Reservierungskarten-Paket enthält ein Beschreibungskartenpaket. Seine Parameter sind:
hero-image
headline
: Damit wird der Parametertitle
der Beschreibungskarteninstanz verfügbar gemacht.reservation-text
, der den Parameterchip-text
der Beschreibungskarteninstanz verfügbar macht.summary
: Damit wird der Parameterdetails
der Beschreibungskarteninstanz verfügbar gemacht.
Beachten Sie, dass sub-icon
der einzige Parameter der Beschreibungskarte ist, der von der Reservierungskarte nicht zur Verfügung gestellt wird. Daher wird für jede Instanz einer Reservierungskarte das standardmäßig auf der Beschreibungskarte enthaltene Symbol verwendet.
So machen Sie einen Parameter einer verschachtelten Komponenteninstanz verfügbar:
- Wählen Sie eine verschachtelte Instanz eines UI-Pakets mit Parametern aus. Sie können die Instanz direkt im Canvas oder im Relay für Figma-Plug-in unter Relay-Instanzen auswählen.
Klicken Sie neben Parameter auf +. Im Menü werden die Parameter der ausgewählten Instanz angezeigt. Wählen Sie einen Parameter aus.
Dadurch wird ein Parameter aus der verschachtelten Instanz verfügbar gemacht. In diesem Beispiel haben wir die Instanz Beschreibungskarte ausgewählt und den Parameter details offengelegt.
Im Bereich auf der rechten Seite des Relay for Figma-Plug-ins können Sie einen anderen Parameter auswählen oder den Parameter umbenennen, um ihn im generierten Code zu ändern. In diesem Beispiel wird der Parameter in summary umbenannt, der sich weiterhin auf den Parameter details aus der verschachtelten Instanz bezieht.
Wenn Sie eine übergeordnete Komponente (in diesem Fall Reservierungskarte) in Android Studio importieren, werden alle verschachtelten Pakete automatisch importiert (in diesem Fall Beschreibungskarte und Chip). Wenn der Code generiert wird, generiert jedes Paket eine eigene zusammensetzbare Funktion.
Der generierte Code für das Beispiel sieht so aus:
Reservierungskarte.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)
...
}
Attribute der verschachtelten Paketinstanz überschreiben
Wenn Sie den Wert einer verschachtelten Instanzeigenschaft in Figma überschreiben, wird der neue Wert nur dann in Compose-Code übersetzt, wenn die verschachtelte Komponente einen Parameter für diese Eigenschaft hinzugefügt hat. Andernfalls wird der neue Wert gelöscht und der ursprüngliche Wert in der verschachtelten Komponente wird im Code verwendet.
Nehmen wir dieses Beispiel. Die Komponente Beschreibungskarte hat eine Instanz der Komponente Chip. Wir haben der Chip-Instanz eine Überschreibung hinzugefügt, indem wir den Text von „Chip Text“ in „Reservierung erforderlich“ geändert haben:
Wenn Chip keinen Parameter für seinen Text hat, wird im generierten Code auf dem Chip der Beschreibungskarte weiterhin "Chiptext" und nicht "Reservierung erforderlich" angezeigt.
@Composable
fun DescriptionCard(
modifier: Modifier = Modifier,
) {
...
Chip(
modifier = modifier
// No parameter available to override the chip's text
)
...
}
@Composable
fun Chip(
modifier: Modifier = Modifier,
) {...}
Wenn Chip einen Parameter für seinen Text hat, z. B. chip-text, ruft DescriptionCard
im generierten Code Chip
mit „Reservierung erforderlich“ als Wert des chipText
-Parameters auf:
@Composable
fun DescriptionCard(
modifier: Modifier = Modifier,
) {
...
Chip(
modifier = modifier,
chipText = "Reservation Required"
)
...
}
@Composable
fun Chip(
modifier: Modifier = Modifier,
chipText: String
) {...}
Wenn die Beschreibungskarte den Parameter Chip's chip-text als subchip-text ausgibt, hat DescriptionCard
im generierten Code den Parameter subchipText
und ruft Chip
mit subchipText
als Wert des chipText
-Parameters auf:
@Composable
fun DescriptionCard(
modifier: Modifier = Modifier,
subchipText: String
) {
...
Chip(
modifier = modifier,
chipText = subchipText
)
...
}
@Composable
fun Chip(
modifier: Modifier = Modifier,
chipText: String
) {...}
Da „Reservierung erforderlich“ jetzt der Wert eines Parameters ist, wird dieser jetzt im generierten Code nur in der Vorschau von „DescriptionCard“ angezeigt.
@Preview
@Composable
private fun DescriptionCardPreview() {
MaterialTheme {
RelayContainer {
DescriptionCard(
subchipText = "Reservation Required",
modifier = Modifier.rowWeight(1.0f).columnWeight(1.0f)
)
}
}
}
Einschränkungen
- Eine verschachtelte Komponente mit denselben Varianteneigenschaften wie die übergeordnete Komponente kann nicht kompiliert werden.
- Durch das Aktualisieren von Ressourcen außerhalb von UI-Paketen wird kein neuer Build erzwungen
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Zuordnen von Komponenten zu vorhandenem Code
- Inhaltsparameter
- Grundlagen zum Verfassen von Layouts