Firebase 无法获取文档,因为客户端处于脱机状态

Firebase 无法获取文档,因为客户端处于脱机状态,firebase,flutter,google-cloud-firestore,firebase-authentication,Firebase,Flutter,Google Cloud Firestore,Firebase Authentication,我正在为一个移动应用程序使用Flutter,最近我注意到一个间歇性的bug,导致从CloudFireStore读取文档失败。我最终得到了我的一个设备来获取bug,所以我插入它来获取日志,当我尝试访问其中一个文档时,我得到了这个错误 flatter:[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:PlatformException(执行get时出错,由于客户端脱机,无法获取文档,null) 这一错误是从我的这一行代码中抛出的,99.9%的用户

我正在为一个移动应用程序使用Flutter,最近我注意到一个间歇性的bug,导致从CloudFireStore读取文档失败。我最终得到了我的一个设备来获取bug,所以我插入它来获取日志,当我尝试访问其中一个文档时,我得到了这个错误

flatter:[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:PlatformException(执行get时出错,由于客户端脱机,无法获取文档,null)

这一错误是从我的这一行代码中抛出的,99.9%的用户在99.9%的时间里都能使用它

    DocumentSnapshot userLivestream = await Firestore.instance.collection('livestreams').document(userId).get();

关于这个话题,我读了很多书,得到了很多混杂的答案。一篇关于堆栈溢出的帖子说它是2.5年前修复的(显然不是,参考:),其他人说它是特定于android的(参考:),但我在android和iOS上都遇到了同样的问题。这个问题最近变得更严重了,所以可能是我使用的软件包的问题。这里的相关包是从我的pubspec.yaml粘贴的

  firebase_core: ^0.4.0+1
  cloud_firestore: ^0.11.0+1
  firebase_auth: ^0.11.1
有时错误会在一段时间后自行修复,可能与登录应用程序或更改设备所连接的网络有关,但有了这些信息,我仍然无法始终如一地复制问题。有没有人遇到过类似的问题?您是如何解决的

堆栈跟踪:

03-31 13:20:09.488 19623  6084 E flutter : [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(Error performing get, Failed to get document because the client is offline., null)
03-31 13:20:09.488 19623  6084 E flutter : #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569)
03-31 13:20:09.488 19623  6084 E flutter : #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321)
03-31 13:20:09.488 19623  6084 E flutter : <asynchronous suspension>
03-31 13:20:09.488 19623  6084 E flutter : #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:349)
03-31 13:20:09.488 19623  6084 E flutter : #3      DocumentReference.get (package:cloud_firestore/src/document_reference.dart:76)
03-31 13:20:09.488 19623  6084 E flutter : #4      LivestreamRepository.getUsersLivestream (package:hallo/repositories/livestream_repository.dart:81)
03-31 13:20:09.488 19623  6084 E flutter : #5      joinLivestream (package:hallo/presentation/widgets/livestream_previews.dart:448)
03-31 13:20:09.488 19623  6084 E flutter : #6      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:45)
03-31 13:20:09.488 19623  6084 E flutter : #7      joinLivestream (package:hallo/presentation/widgets/livestream_previews.dart:447)
03-31 13:20:09.488 19623  6084 E flutter : #8      LiveStreamMenuState._buildLivestreamList.<anonymous closure>.<anonymous closure> (package:hallo/livestream/livestream_screen.dart:463)
03-31 13:20:09.488 19623  6084 E flutter : #9      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:45)
03-31 13:20:09.488 19623  6084 E flutter : #10     LiveStreamMenuState._buildLivestreamList.<anonymous closure>.<anonymous closure> (package:hallo/livestream/livestream_screen.dart:460)
03-31 13:20:09.488 19623  6084 E flutter : #11     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182)
03-31 13:20:09.488 19623  6084 E flutter : #12     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486)
03-31 13:20:09.488 19623  6084 E flutter : #13     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282)
03-31 13:20:09.488 19623  6084 E flutter : #14     BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:236)
03-31 13:20:09.488 19623  6084 E flutter : #15     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156)
03-31 13:20:09.488 19623  6084 E flutter : #16     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222)
03-31 13:20:09.488 19623  6084 E flutter : #17     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198)
03-31 13:20:09.488 19623  6084 E flutter : #18     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156)
03-31 13:20:09.488 19623  6084 E flutter : #19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102)
03-31 13:20:09.488 19623  6084 E flutter : #20     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86)
03-31 13:20:09.488 19623  6084 E flutter : #21     _rootRunUnary (dart:async/zone.dart:1138)
03-31 13:20:09.488 19623  6084 E flutter : #22     _CustomZone.runUnary (dart:async/zone.dart:1031)
03-31 13:20:09.488 19623  6084 E flutter : #23     _CustomZone.runUnaryGuarded (dart:async/zone.dart:933)
03-31 13:20:09.488 19623  6084 E flutter : #24     _invoke1 (dart:ui/hooks.dart:273)
03-31 13:20:09.488 19623  6084 E flutter : #25     _dispatchPointerDataPacket (dart:ui/hooks.dart:182)
03-31 13:20:09.488 19623 6084 E flatter:[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:PlatformException(执行get时出错,由于客户端脱机而无法获取文档,null)
03-31 13:20:09.488 19623 6084 E颤振:#0 StandardMethodCodec.decodeEnvelope(包:颤振/src/services/message_编解码器。dart:569)
03-31 13:20:09.488 19623 6084 E颤振:#1 MethodChannel.invokeMethod(包:颤振/src/services/platform_通道。dart:321)
03-31 13:20:09.488 19623 6084 E颤振:
03-31 13:20:09.488 19623 6084 E颤振:#2 MethodChannel.invokeMapMethod(包:颤振/src/services/platform_通道。dart:349)
03-31 13:20:09.488 19623 6084 E颤振:#3 DocumentReference.get(包装:cloud_firestore/src/document_reference.dart:76)
03-31 13:20:09.488 19623 6084 E颤振:#4 LivestreamRepository.getUsersLivestream(包:hallo/repositories/livestream_repository.dart:81)
03-31 13:20:09.488 19623 6084 E颤振:#5 joinLivestream(软件包:hallo/presentation/widgets/livestream_预览。dart:448)
03-31 13:20:09.488 19623 6084 E颤振:#6#u AsyncAwaitCompleter.start(dart:async patch/async_patch.dart:45)
03-31 13:20:09.488 19623 6084 E颤振:#7 joinLivestream(软件包:hallo/presentation/widgets/livestream_预览。dart:447)
03-31 13:20:09.488 19623 6084 E颤振:#8 LiveStream自定义。_buildLivestreamList。。(包装:hallo/livestream/livestream_屏幕。dart:463)
03-31 13:20:09.488 19623 6084 E颤振:#9#u AsyncAwaitCompleter.start(dart:async patch/async_patch.dart:45)
03-31 13:20:09.488 19623 6084 E颤振:#10 LiveStream自定义。_buildLivestreamList。。(包装:hallo/livestream/livestream_屏幕。dart:460)
03-31 13:20:09.488 19623 6084 E颤振:#11手势识别器.invokeCallback(包:颤振/src/手势/识别器.省道:182)
03-31 13:20:09.488 19623 6084 E颤振:#12 TapGestureRecognitor.handleTapUp(软件包:颤振/src/手势/tap.省道:486)
03-31 13:20:09.488 19623 6084 E颤振:#13 BaseTapgestureRecognitor.#检查(软件包:颤振/src/手势/tap.省道:282)
03-31 13:20:09.488 19623 6084 E颤振:#14 BaseTapgestureReceignizer.Accept手势(包:颤振/src/signatures/tap.dart:236)
03-31 13:20:09.488 19623 6084 E颤振:#15个手势arenamager.sweep(套装:颤振/src/signatures/arena.dart:156)
03-31 13:20:09.488 19623 6084 E颤振:#16手势绑定。手持设备(包装:颤振/src/手势/绑定。省道:222)
03-31 13:20:09.488 19623 6084 E颤振:#17 GestureBinding.dispatchEvent(包:颤振/src/手势/binding.dart:198)
03-31 13:20:09.488 19623 6084 E颤振:#18手势绑定。#手点事件(包装:颤振/src/手势/绑定。省道:156)
03-31 13:20:09.488 19623 6084 E颤振:19手势绑定。(U flushpointerreeventqueue(包装:颤振/src/手势/绑定。省道:102)
03-31 13:20:09.488 19623 6084 E颤振:#20手势绑定。#U手点数据包(包:颤振/src/手势/binding.dart:86)
03-31 13:20:09.488 19623 6084 E颤振:#21#U根运行一元(dart:async/zone.dart:1138)
03-31 13:20:09.488 19623 6084 E颤振:#22#u CustomZone.runUnary(dart:async/zone.dart:1031)
03-31 13:20:09.488 19623 6084 E颤振:#23#U CustomZone.runUnaryGuarded(dart:async/zone.dart:933)
03-31 13:20:09.488 19623 6084 E颤振:#24#U调用1(省道:ui/钩子。省道:273)
03-31 13:20:09.488 19623 6084 E颤振:#25#U调度点数据包(dart:ui/hooks.dart:182)

我也面临同样的问题。我试图引用尚未创建的集合。所以,我刚刚用虚拟文档创建了一个集合。现在它工作得很好

cloud_firestore开发者应该关注错误报告


“一篇stack overflow帖子说它是2.5年前修复的(显然不是),其他人说它是android特有的,”当包含这样的内容时,请始终包含一个指向源代码的链接,以便我们可以查看他们所说的/意思。谢谢,我添加了这些问题的链接。你使用的版本看起来肯定有点旧(>6个月),但我怀疑这就是问题所在。我不知道为什么客户端会在您共享的代码行中抛出该错误。您可以做两件事:1)共享错误的完整堆栈跟踪?2) 是否升级到最新的SDK版本?希望通过这两种方法,我们可以看到是什么原因导致了您的问题,或者努力获得错误报告的副本。我添加了stack trace,最新的sdk是什么意思?您似乎有点落后,所以升级到