Ordne mehrere Widgets auf dem Bildschirm an, mit Spalten, Zeilen, Abständen und Platzverteilung.
Diese Lektion in Kodokon öffnenEin echter Bildschirm zeigt selten ein einziges Widget: Du musst sie anordnen. Das ist die Aufgabe der Layout-Widgets. Column stapelt seine Kinder vertikal, von oben nach unten; Row reiht sie horizontal auf, von links nach rechts. Da sie mehrere Kinder akzeptieren, heißt der Parameter nicht mehr child, sondern children, und er erhält eine Liste: Widgets zwischen eckigen Klammern [ ], getrennt durch Kommas.
import 'package:flutter/material.dart';
Widget buildProfile() {
return const Column(
children: [
Icon(Icons.person, size: 48),
Text("Sonia Ben Ali"),
Text("Flutter Developer"),
],
);
}Row funktioniert genau gleich, nur horizontal. Seine Hauptachse ist die Breite: Der Parameter mainAxisAlignment bestimmt, wie die Kinder entlang dieser Achse verteilt werden (center, um sie in der Mitte zu gruppieren, spaceBetween, um sie so weit wie möglich auseinanderzuziehen...). Und um einfach einen leeren Abstand zwischen zwei Widgets einzuschieben, verwendest du SizedBox: eine unsichtbare Kiste, deren Breite (width) oder Höhe (height) du festlegst.
import 'package:flutter/material.dart';
Widget buildRating() {
return const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.star, color: Colors.amber),
SizedBox(width: 8),
Text("4.8 out of 5"),
],
);
}Padding fügt Platz rund um sein Kind hinzu, damit der Inhalt nicht an den Rändern klebt. Die Menge des Platzes wird mit EdgeInsets beschrieben: EdgeInsets.all(16) setzt 16 Pixel auf allen vier Seiten, EdgeInsets.only(left: 8) nur links und EdgeInsets.symmetric(horizontal: 12) gleichzeitig links und rechts.
import 'package:flutter/material.dart';
Widget buildQuote() {
return const Padding(
padding: EdgeInsets.all(16),
child: Text("A text with some room around it"),
);
}Ein letztes Werkzeug: Expanded. Zwischen den Kindern einer Row oder einer Column platziert, fordert es sein Kind auf, den gesamten verbleibenden Platz einzunehmen. Im Beispiel unten behält die graue Kiste ihre 80 Pixel Breite und die petrolfarbene Kiste dehnt sich, um den Rest der Breite zu füllen, egal wie groß der Bildschirm ist.
import 'package:flutter/material.dart';
Widget buildProgress() {
return Row(
children: [
Container(width: 80, height: 40, color: Colors.grey),
Expanded(
child: Container(height: 40, color: Colors.teal),
),
],
);
}