Как проверить соединение Inte rnet с помощью HTTP-запросов (Flutter / Dart)? - PullRequest
0 голосов
/ 05 апреля 2020

Это, вероятно, вопрос noob, но как мне заставить мой ответ выдать исключение, если у пользователя нет соединения inte rnet или если для извлечения данных требуется слишком много времени?

Future<TransactionModel> getDetailedTransaction(String crypto) async {
//TODO Make it return an error if there is no internet or takes too long!

 http.Response response = await http.get(crypto);

  return parsedJson(response);

   }

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

Вы можете использовать этот плагин https://pub.dev/packages/data_connection_checker

Таким образом, вы можете предварительно проверить, есть ли у вас соединение, если нет, предупредить пользователя о том, что нет inte rnet соединения. И если у вас есть соединение inte rnet, просто перейдите к получению.

Я просто свяжу некоторые ресурсы ниже, где это было прекрасно объяснено:

https://www.youtube.com/watch?v=u_Xyqo6lhFE

Это все, что будет сделано до выполнение http-вызова, но что, если при выполнении http-вызова inte rnet отключается, вы можете использовать блок try catch, о котором упоминал @uros.

Дайте мне знать, если он работает.

1 голос
/ 06 апреля 2020

Вам не нужно использовать http, чтобы самостоятельно проверить подключение, просто используйте подключение библиотека

1 голос
/ 05 апреля 2020

Вы должны окружить его блоком try catch, например:

import 'package:http/http.dart' as http;

int timeout = 5;
try {
  http.Response response = await http.get('someUrl').
      timeout(Duration(seconds: timeout));
  if (response.statusCode == 200) {
    // do something
  } else {
    // handle it
  }
} on TimeoutException catch (e) {
  print('Timeout Error: $e');
} on SocketException catch (e) {
  print('Socket Error: $e');
} on Error catch (e) {
  print('General Error: $e');
}

Исключение сокета будет немедленно сгенерировано, если телефон знает, что нет соединения (например, отключены как WiFi, так и соединение для передачи данных. ).

Исключение тайм-аута будет сгенерировано после заданного тайм-аута, например, если серверу требуется слишком много времени для ответа или пользовательское соединение очень плохое и т. Д. c.

Также не забудьте справиться с ситуацией, если код ответа не = 200.

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