İçeriğe geç / Skip to content / Zum Inhalt
Ahmet Balaman LogoAhmet Balaman

Flutter: PopupMenuButton verwenden und Menüstrukturen

Ahmet Balaman
FlutterPopupMenuMenuWidgetUINavigation

PopupMenuButton ist ein Menü, das Nutzern die Bedienung erleichtert und erst durch eine Aktion sichtbar wird. Menüs bestehen aus Einträgen, und jeder Eintrag muss einen Wert besitzen. Andernfalls können wir das Klickereignis nicht auswerten.

Live-Demo

Sie können dieses Widget im interaktiven Beispiel unten ausprobieren:

💡 Falls das Beispiel oben nicht lädt, klicken Sie auf DartPad, um es in einem neuen Tab auszuführen.

Grundlegende Verwendung

PopupMenuButton<String>(
  onSelected: (String value) {
    print('Selected: $value');
  },
  itemBuilder: (BuildContext context) => [
    PopupMenuItem<String>(
      value: 'edit',
      child: Text('Edit'),
    ),
    PopupMenuItem<String>(
      value: 'delete',
      child: Text('Delete'),
    ),
  ],
)

Verwendung mit Enum

Für Typsicherheit empfiehlt sich der Einsatz eines Enums:

enum MenuAction { edit, delete, share }

PopupMenuButton<MenuAction>(
  onSelected: (MenuAction action) {
    switch (action) {
      case MenuAction.edit:
        // Edit operation
        break;
      case MenuAction.delete:
        // Delete operation
        break;
      case MenuAction.share:
        // Share operation
        break;
    }
  },
  itemBuilder: (context) => [
    PopupMenuItem(value: MenuAction.edit, child: Text('Edit')),
    PopupMenuItem(value: MenuAction.delete, child: Text('Delete')),
    PopupMenuItem(value: MenuAction.share, child: Text('Share')),
  ],
)

Menüeinträge mit Symbolen

PopupMenuItem<String>(
  value: 'settings',
  child: Row(
    children: [
      Icon(Icons.settings),
      SizedBox(width: 10),
      Text('Settings'),
    ],
  ),
)

PopupMenuDivider

So fügen Sie eine Trennlinie zwischen Menüeinträgen ein:

itemBuilder: (context) => [
  PopupMenuItem(value: 'edit', child: Text('Edit')),
  PopupMenuItem(value: 'copy', child: Text('Copy')),
  PopupMenuDivider(), // Separator line
  PopupMenuItem(value: 'delete', child: Text('Delete')),
]

Wichtige Eigenschaften

Eigenschaft Beschreibung
onSelected Wird aufgerufen, wenn ein Eintrag gewählt wird
itemBuilder Erzeugt die Menüeinträge
icon Symbol des Menü-Buttons
child Eigenes Button-Widget
offset Versatz der Menüposition
shape Form des Menüs
color Hintergrundfarbe des Menüs
enabled Menü aktiv oder inaktiv

Verwendung mit eigenem Button

PopupMenuButton<String>(
  child: Container(
    padding: EdgeInsets.all(12),
    decoration: BoxDecoration(
      color: Colors.blue,
      borderRadius: BorderRadius.circular(8),
    ),
    child: Row(
      children: [
        Text('Menu', style: TextStyle(color: Colors.white)),
        Icon(Icons.arrow_drop_down, color: Colors.white),
      ],
    ),
  ),
  itemBuilder: (context) => [...],
)

Zusammenfassung

  • PopupMenuButton: Erzeugt ein Dropdown-Menü
  • PopupMenuItem: Steht für einen Menüeintrag
  • value: Eindeutiger Wert je Eintrag (erforderlich)
  • onSelected: Wird bei einer Auswahl ausgelöst
  • PopupMenuDivider: Trennlinie zwischen Einträgen

PopupMenuButton eignet sich ideal, um Nutzern kontextbezogene Optionen anzubieten.

Kommentare