热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

写入FireStore失败时如何显示错误(如果没有网络)

我正在使用此功能将数据写入Firestore-效果很好Future<void>validateForm()async{

我正在使用此功能将数据写入 Firestore -效果很好

Future validateForm() async {
try {
await FirebaseFirestore.instance.collection('collectionPath').add({
'full_name': 'John Doe',
'company': 'Stokes and Sons',
'age': '42',
});
ScaffoldMessenger.of(context).showSnackBar(successSnackBar);
} catch (e) {
print(e.toString());
ScaffoldMessenger.of(context).showSnackBar(errorSnackBar);
}
}

但是当数据无法写入 FireStore 时,我试图显示一个 SnackBar


  • 目前,如果我将模拟器切换到飞行模式successSnackBar则不会显示 - 这就是我想要的

不过,我也想在errorSnackBar弹出不发生

回答

没有到后端的网络连接不是 Firestore 客户端的错误条件。在这种情况下,他们只需在本地提交写入,触发所有必要的事件,并在连接可用时与服务器同步。

所以通常的事件顺序是:


  • 你打电话写

  • 写入在本地同步执行(意味着当add()调用返回时,数据在本地写入 - 甚至在Future完成之前)。

  • 事件在本地为新文档触发,元数据表明文档快照中有待写入的内容。

  • .... 时间流逝...

  • 写入提交给服务器,服务器也解析Futureawait完成您的语句。

  • 如果需要,使用更新的元数据再次触发本地事件 - 或者在服务器拒绝写入的情况下更新实际数据。

catch实际上,只有当本地写入操作失败时,或者当写入在服务器上被拒绝时(通常是因为它违反了您的安全规则),您才会被调用。在所有其他情况下,(有意)不会抛出错误。

您有几个选择:


  • 取而代之的是await,你可以实现一个超时机制,以确定是否调用服务器正在比似乎是合理的,你更长的时间。

  • 您可以检查用户是否有网络连接,并在这种情况下提醒他们。

  • 您可以根据对象中的hasPendingWritesisFromCache属性,在线显示每个文档的状态,而不是使用反应式小吃店。SnapshotMetadata







推荐阅读
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • Python 并发编程进阶:从初学者到高手的进程与模块开发指南
    Python 并发编程进阶:从初学者到高手的进程与模块开发指南 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 在软件开发领域,“池”技术被广泛应用,如数据库连接池、线程池等。本文重点探讨Java中的线程池ThreadPoolExecutor,通过详细解析其内部机制,帮助开发者理解如何高效利用线程池管理任务执行。线程池不仅能够显著减少系统资源的消耗,提高响应速度,还能通过合理的配置,如饱和策略,确保在高负载情况下系统的稳定性和可靠性。文章还将结合实际案例,展示线程池在不同应用场景下的具体实现与优化技巧。 ... [详细]
  • 基于灰度直方图的水果识别系统开发:MATLAB源代码及图形用户界面设计
    基于灰度直方图的水果识别系统开发:MATLAB源代码及图形用户界面设计 ... [详细]
  • 如何处理为ListView显示空视图的问题,因为当我从Firebase数据库读取数据并将其显示在ListView中时,我不知道要放入哪些数据.我正在使用CustomListAdapter更改字体 ... [详细]
author-avatar
别装了gg_925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有