Flutter - Как определить использование Firestore, когда сеть не подключена - PullRequest
0 голосов
/ 10 мая 2019

Я использую Firestore в приложении, над которым я работаю.При подключении к интернету работает нормально.Когда нет подключения к Интернету, я хочу знать, что он не подключен, и / или иметь возможность контролировать время ожидания.При попытке загрузить изображение с неподключенным интернетом я получаю ответ через 718 секунд.Как я могу проверить через Flutter / Firestore, подключен ли интернет и как я могу предотвратить такой длительный тайм-аут?Пожалуйста, обратите внимание: код работает нормально, когда онлайн.Соответствующий код ниже:

    _stopwatch.start();
    print("Waiting for storage ref");
    final StorageReference storageRef =
FirebaseStorage.instance.ref().child(
'$sFilename.jpg');
    print("Putting file");
    final StorageUploadTask uploadTask =
storageRef.putFile(imageFile);
    print("waiting for snapshot");
    final StorageTaskSnapshot snapshot = (await
uploadTask.onComplete);
    print("Waiting for download url");
    var vImageUrl = (await
snapshot.ref.getDownloadURL());
} catch (vError) {
      _stopwatch.stop;
      _sLastError =
      "${getDateTime()} uploadImage: Elapsed:
${_stopwatch.elapsedMilliseconds ~/ 1000} seconds,
Size = $iSize,  Error = ${vError.toString()}";
    _logError(_sLastError);
    throw (_sLastError);
 }
The response on screen is as follows:
Waiting for storage ref
I/flutter (15999): Putting file
I/flutter (15999): waiting for snapshot
I/flutter (15999): EVENT StorageTaskEventType.progress
I/flutter (15999): EVENT StorageTaskEventType.progress
I/flutter (15999): EVENT StorageTaskEventType.failure
I/flutter (15999): Waiting for download url
I/flutter (15999): Image upload failed
I/flutter (15999): FirestoreService: 163 2019-05-11
  00:28 uploadImage: Elapsed: 718 seconds, Size =
  49302,  Error = PlatformException(download_error,
 The operation retry limit has been exceeded., null)

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Приведенный ниже фрагмент кода может вам помочь. Я использую этот код, чтобы определить, доступен ли интернет. Это очень полезно в тех случаях, когда WiFi подключен, но Интернет недоступен.

try {
      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
        print('connected');
      }
    } on SocketException catch (_) {
      print('not connected');
     //Here you can setState a bool like internetAvailable = false;
     //or use call this before uploading data to firestore/storage depending upon the result, you can move on further.
}
0 голосов
/ 18 мая 2019

Похоже, что у Firestore в настоящее время нет решения этой проблемы.Способ, которым я, кажется, решил это для себя в краткосрочной перспективе, состоит в том, чтобы в рамках транзакции попытаться получить документ.Если это приводит к ошибке, то нет подключения к интернету.Это похоже на работу.Перед загрузкой изображения я (в рамках транзакции) пытаюсь загрузить документ (ожидаю tx.get (docRef)).Если это не удается с ошибкой, значит, нет подключения к интернету.

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