Flutter 从 Firebase Cloud Firestore 返回完整数组

2023-12-01

9 月 2 日最新编辑:

即使有赏金,我对此也没有太大的兴趣,所以我会尝试问一个更简单、更具体的问题。

因此,我根据下面 Doug 的建议重新组织了数据库,因为我无法在 firebase 中以任何方式引用数组。所以现在我有了一个数组的映射,而不仅仅是数组。就像这样:

ObjectsList  >  CarsMap (Map)
                   - sh899873jsa (Array)
                     0  "Toyota"
                     1  "Supra"
                     2  "1996"
                     3  "$4990"

                   - hasd823j399 (Array)
                     0  "Toyota"
                     1  "Corolla"
                     2  "2014"
                     3  "$11990"

                   - nelaoiwi283 (Array)
                     0  "Ford"
                     1  "Territory"
                     2  "2018"
                     3  "$35000"

但我不知道如何实际使用这个结构,因为我以前从未见过这个。我现在遇到了第一个错误,弗兰克在下面的回答中向我提供了代码,我已将其转换为:

 final DocumentReference documents = await Firestore.instance.collection('ObjectsList');
  DocumentSnapshot snapshot = await documents.get();
  Map<String, dynamic> data = snapshot.data;
  var loadCarItems = [];

  data.forEach((k,v) => {
    values = List<String>.from(v as List<String>),
    print(values),
    if (values[0] == "Toyota") {
      loadCarItems.add(values[0]),
    },
  });

  setState(() {
    CarItemsArray = loadCarItems;
  });

但由于我已更改为 map>array 结构,因此我在这一行收到错误:

data.forEach((k,v) => {
  values = List<String>.from(v as List<String>),

错误是:

Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<String>' in type cast

很明显,我现在需要更改此语法,结构已更改,但我不知道如何更改,并且在网上找不到任何内容。

以往信息:

我正在尝试找到一种从 Firebase 返回整个数组的方法,以便我可以处理其中的数据。

例如,我在数据库中有一个包含数组的文档,如下所示:

ObjectsList  >  sh899873jsa
                   0  "Toyota"
                   1  "Supra"
                   2  "1996"
                   3  "$4990"

                 hasd823j399
                   0  "Toyota"
                   1  "Corolla"
                   2  "2014"
                   3  "$11990"

                  nelaoiwi283
                   0  "Ford"
                   1  "Territory"
                   2  "2018"
                   3  "$35000"

因此,对于每个数组,我在创建时生成了一个随机密钥,这并不重要。我基本上只需要能够将所有数据作为单独的对象返回。例如,理想情况下,我希望能够退回“所有丰田汽车”。这就是这里的最终游戏。

这是我迄今为止根据弗兰克的建议生成的代码,他让我走上了正确的道路。

从构建小部件:

          Container(
            child: StreamBuilder(
              stream: Firestore.instance.collection('cars').document('ObjectsList').snapshots(),
              builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                if (!snapshot.hasData) {
                  return LoadingAnimationBasic();
                }
                if (snapshot.data == null) {
                  return LoadingAnimationBasic();
                } else {
                  return ListView(
                    shrinkWrap: true,
                    children: _buildListCards(snapshot),
                  );
                }
              },
            ),
          ),

_buildListCards 函数经过简化,以便您可以看到它是如何工作的:

_buildStoresList(AsyncSnapshot<DocumentSnapshot> snapshot) {
return snapshot.data.data.values
    .map((doc) => doc[0] == "Toyota" ? GestureDetector(
  child: Container(
    width: MediaQuery.of(context).size.width,
    child: Card(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(0.0),
      ),
      color: Colors.white70,
      elevation: 10,
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(2.0),
            child: ConstrainedBox(
              constraints: BoxConstraints(
                maxWidth: 120,
                minWidth: 120,
                maxHeight: 100,
                minHeight: 100,
              ),
              child: Image.network(
                'some toyota picture URL',
                fit: BoxFit.cover,
              ),
            ),
          ),
          Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Container(
                width: MediaQuery.of(context).size.width * 0.5,
                child: Padding(
                  padding: const EdgeInsets.fromLTRB(10, 10, 0, 0),
                  child: Text(
                    doc[1],
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                      fontSize: 18,
                    ),
                  ),
                ),
              ),
              Container(
                width: MediaQuery.of(context).size.width * 0.5,
                child: Padding(
                  padding: const EdgeInsets.fromLTRB(5, 10, 0, 0),
                  child: Text(
                    doc[2],
                    style: TextStyle(
                      fontSize: 12,
                    ),
                  ),
                ),
              ),
            ],
          ),
          Column(
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.fromLTRB(5, 40, 0, 0),
                child: Text(
                  doc[3],
                  style: TextStyle(
                    fontSize: 14,
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    ),
  ),
  onTap: () {
    futureTapHandlerHere();
  },
) : SizedBox(), )
    .toList();
}

所以现在唯一剩下的就是能够从数据库中编辑/删除这些条目,我认为这必须依赖于创建它们时生成的唯一标识符。我不知道如何在没有标识符的情况下执行此功能,但我不知道如何实际使用它,或从数据库返回它。


Calling snapshot.data()返回给你一个Map<String, dynamic>。您可以循环遍历此映射中的条目,然后获取每个(数组)值的第一个子项。

所以像这样:

List.from(event.snapshot.value as List)

final DocumentReference documents = await Firestore.instance.collection('cars').document('ObjectsList');
DocumentSnapshot snapshot = await documents.get();
Map<String, dynamic> data = snapshot.data();
var cars = [];
data.forEach((k,v) => {
  var values = List<String>.from(v as List<dynamic>);
  cars.add(values[0]);
})

setState(() {
  arrayOfCars = cars
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 从 Firebase Cloud Firestore 返回完整数组 的相关文章

  • 谷歌云功能发送重复通知

    我有一个发送主题通知的 gcf 我从管理 Android 应用程序触发该功能 一切都按预期工作 但突然该函数发送通知两次 有时三次 谷歌云上的函数日志显示该函数已发送一条通知 它只打印一行 定制发送成功 但 Android 应用程序会收到多
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • Flutter 使用 RichText 填空

    我几乎完成了我的应用程序的填空实现 但不幸的是我不断遇到布局问题 然而 当我不断解决问题时 我几乎已经完成了 这是到目前为止的代码 RichText text TextSpan text dummy style TextStyle colo
  • Firebase - 有没有办法查看有多少人安装了该应用程序?

    Parse 支持安装功能 我不确定 firebase 是否也支持 但在 Google 中挖掘了几个小时后 我无法找到有关如何在 Firebase 中查看 计算用户安装的重要信息 有没有办法计算 Firebase 中的用户安装量 或者甚至还有
  • 具有多个 orderBy 的 Android firebase 查询

    我想检索我的 firebase 数据库中所有类型为 福音 的数据 这是我的数据库 DatabaseReference infoRef FirebaseDatabase getInstance geReference child info i
  • Flutter无法从url加载图像

    图片资源服务捕获异常 解析图像编解码器时抛出以下 ImageCodecException 加载网络图像失败 图片网址 https cdn sportmonks com images soccer leagues 5 png https cd
  • Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类(“com.google.firebase.FirebaseApp”的声明

    在我的 Android 应用程序中 编译应用程序时出现错误 我正在最新的 android studio 中工作 并使用 Firebase UI Auth 和 Firebase 数据库 所有版本在应用程序级等级文件中都相同 那么为什么我收到此
  • [flutter]为什么我的列对齐总是居中?

    我声明了连续两列来布局文本和图标 即使我设置了图标的列也始终位于中心mainAxisAlignment with MainAxisAlignment start 这是该卡的代码 import package flutter material
  • 添加 Google Play Services 9.0.0 后 Dex 文件超过 64k

    我按照 Firebase 指南添加 FCM 因此我将以下依赖项添加到我的应用程序 gradle 中 compile com google android gms play services 9 0 0 apply plugin com go
  • 从后台恢复后,Flutter GoogleMap 为空白

    我遇到以下问题 我的 Flutter 应用程序使用 GoogleMap 地图最初加载得很好 但是 如果我将应用程序置于后台并稍后恢复 地图将保持空白 Google 徽标仍然显示 就像未指定 API 密钥时发生的情况一样 我的多边形叠加层也不
  • 使用 EditableText 进行 Flutter

    我正在尝试弄清楚如何在 Flutter 中使用 TextEditor 我有 卡片编辑器 基本上我希望能够处理相当于一段文本的内容 new EditableText autofocus true maxLines null backgroun
  • firebase createUser 无需登录[重复]

    这个问题在这里已经有答案了 我的管理员用户可以创建其他用户 但每次创建用户时 我的管理员用户都会注销 新用户会自动登录 有什么方法可以在不登录的情况下创建用户吗 None
  • 如何设置 Firebase 用户的显示名称?

    根据Firebase网站上的JS Auth文档 它只展示了如何获取 displayName 以及如何更新 displayName 所以我尝试更新它 但这有点不合逻辑 因为你怎么能在不创建某些东西的情况下更新它呢 所以我的问题是 如何设置注册
  • 不使用 BuildContext 预加载图像

    有没有办法在函数中加载 Flutter 中的图像而无需访问 BuildContext Flutter 可以预加载图像precacheImage 需要BuildContext 使用起来不方便 我想加载图像initState StatefulW
  • Flutter:带有嵌套导航的底部导航栏,并在选项卡更改时恢复根页面

    我是 Flutter 开发的新手 我已经阅读了多个教程来了解底部导航栏 我已经尝试过这些教程 但无法达到我的要求 我遵循的教程 https codewithandrea com articles multiple navigators bo
  • dart中解析对象(不支持的操作:无法添加到固定长度列表)

    我有一个用户对象 当用户登录 注册时 该对象保存到云 Firestore 数据库中 因此 当用户登录时 将从数据库中检索用户对象 并且一切正常 直到我尝试对列表 usersProject 执行 添加 操作 Add the new proje
  • 同屏上多个浮动操作按钮显示黑屏

    我尝试在其中一个屏幕上添加两个浮动操作按钮 结果在第一次重新加载应用程序后出现黑屏 Column mainAxisSize MainAxisSize min children
  • NoSuchMethodError:尝试调用非函数,例如 null:'dart.global.firebase.auth'

    Flutter 新手 我怀疑在尝试设置 Firebase Auth 时错过了一些非常简单的事情 一直在网上寻找解决方案 大多数人要求您仔细检查 firebase auth js 是否正确包含在 index html 文件中 这样就完成了 下
  • 向上滚动时固定项目

    所以我有以下屏幕 我正在寻找一种方法 使得当用户向上滚动时 包含进度条和这 4 个数据字段 ItemHeader 的小部件将向上滚动 但搜索容器 SearchTextField 将被固定 到顶部 当然 当用户向下滚动时 它应该重新出现 我找
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动

随机推荐

  • 在 C++ 中将二进制字符串输出到二进制文件

    假设我有一个字符串 其中包含像这样的二进制文件 0110110101011110110010010000010 有没有一种简单的方法将该字符串输出到二进制文件中 以便该文件包含 0110110101011110110010010000010
  • 如何使我的 json 数组排序函数不区分大小写?

    我有以下小提琴 这是我的尝试 获取一个 json 数组 按显示名称值对数组进行排序 将排序后的数组作为列表项添加到 DOM 我的问题是 我希望能够在排序时不考虑值的大小写 我注意到它考虑了大小写并将大写值放在第一位 我相当确定这是在某个地方
  • 数据集 API“flat_map”方法对与“map”方法一起使用的相同代码产生错误

    我正在尝试创建一个管道来使用 TensorFlow Dataset API 和 Pandas 读取多个 CSV 文件 然而 使用flat map方法正在产生错误 但是 如果我使用map方法我能够构建代码并在会话中运行它 这是我正在使用的代码
  • Typescript 版本不更新

    我正在运行以下命令将 TypeScript 版本从 1 8 5 更新到 2 0 7 npm install g 打字稿 它显示为 电子邮件受保护 之后 当我尝试使用以下命令手动检查它时 tsc 版本 它告诉我 版本1 8 5 请告诉我如何将
  • 未找到“Jenssegers\Mongodb\MongodbServiceProvider”类

    我想用https github com jenssegers laravel mongodb为了使用 laravel 5 连接到 Mongodb 我已经安装了 MongoDB php 驱动程序 然后使用命令安装了 laravel mongo
  • R 中的多重 T 检验

    我的矩阵中有 94 个变量 样本 蛋白质 组 和 172 个观察值 Sample Protein1 Protein2 Protein92 Group 1 1 53 3 325 5 63 0 2 2 32 3 451 6 32 0 103 3
  • Android如何在具有图像视图和文本视图的圆形中创建这样的视图

    i want to create a view like this i have posted in screen shot in circle shape of layout with one image view with some b
  • vb 2008 网络浏览器替代品

    你好 我正在使用Visual Basic 2008 Express是否还有其他网络浏览器 例如gekoWebBrowser 但文件较少 或者是否可以更改 Visual Basic 使用的默认浏览器 从 IE 到 Opera chrome f
  • 通过 ssms 远程运行时,SSIS 作业失败,但在 SQL Server 上运行良好

    在开发盒上安装了 SQL Server 2016 并带有 SSIS 拥有一个循环遍历目录并验证 XML 文件的包 当在 SQL Server 上执行时 该作业可以通过 Integration Services 目录和 SQL Server
  • Python __getattr__ 执行多次

    我一直在努力实施 getattr 函数如下例所示 PEP 562 模块 getattr and dir 我不明白为什么这段简单的代码 lib py def getattr name print name main py from lib i
  • 在 Firebase 客户端应用程序中实现可调用的云函数

    我最近发现了Firebase 可调用函数这允许我从客户端调用类似 HTTPS 触发器的函数 并且具有 auth 支持 我很难在现有的 Firebase Web 客户端应用程序中实现这一新功能 我正在运行一些云函数 其中有一些我想将其转换为
  • 连接计算日期之间值的表

    所以我有下面两个表 Table A Date num 01 16 15 10 02 20 15 12 03 20 15 13 Table B Date Value 01 02 15 100 01 03 15 101 01 17 15 102
  • C# SMO 和 SqlEnum 引用错误

    我正在做一个 C 项目VS2013正在使用smo目的 我安装了 Install Package Microsoft SqlServer Scripting Install Package Microsoft SqlServer SqlEnu
  • Azure服务总线:如何续订锁定?

    如何更新接收队列消息处理程序上的锁 在事件处理程序上 测试消息没有更新锁定属性 Message testMessage https learn microsoft com en us dotnet api microsoft service
  • R Shiny:保留旧输出

    在闪亮的应用程序中 有没有办法保留旧的反应输出并将其与新的反应输出一起显示在应用程序中 举个例子 假设我想显示线性模型的汇总表 我逐渐向其中添加更多变量 我目前有一个checkboxGroupInput我使用该面板选择要包含在模型中的解释变
  • 字节算术:如何减去字节变量? [复制]

    这个问题在这里已经有答案了 当我尝试执行以下操作时出现错误 byte a 23 a a 1 编译器给出这个错误 Test java 8 发现可能存在精度损失 需要 int 字节 a a 1 1 个错误 铸造并不能解决错误 为什么编译器不让我
  • jq 的意外循环

    我正在尝试将 bash 中的表从 json 打印到标准输出jq key name doc count 1000 values over time buckets key as string 2019 05 01 11 00 00 000 k
  • Python:获取和保存屏幕截图的最快方法

    我一直在努力想出一个脚本 让我每秒可以多次截取桌面屏幕截图 我用的是Win10 PIL from PIL import ImageGrab import time while True im ImageGrab grab fname dro
  • 使用 Gmail 从 Excel 发送电子邮件

    我正在尝试在保存工作簿后自动生成电子邮件 我不想在电子邮件中发送工作簿 只是向一组人员发送电子邮件通知 告知其中有一个新条目 因此他们实际上必须打开它并做出响应 如果我可以添加指向该条目位置的链接 可以使用的电子表格 此外 该工作簿是 共享
  • Flutter 从 Firebase Cloud Firestore 返回完整数组

    9 月 2 日最新编辑 即使有赏金 我对此也没有太大的兴趣 所以我会尝试问一个更简单 更具体的问题 因此 我根据下面 Doug 的建议重新组织了数据库 因为我无法在 firebase 中以任何方式引用数组 所以现在我有了一个数组的映射 而不