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

Flutter: Drawer-Widget und Seitenmenü

Ahmet Balaman
FlutterDrawerNavigationWidgetUIMenu

Drawer ist ein Seitenmenü, mit dem mehrere Seiten auf demselben Bildschirm erreichbar werden. Es öffnet und schließt sich reaktionsschnell per Fingergeste und lässt sich auch mit dem Zurück-Button schließen.

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

Scaffold(
  appBar: AppBar(title: Text('Drawer Example')),
  drawer: Drawer(
    child: ListView(
      padding: EdgeInsets.zero,
      children: [
        DrawerHeader(
          decoration: BoxDecoration(color: Colors.blue),
          child: Text('Menu Title'),
        ),
        ListTile(
          leading: Icon(Icons.home),
          title: Text('Home'),
          onTap: () {
            Navigator.pop(context);
          },
        ),
        ListTile(
          leading: Icon(Icons.settings),
          title: Text('Settings'),
          onTap: () {
            Navigator.pop(context);
          },
        ),
      ],
    ),
  ),
  body: Center(child: Text('Content')),
)

DrawerHeader

Der Kopfbereich am oberen Rand des Drawers:

DrawerHeader(
  decoration: BoxDecoration(
    color: Colors.blue,
    image: DecorationImage(
      image: NetworkImage('https://example.com/bg.jpg'),
      fit: BoxFit.cover,
    ),
  ),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      CircleAvatar(
        radius: 30,
        backgroundImage: NetworkImage('https://example.com/avatar.jpg'),
      ),
      SizedBox(height: 10),
      Text('Username', style: TextStyle(color: Colors.white)),
      Text('[email protected]', style: TextStyle(color: Colors.white70)),
    ],
  ),
)

UserAccountsDrawerHeader

Fertiges Widget für Benutzerinformationen:

UserAccountsDrawerHeader(
  accountName: Text('Ahmet Balaman'),
  accountEmail: Text('[email protected]'),
  currentAccountPicture: CircleAvatar(
    backgroundImage: NetworkImage('https://example.com/avatar.jpg'),
  ),
  decoration: BoxDecoration(color: Colors.blue),
  otherAccountsPictures: [
    CircleAvatar(child: Text('AB')),
  ],
)

Programmatisch öffnen und schließen

final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

Scaffold(
  key: _scaffoldKey,
  drawer: Drawer(...),
  body: ElevatedButton(
    onPressed: () {
      _scaffoldKey.currentState?.openDrawer();
    },
    child: Text('Open Drawer'),
  ),
)

// To close
Navigator.pop(context);
// or
_scaffoldKey.currentState?.closeDrawer();

EndDrawer (rechte Seite)

Scaffold(
  endDrawer: Drawer(
    child: ListView(...),
  ),
  appBar: AppBar(
    actions: [
      IconButton(
        icon: Icon(Icons.menu),
        onPressed: () {
          _scaffoldKey.currentState?.openEndDrawer();
        },
      ),
    ],
  ),
)

Wichtige Eigenschaften

Eigenschaft Beschreibung
drawer Drawer auf der linken Seite
endDrawer Drawer auf der rechten Seite
drawerScrimColor Farbe der Hintergrundabdunklung
drawerEdgeDragWidth Empfindlichkeit der Wischgeste
drawerEnableOpenDragGesture Öffnen per Wischgeste aktivieren/deaktivieren

Breite des Drawers

Drawer(
  width: 250, // Custom width
  child: ...
)

Zusammenfassung

  • Drawer: Seitenmenü links
  • EndDrawer: Seitenmenü rechts
  • DrawerHeader: Kopfbereich oben
  • UserAccountsDrawerHeader: Für Benutzerinformationen
  • Navigator.pop(): Schließt den Drawer

Drawer eignet sich ideal, um in Ihrer App umfangreiche Navigationsmöglichkeiten anzubieten.

Kommentare