我正在try 显示来自FiRestore的数据列表中的ListView.Builder.我像这样获取和存储我的数据

List filterMangaList = [];
Future<List> getFavMangas() async {
    var value = await firestore.collection("users").doc(user.uid).get();
    final favMangasList = value.data()?["fav_manga"];
    filterMangaList.clear();
    for (var i in favMangasList) {
      final mangas = await FirebaseFirestore.instance
          .collection('mangas')
          .where('title', isEqualTo: i)
          .get();
      final filterManga = mangas.docs.map((doc) => doc.data()).toList();
      filterMangaList.add(filterManga);
    }
    return filterMangaList;
  }

我要提取数据的列表是filterMangaList人,如下所示

[[{total_chapter: 361, pic: https://images.pexels.com/photos/213780/pexels-photo-213780.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500, title: My Hero Academia}], [{total_chapter: 700, pic: https://images.pexels.com/photos/213780/pexels-photo-213780.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500, title: Naruto}]]

我的ListView.Builder如下所示

FutureBuilder(
  future: getFavMangas(),
  builder: (context, AsyncSnapshot future) {
    if (!future.hasData)
      return Container();
    else {
      var filterMangaList = future.data;
      print(filterMangaList);
      return ListView.builder(
        shrinkWrap: true,
        itemCount: filterMangaList.length,
        itemBuilder: (BuildContext context, int index) {
          return Container(
            child: Text(filterMangaList[index]["title"]),
          );
        },
      );
    }
  }),

但我有一个错误:

_TypeError(‘字符串’类型不是‘index’的‘int’类型的子类型)

我想这是因为我有太多的[],但我不知道如何解决这个问题.

推荐答案

实际上,您的代码中少了一个[].

这是您的数据 struct

[
  [{
    total_chapter: 361,
    pic: "https: //images.pexels.com/photos/213780/pexels-photo-213780.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
    title: My Hero Academia
  }],
  [{
    total_chapter: 700,
    pic: "https://images.pexels.com/photos/213780/pexels-photo-213780.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500",
    title: Naruto
  }]
]

所以它是具有属性的数组的array.这是因 for each 查询都有一个结果列表.

要从上面的 struct 中获取数据,您可以执行以下操作:

child: Text(filterMangaList[index][0]["title"]),

但这将只显示每个查询的第一个结果,这可能不是您想要的结果.


要查看所有查询的所有结果,必须将它们添加到平面列表中,而不是嵌套列表中.要做到这一点,简单的方法是:

filterMangaList.addAll(filterManga);

更改后,您的filterMangaList包含所有查询的所有结果的扁平列表,然后您可以将其与原始代码一起显示在ListView中.

Flutter相关问答推荐

Android Studio中的Ffltter&;Couchbase:进程C:/Program Files/Git/bin/bash以非零退出值35结束

什么是dart :这只是dart ?

将记录/元组用作SplayTreeMap中的键

Flutter 日期时间格式

如何处理平台游戏的对象冲突?

未处理的异常:第1行第5列出现错误:无效的媒体类型:应为/&;.从API获取数据时在Flutter中

2023 年如何使用 youtube_explode_dart 包下载 URL?

如何拥有 StreamProvider 的多个侦听器,其中稍后添加的侦听器接收最新数据?

Riverpod 注册多少个 providers

来自服务器的数据未分配给变量

Flutter 中的 Provider 不会在第一次构建 App 时返回

如何删除或隐藏覆盖

Flutter 构建方法使用的是旧版本的变量?

为什么轮播加载图片很慢?

如何将金钱格式化为数以百万计的Flutter 动?

如何防止卡子在底部溢出?

如何在屏幕按钮中排列 row() (我想在按钮中放置屏幕导航图标)

Flutter 用户过滤器

如何在flutter中共享容器和gridview之间的滚动条?

有没有办法帮助我修复类型 null 不是 Map 类型的子类型?