Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I check Internet Connectivity using HTTP requests(Flutter/Dart)?

This is probably a noob question, but how do I make my response throw an exception if the user does not have an internet connection or if it takes too long to fetch the data?

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);

   }
like image 378
TB_98 Avatar asked Mar 04 '26 17:03

TB_98


2 Answers

You should surround it with try catch block, like so:

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');
}

Socket exception will be raised immediately if the phone is aware that there is no connectivity (like both WiFi and Data connection are turned off).

Timeout exception will be raised after the given timeout, like if the server takes too long to reply or users connection is very poor etc.

Also don't forget to handle the situation if the response code isn't = 200.

like image 143
Uroš Avatar answered Mar 07 '26 07:03

Uroš


You don't need to use http to check the connectivity yourself, simply use connectivity library

like image 27
Jim Avatar answered Mar 07 '26 07:03

Jim