如何将 Firestore 文档数据转换为类

2024-06-19

在 Firestore 中,有一些文档包含“名称”、“大陆”等字段及其字符串值。我在主 UI 代码中使用 FutureBuilder,并调用getData()功能。

这是我的代码

class DatabaseService {

  final locationCollection = FirebaseFirestore.instance.collection("location");

  Future<List<HomePageModel>> getData() async {

    List<HomePageModel> listData = [];

    await locationCollection.get().then((QuerySnapshot querySnapshot){
      querySnapshot.docs.forEach((doc) {
        HomePageModel(
          docId: doc.id,
          continent: doc['continent'],
          name: doc['name']
        );
      });
    });
    print("this is listData $listData");
    return listData;
  }

}

这是控制台的样子:

I/flutter ( 430): this is listData []

这是 HomePageModel 类

class HomePageModel {

  String? name;
  String? docId;
  String? continent;
  HomePageModel({this.docId, this.name, this.continent});
}

我不知道如何将从 Firestore 检索到的这些文档数据模型放入listData这就是为什么在控制台中listData没有任何数据。 谢谢 :)


Param B.

我觉得problem在这儿。

    await locationCollection.get().then((QuerySnapshot querySnapshot){
      querySnapshot.docs.forEach((doc) {
        HomePageModel(
          docId: doc.id,
          continent: doc['continent'],
          name: doc['name']
        );
      });
    });

第一个问题是您没有创建新的对象实例。第二个是您没有将新对象实例添加到列表中。

我没有测试代码,但我认为这会起作用。

class DatabaseService {

  final locationCollection = FirebaseFirestore.instance.collection("location");

  Future<List<HomePageModel>> getData() async {

    List<HomePageModel> listData = [];

    await locationCollection.get().then((QuerySnapshot querySnapshot){
      querySnapshot.docs.forEach((doc) {
        HomePageModel homepagemodel = new HomePageModel( // the first issue
          docId: doc.id,
          continent: doc['continent'],
          name: doc['name']
        );
        listData.add(homepagemodel); // the second issue
      });
    });
    return listData;
  }

}

还有一件事。我真的不知道使用之间有什么区别{ } and ?在课堂上,但我从未使用过它。我开设了这样的课程。但我认为你的课也有效。

class HomePageModel {
  String name;
  String docId;
  String continent;
  
  HomePageModel(this.docId, this.name, this.continent);
}

另一件事是,打印不适用于项目列表。例如,您需要使用for loop像这样。

for (var i = 0; i < listData.length; i++) {
   print("Loaded data: " + listData[i].name);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Firestore 文档数据转换为类 的相关文章

随机推荐

  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • ActionBar 下拉微调器项目默认为第一项

    我试图设置默认情况下需要在微调器中选择的项目的索引 但它始终默认为 0 第一项 actionBar setDisplayShowTitleEnabled false actionBar setNavigationMode ActionBar
  • auto、decltype(auto) 和尾随返回类型

    之间有区别吗 template
  • 使用 Swift 将自定义字体添加到 macOS 应用程序

    我遵循了一堆教程 但它不起作用 我只是想向 macOS 应用程序添加自定义字体 我基本上尝试过 添加了 ttf字体文件到我的项目 目标会员资格已设置 我还确保使用复制文件Copy Files within Bundle Phases 编译后
  • 解释 System.Diagnostics.CodeAnalysis.SuppressMessage

    我在某些应用程序中有这种代码 来自微软 assembly System Diagnostics CodeAnalysis SuppressMessage Microsoft Naming CA1702 CompoundWordsShould
  • 如何从 .bat 运行 .vbs

    创建了一个广泛的批处理脚本程序来处理一些自动文件管理和打印 我需要调用一个 vbs 文件来执行它的 sendkeys 操作 有没有办法在不冻结程序的情况下完成此任务 我试过了START WAIT my vbs并且脚本在进入 vbs 时冻结
  • Visual Studio 中的项目不可信?

    打开最近下载的项目时 Visual Studio 2013 会简短警告您仅打开来自可靠来源的项目 开设项目有哪些风险 项目在编译之前会对您的系统造成任何损害吗 可能会造成什么损害 在实际从 不可信 来源打开项目之前 您应该注意哪些指标 不是
  • 在 aurelia 中使用路由器时如何设置/读取查询字符串?

    使用 aurelia io 框架路由器时 读取和设置查询字符串的首选方法是什么 例如 在网址中 http www myapp com myroute1 s mystate 如何读取和设置 s mystateurl 的一部分 让 aureli
  • 在分配滚动侦听器之前更新滚动顶部会触发滚动事件

    我正在更新scrollTop在我开始监听滚动事件之前的元素 但是 即使添加了滚动事件 也会触发滚动事件after the scrollTop已更新 我注意到如果我把 onscroll分配在一个setTimeout 1 它工作得很好 另请注意
  • Python 和 C# 之间的 IPC

    我想在 Windows 中的 Python 和 C 应用程序之间传递数据 我希望通道是双向的 事实上 我想将一个包含我用 C SharpPcap 捕获的网络数据包数据的结构传递给 Python 应用程序 然后将修改后的数据包发送回 C 程序
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 为什么 Android 服务在测试时不是单例的?

    当运行大量测试套件时 我注意到我的一个 Android 服务不再是单例的 Android 服务应该是单例的 但是当使用 ServiceTestCase 时 我的引用计数超过 1 在 onCreate 中递增 在 onDestroy 中递减
  • Amazon SNS 仪表板中创建平台应用程序的选项在哪里?

    我在这个页面向 AWS 注册您的移动应用程序 https docs aws amazon com sns latest dg mobile push send register html第一个子主题的第 1 项 标题为 向 AWS 注册您的
  • 围绕二维坐标系中的特定点缩放

    Below is an image my coordinate system 我想做的是 我想开始围绕画布中的特定点进行缩放 缩放工作正常 但我的问题是我不知道如何计算缩放时移动画布的量 请注意 我我没有使用canvas scale 我只是
  • 可以使用表通配符创建 sql 查询吗?

    这可能是一个简单的问题 但我无法在网上找到解决方案 任何帮助将不胜感激 我正在尝试在 PHP 中创建一个 SQL 查询 并希望以某种方式将通配符应用于 TABLE 过滤器 可能是这样的 select from table 但是 到目前为止我
  • Raku mixin 如何与运算符重载配合使用?

    我可以使用一些帮助来确定是否可以通过重载数学运算符来与 mixin 一起使用does or but 以避免下面的歧义错误 该模块 unit module Physics Error role Error is export has Real
  • Microsoft.WebApplication.targets

    当我将服务器签入构建服务器 使用 TFS 时遇到问题 但由于某种原因 返回下一个错误 Exception Message MSBuild error 1 has ended this build You can find more spec
  • Bash 实例未嵌套在 Dockerfile `RUN` 中

    嵌套 bash 实例会递增 SLVL 环境变量 http tldp org LDP abs html internalvariables html http tldp org LDP abs html internalvariables h
  • 如何将 Firestore 文档数据转换为类

    在 Firestore 中 有一些文档包含 名称 大陆 等字段及其字符串值 我在主 UI 代码中使用 FutureBuilder 并调用getData 功能 这是我的代码 class DatabaseService final locati