el tipo 'List<dynamic>' no es un subtipo del tipo 'List<Widget>'

Resuelto Arash asked hace 54 años • 11 respuestas

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í?

Arash avatar Jan 01 '70 08:01 Arash
Aceptado

El problema aquí es que la inferencia de tipos falla de forma inesperada. La solución es proporcionar un argumento de tipo al mapmé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 childrenes List<Widget>, esa información no regresa hacia la mapinvocación. Esto podría deberse a que mapva seguido de toListy a que no hay forma de escribir y anotar el retorno de un cierre.

Jonah Williams avatar Apr 02 '2018 00:04 Jonah Williams

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);
rahulrvp avatar Sep 05 '2021 17:09 rahulrvp