将元素添加到列表

Posted

技术标签:

【中文标题】将元素添加到列表【英文标题】:Adding elements to List 【发布时间】:2021-11-19 13:21:20 【问题描述】:

我对在 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 文档传递给名为 listraFiltrada 的 Post 类型列表。

然后我想创建一个 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这样的元素?

【问题讨论】:

【参考方案1】:

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

lista_medios.add(lista);

因为lista 也是List&lt;PostMedia&gt;

要么尝试将List&lt;PostMedia&gt; lista_medios; 转换为List&lt;List&lt;PostMedia&gt;&gt; lista_medios;,要么根据您的要求选择合适的数据类型。

【讨论】:

成功了,谢谢

以上是关于将元素添加到列表的主要内容,如果未能解决你的问题,请参考以下文章

在列表中添加元素

如何将所有列表元素添加到另一个列表中[重复]

将通用列表的元素添加到字典

有啥办法可以将元素添加到列表中,如图所示?

如何将每个 x 个元素拆分一个列表并将这些 x 个元素添加到一个新列表中?

如何将元素添加到列表中?