首页 > 解决方案 > 将元素添加到列表

问题描述

我对 Flutter/Dart 中列表的使用感到困惑。

我有一个名为 PostMedia 的模型类:

class PostMedia {
  String media_url;
  bool es_foto;
  bool es_video;
  bool es_youtube;

  PostMedia({this.media_url, this.es_foto, this.es_video, this.es_youtube});

  factory PostMedia.fromJson(Map<String, dynamic> json) => PostMedia(
      media_url: json['media_url'],
      es_foto: json['es_foto'],
      es_video: json['es_video'],
      es_youtube: json['es_youtube']);

  Map<String, dynamic> toJson() => {
        "media_url": media_url,
        "es_foto": es_foto,
        "es_video": es_video,
        "es_youtube": es_youtube
      };
}

在应用程序屏幕上,我正在获取 Firestore 文档。每个文档都有一个名为 post_tiene_fotos 的布尔字段和用于媒体 url 的字符串字段,例如 foto1、foto2、foto3 等:

foto1= "https://mipagina.es/foto1r3424.jpg
foto2= "https://mipagina.es/foto5453535.jpg
foto3= "https://mipagina.es/foto98989.jpg

我将所有 Firestore 文档传递给名为 Post 的类型列表listraFiltrada

然后我想创建一个 PostMedia 列表以在 PageView 小部件上显示媒体文件,该小部件需要 PostMedia 类型的列表来显示媒体文件。

我想将每个 foto1、foto2 和 foto3 url 和媒体类型添加到名为 lista_medios 的列表中,如下所示:

ListView.builder(
                            itemCount: listaFiltrada.length,
                            itemBuilder: (context, index) {
                              bool es_ambassador =
                                  listaFiltrada[index].post_autor_is_ambassador;

                              //ver si el post tiene media
                              bool tiene_media =
                                  listaFiltrada[index].post_tiene_media;
                              
                              bool tiene_fotos =
                                  listaFiltrada[index].post_tiene_fotos;
                              
                              List<PostMedia> lista_medios;
                              lista_medios = [];
                              if (tiene_fotos) {
                                //foto 1
                                var foto1 = listaFiltrada[index].foto_1;
                                //incluimos foto1 en la lista
                                List<PostMedia> lista = [
                                  PostMedia(
                                      media_url: foto1,
                                      es_foto: true,
                                      es_video: false,
                                      es_youtube: false)
                                ];
                                lista_medios.add(lista);

但我收到警告:

The argument type 'List<PostMedia>' can't be assigned to the parameter type 'PostMedia/

获取 foto1 的值,将其转换为 PostMedia 类型的元素,然后如何添加更多元素,如 foto2 和 foto3 的正确方法是什么?

标签: flutterdart

解决方案


您实际上是在以下行中的 lista_medois 中插入 List 而不是 PostMedia:

lista_medios.add(lista);

lista也一样List<PostMedia>

根据您的要求尝试转换List<PostMedia> lista_medios;或选择适当的数据类型。List<List<PostMedia>> lista_medios;


推荐阅读