Cómo mapear el retorno de un mapa en dart

Cómo mapear el retorno de un mapa en dart

Intento mapear el retorno de un mapa, pero parece que el primer mapa no devuelve el resultado de la iteración. Estoy un poco confundido aquí.


Pruebo ese código. Simplemente itera la "fila" y devuelve los datos de la iteración:

void main() {
  final Map<String, dynamic> treeData = {
    "title": "test",
    "row": [
      [
        {
          "img":
              "https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg"
        },
        {
          "img":
              "https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg"
        }
      ],
      [
        {
          "img":
              "https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg"
        }
      ]
    ],
  };

var mappedData = treeData['row'].map((data) {
    print("");
    print("!!!!!!!!!!!!!!!!!!!");
    print(data);
    return data;
  }).toList().map((data) {
    print("");
    print("-------------------");
    print(data);
    return data;
  }).toList();
  
  print("");
  print("???????????");
  print(mappedData);
}

El resultado que obtuve no es el que esperaba. Parece que las 2 iteraciones son exactamente lo mismo, como puede ver.

!!!!!!!!!!!!!!!!!!!
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}, {img: https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg}]

!!!!!!!!!!!!!!!!!!!
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}]

-------------------
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}, {img: https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg}]

-------------------
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}]

???????????
[[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}, {img: https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg}], [{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}]]

Esperaría algo así, con la segunda iteración que recorre la segunda matriz y devuelve el valor del objeto.

!!!!!!!!!!!!!!!!!!!
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}, {img: https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg}]

!!!!!!!!!!!!!!!!!!!
[{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}]

-------------------
{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}
{img: https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg}

-------------------
{img: https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg}

¿Hay alguna manera de hacer que funcione de esa manera? ¿Cuál sería la mejor alternativa?

Gracias por sus respuestas.

Mostrar la mejor respuesta

¿Cuál es el resultado deseado?

El verdadero objetivo final es imprimir una lista de Widget que mostrará una imagen y algunas otras informaciones. (Solo una imagen en ese caso)

Revertí tu edición. Las soluciones pertenecen al espacio de respuesta a continuación, no a la pregunta.

Sí, hay una manera de hacer que funcione así:

void main() {
  final Map<String, dynamic> treeData = {
    "title": "test",
    "row": [
      [
        {
          "img":
              "https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg"
        },
        {
          "img":
              "https://cdn.pixabay.com/photo/2015/03/27/13/16/maine-coon-694730_960_720.jpg"
        }
      ],
      [
        {
          "img":
              "https://cdn.pixabay.com/photo/2014/11/30/14/11/cat-551554_960_720.jpg"
        }
      ]
    ],
  };

  var mappedData = treeData['row']
      .map((data) {
        print("");
        print("!!!!!!!!!!!!!!!!!!!");
        print(data);
        return data;
      })
      .toList()
      .map((data) {
        for (var item in data) {
          print("");
          print(item);
        }
        print("-------------------");

        return data;
      })
      .toList();

  print("");
  print("???????????");
  print(mappedData);
}

Básicamente, desea imprimir todos los elementos de la lista que está pasando a esa segunda función. Está obteniendo el mismo resultado de la segunda iteración porque está transformando la salida de la primera iteración en la misma entrada que recibe la función.

Oh, siento que era tarde en la noche y estaba cansado cuando hice la pregunta... Encontré la solución a mi pregunta engañosa...

                Row(children: [
              ...treeData['row']
                  .map((data) => Column(children: [
                        ...data.map((item) => Image.network(
                              item['img'],
                              fit: BoxFit.cover,
                              alignment: Alignment.topCenter,
                            ))
                      ]))
                  .toList()

Eso fue tan simple y fácil... Parece que en algún momento necesitamos dormir chicos (yo) ..><