Ich habe ein Code-Snippet, das ich aus dem Firestore-Beispiel kopiert habe:
Widget _buildBody(BuildContext context) {
return new StreamBuilder(
stream: _getEventStream(),
builder: (context, snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((document) {
return new ListTile(
title: new Text(document['name']),
subtitle: new Text("Class"),
);
}).toList(),
);
},
);
}
Aber ich bekomme diesen Fehler
type 'List<dynamic>' is not a subtype of type 'List<Widget>'
Was läuft hier schief?
Lösung des Problems
Das Problem hierbei ist, dass der Typrückschluss auf unerwartete Weise fehlschlägt. Die Lösung besteht darin, der Methode ein Typargument bereitzustellen map
.
snapshot.data.documents.map<Widget>((document) {
return new ListTile(
title: new Text(document['name']),
subtitle: new Text("Class"),
);
}).toList()
Die kompliziertere Antwort ist, dass diese Informationen nicht zum Aufruf zurückfließen, obwohl der Typ von children
ist. Dies kann daran liegen, dass folgt und dass es keine Möglichkeit gibt, die Rückgabe eines Abschlusses mit Anmerkungen zu versehen.List<Widget>
map
map
toList
Keine Kommentare:
Kommentar veröffentlichen