首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

flutter:我想将用户数据从firestore保存到变量,但它返回null

Flutter是一种跨平台的移动应用开发框架,可以用于快速构建高性能、美观的移动应用程序。在Flutter中,可以使用Firestore来存储和管理用户数据。如果你想将用户数据从Firestore保存到变量中,但是返回了null,可能有以下几个原因:

  1. 数据尚未加载完成:Firestore是一个异步操作的数据库,数据的获取需要一定的时间。如果你在获取数据之前就尝试将其保存到变量中,那么变量可能会返回null。你可以使用async/await或者FutureBuilder等方式来确保数据加载完成后再进行操作。
  2. 数据不存在:如果Firestore中没有对应的数据,那么获取数据的操作可能会返回null。在保存数据到变量之前,你可以先检查数据是否存在,可以使用exists()方法来判断。
  3. 数据获取出错:在获取数据的过程中,可能会发生一些错误,导致返回null。你可以使用try-catch语句来捕获异常,并进行相应的处理。

为了将用户数据从Firestore保存到变量中,你可以按照以下步骤进行操作:

  1. 导入Firestore库:在Flutter项目中,首先需要导入Firestore库,可以在pubspec.yaml文件中添加依赖。
  2. 初始化Firestore:在使用Firestore之前,需要先进行初始化。可以使用Firebase.initializeApp()方法来初始化Firestore。
  3. 获取数据:使用Firestore的collection()和document()方法来指定要获取数据的集合和文档。然后使用get()方法来获取数据。
  4. 处理数据:在获取数据后,可以使用snapshot.data来访问数据。如果数据存在,可以将其保存到变量中。

下面是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: FirebaseFirestore.instance.collection('users').doc('user1').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text('Loading...');
        }

        if (!snapshot.hasData || !snapshot.data.exists) {
          return Text('Data does not exist');
        }

        // 数据存在,保存到变量中
        var userData = snapshot.data.data();

        return Text('User Name: ${userData['name']}');
      },
    );
  }
}

在上面的示例中,我们使用了StreamBuilder来监听数据的变化,并根据不同的状态进行处理。如果数据存在且加载成功,我们将用户的姓名显示在Text组件中。

推荐的腾讯云相关产品:腾讯云云开发(Tencent Cloud Base),它是一款支持Serverless架构的云开发平台,提供了云函数、云数据库、云存储等功能,可以方便地进行数据存储和管理。你可以通过以下链接了解更多信息:腾讯云云开发

希望以上回答能够帮助到你,如果还有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter 移动端架构实践:Widget-Async-Bloc-Service

然而,在构建完成并将它们一次次的重构之后,调整出了一种在所有项目中都能够运行完好的开发体系,因此,在本文中,将介绍一种定义的新的架构模式: 现有的开发模式中借鉴了很多思想; 调整它们以满足实际开发...控件可以是无状态或有状态的,但它们都不应包含任何 显式 状态管理的逻辑。 显式 状态管理的示例是 Flutter 计数器,当增量按钮被按下时,程序通过 setState() 对计数器进行值的递增。...换句话说,我们可以将Service视为 纯粹 的功能组件, 它可以修改和转换第三方库收到的数据。...输入的数据(读取):将来自Firestore文档的键值对的流转换为强类型的不可变数据Model。 数据输出(写入):将数据Model转换为键值对,以便写入Firestore。...无论如何,发现BLoCs在使用Firestore构建app时效果非常明显,其中数据通过流后端流入app。 在这种情况下,通常将流进行组合或使用RxDart对其执行转换,BLoC很擅长这个。

16.1K20

如何用TensorFlow和Swift写个App识别霉霉?

第一步:预处理照片 首先谷歌上下载了 200 张 Taylor Swift 的照片,然后将它们分成两个数据集:训练集和测试集。然后给照片添加标签。测试集用于测试模型识别训练中未见过的照片的准确率。...第三步:部署模型进行预测 如果想将模型部署在 ML Engine 上,需要将模型的检查点转换为 ProtoBuf。...如果想运行如下脚本,你需要定义到达你的MobileNet 配置文件的本地路径,训练阶段中下载的模型检查点的数量,以及你想将导出的图表写入的目录的名字: # Run this script from tensorflow...首先,在这个 Swift 客户端中添加了一个按钮,让用户可以访问手机相册。...用户选择照片后,会触发程序将照片上传至 Cloud Storage: let firestore = Firestore.firestore()func imagePickerController(_

12.1K10
  • 用 awaitasync 正确链接 Javascript 中的多个函数

    发现大多数关于链接多个函数的文章都没有用,因为他们倾向于发布MSDN 复制粘贴的不完整的演示代码。...然后我们需要 async 函数 getEmailOfCourseWithCourseId() Firestore获取课程的电子邮件地址。...我们不知道 Firestore 获取内容需要多长时间,因此它是 async 的,我们需要运行接下来的两个函数并返回(或以 promise 解析)courseEmail 。...为此,我们将 saveToCloudFireStore() 和 sendEmailInSendgrid() 响应(它们返回的内容)保存到变量中,其唯一目的是标记上述函数何时完成。...此外,数据库代码不能原封不动的复制 —— 它仅用于说明目的! 原文:https://nikodunk.com/how-to-chain-functions-with-await-async/

    6.3K30

    我们弃用 Firebase 了

    你可以编写实现实时数据同步的应用程序,而且不需要开发大量的传输逻辑。那些在自制即时通讯应用程序中使用了长轮询请求的的用户肯定会喜欢它。...Firestore 的文档 / 集合架构:它迫使人们仔细考虑数据建模。它还反映了一个直观的导航方案。 Firestore 中的关系数据也是如此。...这个 Web 片段会将站点配置为使用特定的 Firebase 应用程序,并借助环境变量使我们可以跨项目保留脚手架。...无法在 Firebase 仪表板上下载这个文件。这不符合直觉,“打开”竟然不让下载。 直接 Google Cloud Console 下载。...运营的角度来看,这是合理的。但是,简化 Firebase 的云体验会使它失去大部分的价值;我们客户并不想了解 GCP。在最近的 Firebase 项目中,在想我们是否应该推出自定义的服务。

    32.6K30

    Flutter web 最新进展: 发掘更多可能!

    Flutter 代码在浏览器中运行,为我们带来了各种有趣的可能性,包括: 让开发者们可以轻松将现有的应用移动端带向 Web 端 —— 不论是完整功能迁移版的应用、PWA (Progressive.../templates 框架和 API 层面上来说,毫无疑问 Flutter 是以应用为中心的。...Ampstor 团队在使用 Flutter web 后如此说道: "我们是一个致力于帮助用户打造高度个性化体验的初创团队,因此将产品快速发布,并根据用户的反馈快速迭代至关重要。...感谢社区的巨大贡献,例如: audioplayers: 同时播放多个音频文件 connectivity: 让应用发现网络连接并作出相应配置 cloud_firestore: 经由 Cloud Firestore...watch) 功能,或将鼠标悬停在变量上查看其数值。

    5K40

    2020年了,Android后台活还有戏吗?看我如何优雅的实现!

    自从Android P(即Android 8.0)出现以后,Android已经系统层面将后台活这条路给堵死了(详见:《Android P正式版即将到来:后台应用活、消息推送的真正噩梦》),曾今那些层出不穷的活黑科技能用的也越来越少了...在项目中应入了 Flutter 跨平台开发技术,实现了原生和 Flutter 的混合开发。 本文作者乐于分享,平时会写技术文章并分享在多个平台,是掘金专栏作者的一员,文章总阅读量超过 10 万。...是 Android 和 Flutter 官方中文文档译者。...某咚设计、写的不够好的文案,甚至是十几台手机上一张一张截下来的图,进行了全方位的致敬。感谢某咚的认可,但最近在某个发布会上听到这么一句话:在致敬的同时,能不能说一句谢谢?...某咚的致敬,一方面说明了目前确实存在进程容易被杀,活难度大的问题,另一方面也说明了这种引导用户进行白名单设置的手段是有效的。

    5.7K21

    Flutter中网络图片加载和缓存的实现

    创建对象时的codec变量由_loadAsync方法的返回值初始化,查看该方法内容 static final HttpClient _httpClient = HttpClient(); Future...SchedulerBinding.instance.scheduleFrameCallback(_handleAppFrame); } 如果图片是png或jpg只有一帧,则执行_emitFrame函数,数据中拿到图片帧对象根据缩放比例创建...实际问题 以上源码分析,我们应该清楚了整个网络图片加载到显示的过程,不过使用这种原生的方式我们发现网络图片只是进行了内存缓存,如果杀掉应用进程再重新打开后还是要重新下载图片,这对于用户而言,每次打开应用还是会消耗下载图片的流量...statusCode}, $resolved'); /// 新增代码块start /// 将下载的图片数据存到指定缓存文件中 await _cacheFileImage.saveBytesToFile...; } /// 将下载的图片数据存到指定文件 Future saveBytesToFile(String url, Uint8List bytes) async { String cacheDirPath

    3.2K30

    超实用!50+个ChatGPT提示词助你成为高效Web开发者(上)

    它接受完整的姓名作为输入,并返回头像字母。...Next.js是一个React框架,可以用来创建应用程序的前端,而Firebase可以用于后端,利用其各种服务,如Firestore数据库,Firebase Authentication进行用户管理,以及...Firestore:这是Firebase提供的一个NoSQL数据库。你可以创建以下集合: - **Rooms**:用于存储酒店的所有房间。...Supabase使用的是PostgreSQL,这是一种关系数据库,与Firebase的Firestore(一种NoSQL数据库)不同。 a....总的来说,虽然这两种技术堆栈在某些方面存在差异,但它们都可以用于构建一个酒店预订系统。你的最终选择应基于你的具体需求、数据结构以及团队的技术背景。

    73021

    协程 Flow 最佳实践 | 基于 Android 开发者峰会应用

    应用数据层负责提供数据,通常是数据库中读取,或网络获取数据,例如,示例是一个数据源接口,它提供了一个用户事件数据流: interface UserEventDataSource { fun getObservableUserEvent...在 ADS 应用中,我们想将 UserEventResult 和 Repository 层中的会话数据进行绑定。...BroadcastChannel 实现 对于使用 Firestore 跟踪用户身份认证的数据流,我们使用了 BroadcastChannel API,因为我们希望注册一个有独立生命周期的 Authentication...您可以创建一个类,并设置将实例化后的 BroadcastChannel 作为变量保存。...} } 为了成功完成测试,一个比较好的做法是使用 take 操作符来 Flow 中获取一些数据,使用 toList 作为末端操作符来数组中获取结果。

    3.5K11

    【干货】手把手教你用苹果Core ML和Swift开发人脸目标识别APP

    要使用的脚本,您需要安装tensorflow / models,tensorflow / models / research目录运行脚本,参数传递如下(运行两次:一次用于训练数据,一次用于测试数据)...Swift客户端将图像上传到云存储,这会触发Firebase,在Node.js中发出预测请求,并将生成的预测图像和数据存到云存储和Firestore中。...首先,在的Swift客户端中,添加了一个按钮,供用户访问设备照片库。用户选择照片后,会自动将图像上载到云端存储: ? 接下来,编写了上传到我的项目的云存储触发的Firebase数据库。...将带有新框的图像保存到云存储,然后将图像的文件路径写入Cloud Firestore,以便在iOS应用程序中读取路径并下载新图像(使用矩形): ? ?...在的函数中,Firestore写预测元数据

    14.8K60

    Flutter 构建完整应用手册-处理手势

    例如,如果我们正在编写一个电子邮件应用程序,我们可能希望允许我们的用户在列表中划离邮件消息。 当他们这样做时,我们需要将该项目收件箱移至垃圾箱。...用户将该项目删除后,我们需要运行一些代码以列表中删除该项目并显示Snackbar。 在真实的应用程序中,您可能需要执行更复杂的逻辑,例如从Web服务或数据库中删除项目。...在我们的例子中,我们将更新我们的itemBuilder函数以返回一个Dismissible部件。...dismissed"))); }, child: new ListTile(title: new Text('$item')), ); 3.提供“向后消除”指标 就目前来看,我们的应用程序将允许用户列表中滑动项目...,但它可能不会让他们看到他们做什么时会发生什么。

    1.8K20

    Flutter 数据持久化存储之Hive库

    这种方式适合存储少量简单的键值对数据,比如用户偏好设置等。 文件存储: 使用dart:io库可以进行文件存储,可以将数据以文件的形式存储在设备上。...这种方式适合存储结构化数据,可以使用JSON格式或者其他格式进行数据的读写。 SQLite数据库: 可以使用sqflite插件在Flutter应用中使用SQLite数据库。...NoSQL数据库: 一些Flutter插件(如moor)也提供了对NoSQL数据库的支持,比如使用对象数据库(如Hive)来存储数据。...云存储: 通过与云存储(如Firebase Firestore、AWS Amplify等)进行集成,可以将数据存储在云端,实现跨设备数据同步和备份。...HiveField: HiveField 是用来标记类中的字段(成员变量)的注解,用于指定字段在 Hive 数据库中的位置和顺序。

    32200

    为什么说Flutter让移动开发变得更好?

    这不是第一个移动领域用于跨平台开发的框架,但它正在被谷歌使用,得益于谷歌的实力,让Flutter有一定的可信度。...让我们在Android中构建此列表所需的步骤开始: 用XML创建list-item布局文件 创建一个适配器来绑定视图并设置数据 为列表创建布局(可能在Activity或Fragment中) 填充Fragment.../Activity中的列表布局 在Fragment / Activity中创建适配器,布局管理器等的实例 在后台线程上网络下载电影数据 回到主线程设置适配器中的项目 现在需要考虑保存和恢复列表状态等细节...当开始使用Android的Databinding时,认为这是革命性的,但它也感觉像是一个不完整的产品。...Flutter使用Databinding相同的思想,即将视图/小部件绑定到变量,而无需在Java / Kotlin中手动管理数据绑定,不用专门的绑定文件来桥接XML和Java。

    2K10

    使用Burp拦截Flutter App与其后端的通信

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter应用程序是用Dart编写的,这是一种由Google在7年多前创建的语言。...即使应用程序是用这个实现编译的,但在Android上它也将毫无用处,因为所有应用程序都是初始zygote进程的子进程,因此没有这些环境变量。 也可以定义一个返回首选代理的自定义findProxy实现。...对的测试应用程序进行的快速修改确实表明,此配置将所有HTTP数据发送到了的代理服务器: client.findProxy = (uri) { return "PROXY 10.153.103.222...幸运的是,我们总是有iptables fallback来将所有流量设备路由到我们的代理。...此函数还返回原始数据类型(布尔值),并且是一个更好的hook选项。

    2.7K00

    Flutter

    Widget:Widget是Flutter的核心部分,是用户界面的不可变描述。...运算符:如果 a 不为 null返回 a 的值,否则返回 b。在 Java 或者 C++ 中,我们需要通过三元表达式 (a != null)? a : b 来实现这种情况。...StatefulWidget 一些 Widget(比如 Image、Checkbox)的展示,除了父 Widget 初始化时传入的静态配置之外,还需要处理用户的交互(比如,用户点击按钮)或其内部数据的变化...我们需要在这个函数中,根据父 Widget 传递过来的初始化配置数据,以及 State 的当前状态,创建一个 Widget 然后返回。...当状态数据发生变化时,我们总是通过调用这个方法告诉 Flutter:“这儿的数据变啦,请使用更新后的数据重建 UI!”

    1.9K40

    Flutter 构建完整应用手册-持久化

    0) + 1; 在上面的例子中,我们counter键加载数据,如果它不存在,则返回0。...支持的类型 虽然使用键值存储非常简单方便,但它有一些限制: 只能使用原始类型:int, double, bool, string 和 string list 它不是用来存储大量数据,因此不适合作为应用程序缓存...这可用于跨应用程序启动持续保存数据互联网上下载数据并保存以供以后脱机使用。 为了将文件保存到磁盘,我们需要将path_provider插件与dart:io库结合使用。...路线 找到正确的本地路径 创建对文件位置的引用 将数据写入文件 文件中读取数据 1.找到正确的本地路径 在这个例子中,我们将显示一个计数器。...在iOS上,这对应于NSTemporaryDirectory()返回的值。 在Android上,这是getCacheDir()返回的值。 文档目录:应用程序的目录,用于存储只有它可以访问的文件。

    1.5K20

    Flutter与Dart 入门

    Flutter是什么 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。...Flutter将UI组件和渲染器平台移动到应用程序中,这使得它们可以自定义和可扩展。...,Dart会自动推断其数据类型,dynamic类似c# 没有赋初值的变量都会有默认值null Dart支持顶层方法,如main方法,可以在方法内部创建方法 Dart支持顶层变量,也支持类变量或对象变量...= 运算符前面的变量null,则赋值,否则不赋值 var param1 = "hello", param2 = null; param1 ??= "world"; param2 ??...length); // null print(str2.length); // 报错 ..运算符(级联操作) 使用..调用某个对象的方法(或者成员变量)时,返回值是这个对象本身,这样就能方面实现链式调用

    1.3K20

    Flutter —布局系统概述

    source=bookmarks---------17------------------ 最近,决定专注于Flutter基础知识。...这次,试图更好地理解“布局系统的工作原理”,并回答以下问题: 的小部件的尺寸看起来不合适,怎么回事? 想将Widget放置在特定位置,但是没有任何属性可以控制它,为什么呢?...“两个阶段” 布局系统和约束 首先,小部件是Flutter SDK的构建块,但它们不负责将其自身绘制到屏幕中。每个小部件都与负责此操作的RenderBox对象相关联。...觉得three可能写错了,应该是tree,译文:以同样的方式小部件生成 组件树,RenderBoxes生成渲染树。 我们可以将Flutter的布局系统视为两阶段系统。...希望所有这些都可以帮助您更好地了解Flutter布局系统的工作方式。

    1.7K20
    领券