type "Liste<dynamique>" n'est pas un sous-type du type " Liste<Widget>'
J'ai un bout de code que j'ai copié à partir Firestore exemple:
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(),
);
},
);
}
Mais j'obtiens cette erreur
type 'List<dynamic>' is not a subtype of type 'List<Widget>'
Ce qui ne va pas ici?
OriginalL'auteur Arash | 2018-04-01
Vous devez vous connecter pour publier un commentaire.
Le problème ici est que l'inférence de type échoue dans une manière inattendue. La solution est de fournir un argument de type à la
map
méthode.Le plus compliqué réponse est que, bien que le type de
children
estList<Widget>
, que l'information ne circule pas en arrière vers lamap
invocation. Ce pourrait être parce quemap
est suivie partoList
et parce qu'il n'existe aucun moyen pour le type d'annoter le retour d'une fermeture.Ce changement est probablement liée à la dynamique de fond aka "floue flèches" - auparavant, il était d'accord pour attribuer une Liste<dynamique> une Liste<X>. Qui a couvert beaucoup de inférence lacunes.
TBH je n'ai pas réussi à reproduire le son bug. Depuis son code est déduit comme une
List<ListTile>
même, sans le spécifier àmap
.Bien que le problème est réglé. Mais il est un peu étrange, je suis nouveau sur dart, donc je ne peux pas vraiment dire que j'ai compris.
J'ai été confronté au même problème (Mais mon scénario était différent). Je pense que ce qui se passe à cause de Dart 2 de type fort. Une fois que j'ai changé la déclaration de la variable à la Liste<Widget> il a commencé à travailler.
OriginalL'auteur Jonah Williams