【问题标题】:Failed to get document because the client is offline客户端离线,获取文档失败
【发布时间】:2020-07-12 15:07:11
【问题描述】:

我正在将 Flutter 用于移动应用程序,最近注意到一个间歇性错误,导致从云 Firestore 读取文档失败。我终于得到了我的一台设备来获取错误,因此我将其插入以获取日志,当我尝试访问其中一个文档时出现此错误。

flutter : [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] 未处理异常:PlatformException(执行获取时出错,由于客户端离线,无法获取文档。,null)

这个错误是从我的这行代码中抛出的,它在 99.9% 的时间内适用于 99.9% 的用户

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

我已经阅读了很多关于该主题的内容,得到了很多不同的答案。一篇堆栈溢出帖子说它像 2.5 年前一样被修复(显然不是,参考:Firebase Cloud Firestore throws "client is offline"),其他人说它是特定于 android 的(参考:https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues/631),但我在 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)

【问题讨论】:

  • “一个堆栈溢出帖子说它像 2.5 年前一样被修复(显然不是),其他人说它是 android 特定的,”当包含这样的内容时,请始终包含指向源的链接,这样我们就可以检查他们所说/意思。
  • 谢谢,我已经添加了指向这些问题的链接。
  • 您使用的版本肯定看起来有点旧(>6 个月),但我怀疑这是问题所在。我不确定为什么客户会在您共享的代码行上抛出该错误。你能做两件事:1)分享错误的完整堆栈跟踪吗? 2)升级到最新的SDK版本?希望通过这两种方法,我们可以看到导致它的原因,或者努力获得错误报告的重现。
  • 我添加了堆栈跟踪,最新的sdk是什么意思?
  • 你好像有点落后,所以升级到最新版本如下图:github.com/FirebaseExtended/…(嗯,有些版本号现在没有显示,所以一定要点击) .

标签: firebase flutter google-cloud-firestore firebase-authentication


【解决方案1】:

我遇到了同样的问题。我试图引用尚未创建的集合。所以,我刚刚用虚拟文档创建了一个集合。现在它运行良好。

cloud_firestore 开发人员应该关注错误报告。

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2022-07-01
    • 2022-12-11
    • 2022-01-17
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多