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

Flutter: Kompakte Dialoge und Button-Gruppen mit mainAxisSize

Ahmet Balaman
FluttermainAxisSizeRowColumnDialogLayout

mainAxisSize steuert, wie viel Platz eine Row oder Column entlang ihrer Hauptachse einnimmt. Besonders nützlich ist das, wenn Sie kompakte, aufgeräumte Layouts für Dialoge, Button-Gruppen und kleine Karten möchten.

Live-Demo

Sie können das Verhalten von mainAxisSize im interaktiven Beispiel unten ausprobieren:

💡 Falls sich das Beispiel nicht öffnet, klicken Sie auf den Link DartPad, um es in einem neuen Tab auszuführen.

Warum kompakte Layouts wichtig sind

Manchmal geht es nicht darum, jedes verfügbare Pixel zu füllen. In Dialogen, kleinen Bedienelementgruppen und Symbolzeilen wirkt ein engeres Layout bewusster gestaltet und ist leichter zu erfassen.

Dieses Thema passt außerdem zu Suchanfragen wie „flutter mainAxisSize“, „kompakte Row Column“ und „flutter Dialog Layout“.

mainAxisSize.max im Vergleich zu mainAxisSize.min

  • MainAxisSize.max: Nutzt den gesamten verfügbaren Platz.
  • MainAxisSize.min: Nutzt nur den Platz, den der Inhalt benötigt.
Row(
  mainAxisSize: MainAxisSize.min,
  children: const [
    Icon(Icons.star),
    SizedBox(width: 8),
    Text('Compact Row'),
  ],
)

Warum das bei Dialogen gut funktioniert

Dialoge wirken oft besser, wenn sie sich nicht unnötig ausdehnen. mainAxisSize: MainAxisSize.min hält den Inhalt kompakt und ausgewogen.

AlertDialog(
  content: Column(
    mainAxisSize: MainAxisSize.min,
    children: const [
      Icon(Icons.warning, size: 48, color: Colors.orange),
      SizedBox(height: 16),
      Text('Warning message'),
    ],
  ),
)

Einsatz in Button-Gruppen

Kleine Werkzeugleisten oder Button-Gruppen profitieren häufig von Row(mainAxisSize: MainAxisSize.min).

Row(
  mainAxisSize: MainAxisSize.min,
  children: [
    IconButton(onPressed: () {}, icon: const Icon(Icons.remove)),
    const Text('0'),
    IconButton(onPressed: () {}, icon: const Icon(Icons.add)),
  ],
)

Beispiel: kompakte Karte

Card(
  child: Padding(
    padding: const EdgeInsets.all(16),
    child: Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.start,
      children: const [
        Text('Title'),
        SizedBox(height: 8),
        Text('Short description'),
      ],
    ),
  ),
)

Häufige Fehler

  • MainAxisSize.min standardmäßig überall verwenden
  • min in einem Layout wählen, das eigentlich die volle Breite oder Höhe braucht
  • Falsch einschätzen, wie sich mainAxisAlignment bei weniger Platz verhält
  • Annehmen, dass sich Row und Column auf beiden Achsen gleich verhalten

Der Zusammenhang mit mainAxisAlignment

Bei mainAxisSize.min bleibt weniger zusätzlicher Raum zum Verteilen, daher wirkt mainAxisAlignment oft eingeschränkter und dadurch vorhersehbarer.

Häufig gestellte Fragen

Warum ist mainAxisSize.min in Dialogen so beliebt?

Weil es den Dialoginhalt kompakt hält und natürlicher wirken lässt.

Wann sollte ich mainAxisSize.max verwenden?

Wenn das Layout den gesamten verfügbaren Platz entlang der Hauptachse einnehmen soll.

Verhalten sich Row und Column gleich?

Im Prinzip ja, aber Row wirkt horizontal und Column vertikal.

Zusammenfassung

mainAxisSize ist eine der einfachsten Möglichkeiten, den Platz in Flutter-Layouts zu steuern. An den richtigen Stellen eingesetzt verbessert es kompakte Dialoge, Button-Gruppen und Kartenstrukturen und hält die Oberfläche aufgeräumt.

Kommentare