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

Flutter: SingleChildScrollView und ScrollView verwenden

Ahmet Balaman
FlutterScrollViewSingleChildScrollViewListViewScrollingLayout

Die Bildschirmgröße mobiler Geräte ist begrenzt, und Inhalte passen oft nicht auf eine einzige Ansicht. In solchen Fällen muss der Inhalt scrollbar werden. Der einfachste Weg dazu ist in Flutter das Widget SingleChildScrollView.

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.

Was ist SingleChildScrollView?

Es ist ein Kasten, der ein einzelnes Widget (meist eine Column) scrollbar macht.

Grundlegende Verwendung

SingleChildScrollView(
  child: Column(
    children: [
      Container(height: 200, color: Colors.red),
      Container(height: 200, color: Colors.green),
      Container(height: 200, color: Colors.blue),
      Container(height: 200, color: Colors.yellow),
      // More content exceeding screen size...
    ],
  ),
)

Wenn Sie SingleChildScrollView nicht verwenden und der Inhalt über den Bildschirm hinausgeht, erhalten Sie den bekannten Overflow-Fehler mit den „gelb-schwarzen Streifen“.

Horizontales Scrollen

Sie können nicht nur vertikal, sondern auch horizontal scrollen.

SingleChildScrollView(
  scrollDirection: Axis.horizontal,
  child: Row(
    children: [
      Container(width: 150, color: Colors.red),
      Container(width: 150, color: Colors.green),
      Container(width: 150, color: Colors.blue),
    ],
  ),
)

SingleChildScrollView im Vergleich zu ListView

Ein häufiger Fehler ist, für lange Listen eine Column in einer SingleChildScrollView zu verwenden. Das ist nicht performant, weil alle Elemente auf einmal gerendert werden (auch die, die gar nicht sichtbar sind).

  • SingleChildScrollView: Für eine überschaubare Anzahl konkreter Elemente (z. B. eine Formularseite oder ein Einstellungs-Screen).
  • ListView: Für große Mengen oder dynamische Listendaten. Es rendert nur das, was auf dem Bildschirm sichtbar ist (Lazy Loading).

Beispiel für ListView:

ListView.builder(
  itemCount: 100,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text('Item $index'),
    );
  },
)

Scroll Physics

Sie können das Scrollverhalten ändern.

  • BouncingScrollPhysics: Federnder Effekt im iOS-Stil.
  • ClampingScrollPhysics: Am Ende stoppender Effekt im Android-Stil (blaues Leuchten).
SingleChildScrollView(
  physics: BouncingScrollPhysics(),
  child: Column(...)
)

Tastaturproblem und ScrollView

Bei Formularfeldern (TextField) ist SingleChildScrollView entscheidend, damit der Bildschirm beim Einblenden der Tastatur nicht gestaucht wird. Meist umschließt es den gesamten Inhalt, sodass Nutzer bei geöffneter Tastatur nach oben scrollen und die darüberliegenden Felder erreichen können.

Zusammenfassung

  • Verwenden Sie SingleChildScrollView, wenn Ihr Inhalt nicht auf den Bildschirm passt.
  • Sie können die gewünschte Scrollrichtung festlegen (scrollDirection).
  • Wenn Sie Hunderte gleichartiger Elemente (eine Liste) anzeigen, nehmen Sie ListView.
  • Für Formular-Screens ist SingleChildScrollView ideal.

Kommentare