Доступ к Firestore нарушен после попытки офлайн - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить доступ к Cloud Firestore с помощью этого куска кода:

void _submit(BuildContext context) async {
    final DocumentReference postRef = Firestore.instance.document(dbPath);
    Firestore.instance.runTransaction((transaction) async {
        DocumentSnapshot freshSnap = await transaction.get(postRef);
        await transaction.update(freshSnap.reference, {
            'value': freshSnap['value'] + 1
        });
   });
}

Если Wi-Fi или мобильные данные включены, все работает нормально. ( как ожидалось )

Если Wi-Fi и мобильные данные отключены, это не работает. ( как ожидалось ). Но когда я жду до истечения времени ожидания (после вызова метода) и только потом включаю мобильные данные и wifi, он больше не работает, и я получаю следующие ошибки:

E/flutter ( 7041): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 7041): PlatformException(Error performing transaction, Timed out waiting for Task, null)
E/flutter ( 7041): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:547:7)
E/flutter ( 7041): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:279:18)
E/flutter ( 7041): <asynchronous suspension>
E/flutter ( 7041): #2      Firestore.runTransaction (file:///C:/{myPath}/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.7.3/lib/src/firestore.dart:115:10)
E/flutter ( 7041): <asynchronous suspension>
E/flutter ( 7041): #3      _FeedbackPageState._submitFeedback (package:appli_salon_data/view/program/FeedbackPage.dart:74:26)
E/flutter ( 7041): <asynchronous suspension>
E/flutter ( 7041): #4      _FeedbackPageState.build.<anonymous closure> (package:appli_salon_data/view/program/FeedbackPage.dart:60:26)
E/flutter ( 7041): #5      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:494:14)
E/flutter ( 7041): #6      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:549:30)
E/flutter ( 7041): #7      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 7041): #8      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
E/flutter ( 7041): #9      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:123:7)
E/flutter ( 7041): #10     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 7041): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
E/flutter ( 7041): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter ( 7041): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 7041): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter ( 7041): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter ( 7041): #16     _invoke1 (dart:ui/hooks.dart:134:13)
E/flutter ( 7041): #17     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:5)

( не ожидается )

Метод не будет работать снова, пока я не перезапущу приложение.

Если у кого-нибудь есть объяснение этому поведению, не стесняйтесь отвечать:)

ОБНОВЛЕНИЕ: Я пробовал это:

  1. Выключить Wi-Fi
  2. Попробуйте запустить транзакцию - приведет к ожидаемому сбою
  3. Включить Wifi
  4. Попробуйте запустить транзакцию

Вот интересная часть: на шаге 4 транзакция «сразу» запускается дважды, оба раза получая ошибку:

PlatformException(Error performing Transaction#get, UNAVAILABLE: Unable to resolve host firestore.googleapis.com, null)

при звонке transaction.get(postRef).

Может ли это означать, что Firestore каким-то образом теряет весь доступ к хосту после кратковременной потери подключения к Интернету? Как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...