el tipo 'List<dynamic>' no es un subtipo del tipo 'List<Widget>'
Tengo un fragmento de código que copié del ejemplo de Firestore:
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(),
);
},
);
}
Pero me sale este error
type 'List<dynamic>' is not a subtype of type 'List<Widget>'
¿Qué sale mal aquí?
Aceptado
El problema aquí es que la inferencia de tipos falla de forma inesperada. La solución es proporcionar un argumento de tipo al map
método.
snapshot.data.documents.map<Widget>((document) {
return new ListTile(
title: new Text(document['name']),
subtitle: new Text("Class"),
);
}).toList()
La respuesta más complicada es que si bien el tipo de children
es List<Widget>
, esa información no regresa hacia la map
invocación. Esto podría deberse a que map
va seguido de toList
y a que no hay forma de escribir y anotar el retorno de un cierre.
Tenía una lista de cadenas en Firestore que estaba intentando leer en mi aplicación. Recibí el mismo error cuando intenté convertirlo en Lista de cadenas.
type 'List<dynamic>' is not a subtype of type 'List<Widget>'
Esta solución me ayudó. Échale un vistazo.
var array = document['array']; // array is now List<dynamic>
List<String> strings = List<String>.from(array);