Kleine Listen für Flutter
Listen für Flutter
In diesem Post werde ich mir das ListView(...) Widget von Flutter anschauen.
Daten werden häufig in Form einer Liste dargestellt. In diesem Blog hatten wir schon das Column Widget(...) und das Row Widget(...) im Einsatz.
Du weißt wahrscheinlich schon, das Du mit dem Column Widget Inhalte in der vertikalen Ebene anordnen kannst, während das Row Widget, das gleiche auf der horizontalen Ebene vornimmt.
Sobald Du an den Einsatz eines dieser Widgets denkst, sollte immer die Frage beantwortet sein, ob dein Inhalt die Grenzen des Bildschirms in der entsprechenden Richtung überschreiten wird. Abhängig von der Antwort ergeben sich andere Problemstellungen.
ListView ist etwas für bequeme
Der Zweck eines Frameworks wie Flutter ist es Dinge einfacher zu machen. So kann man mit dem Column und Row Widget vieles, was mit dem ListView Widget möglich ist, auch ohne dieses erreichen. Man sollte sich aber immer die Frage stellen, ob sich der Aufwand lohnt.
Um das Widget zu testen benutze ich folgenden Code:
import 'package:flutter/material.dart';
void main(){
runApp(const MeineApp());
}
class MeineApp extends StatelessWidget {
const MeineApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: MeineHomePage(),
);
}
}
class MeineHomePage extends StatelessWidget {
const MeineHomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('List View Demo'),
),
body: erzeugeListe() ,
);
}
}
Widget erzeugeListe(){
var liste = ListView(
children: const [
ListTile(
leading: Icon(Icons.access_alarm),
title: Text('Alarm !!'),
subtitle: Text('Der Alarm ist gesetzt'),
trailing: Icon(Icons.account_box),
)
],
);
return liste;
}
Widget erzeugeListe(){
var liste = ListView(
children: const [
ListTile(
leading: Icon(Icons.access_alarm),
title: Text('Alarm !!'),
subtitle: Text('Der Alarm ist gesetzt'),
trailing: Icon(Icons.account_box),
),
ListTile(
leading: CircleAvatar(
backgroundImage: AssetImage('lib/bilder/officeWorker.png'),
),
title: Text('Alarm !!'),
subtitle: Text('Der Alarm ist gesetzt'),
trailing: Icon(Icons.account_box),
)
],
);
return liste;
}
Variante von ListView
Widget erzeugeListe2(){
var liste = ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
Container(
width: 160.0,
color: Colors.red,
),
Container(
width: 160.0,
color: Colors.blue,
),
Container(
width: 160.0,
color: Colors.green,
),
Container(
width: 160.0,
color: Colors.yellow,
),
Container(
width: 160.0,
color: Colors.orange,
),
],
);
return liste;
}
Wenn ich die Funktion einfach so in den Code einfügte, würden die Farbbalken die komplette Höhe des Bildschirms einnehmen. Das ist dem Verhalten des Containers geschuldet, der in diesem Beispiel kein child: Eintrag besitzt. Das umgehen wir durch eine kleine Änderung am Hauptcode:
class MeineHomePage extends StatelessWidget {
const MeineHomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('List View Demo'),
),
body: Container(child: erzeugeListe2(),
height: 200.0,) ,
);
}
}
Kommentare
Kommentar veröffentlichen