Flutter-Future<List> als List zurück geben?
Heeeeey Leute,
Ich rufe eine Liste aus der Datenbank ab und will daraus eine Liste auf der App visualisieren.
Aber in einer async Funktion kann ich keine liste zurück geben.
Wie bekomme ich die Liste jetzt in meinen build.
Code sieht so aus
void missionEntries()async{
final Future<List>mission=DBManagement().getAll();
List missions=await mission.then((value) => null);
}
@override
Widget build(BuildContext context) {
missionEntries();
return Expanded(
child: Container(
child: ListView.builder(
itemCount: missions.length,
itemBuilder: (context, index) {
return GestureDetector(
onLongPress: ()=>print("Eintrag bearbeiten!"),
onTap: ()=>print("Eintrag einsehen!"),
child: Card(
child: Row(
children: <Widget>[
Expanded(
child: Text(
missions[index]["num"],
textAlign: TextAlign.center,
),
),
Expanded(
child: Text(missions[index]["location"]),
),
Expanded(
child: Text(missions[index]["date"].toString()),
),
Expanded(
child: Text(missions[index]["time"].toString()),
),
Expanded(
child: IconButton(
icon: Icon(Icons.delete),
onPressed: ()=>print("löschen")
)
),
],
),
),
);
}
),
),
);
}
und missionEntries(); müsste eigentlich zu
List missions=missionEntries() werden weil ich die missions liste
ein paar zeilen weiter im ListView.builder brauche.
Hoffe Ihr könnt mir helfen.
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
programmieren, Visual Studio
Die Lösung zu deinem Problem sollte ein FutureBuilder darstellen. Dieser wartet erst auf einen asynchronen Prozess (in dem Fall also deine Datenbankabfrage) und baut das Widget dann, sobald dieser Prozess beendet wurde, zusammen.
return FutureBuilder(
builder: (context, snapshot) {
// ...
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
// ...
}
);
},
future: missionEntries()
);
Ein Artikel, der eine einfache Implementation zeigt und besser erklärt, lässt sich hier finden.