Zero Live
Zero Live

Reputation: 1843

Dart Http Package request timeout

While using http package in my flutter app, I encountered a slight issue. I am testing on localhost and when I post something in database using http.post, it doesn't return response for default time (i.e. 60s I think) when server is not running. And when I start the apache and mysql services within the timeout, it posts the data in the server . Is there any way to reduce the timeout of the http requests in dart http package? Or is there any alternative solution?

Upvotes: 23

Views: 20890

Answers (2)

Shojaeddin
Shojaeddin

Reputation: 2073

This is for http package

final response = await http.post(Url).timeout(Duration(seconds: 5));

And this is for Dio package (recommend to test this package)

BaseOptions options = new BaseOptions(
    baseUrl: baseUrl,
    connectTimeout: Duration(milliseconde: 10000 ), //10 seconds
    receiveTimeout: Duration(milliseconde: 10000 ),
   );

Dio dio = new Dio(options);

Response<dynamic> response = await dio.post(url, data: mapData);

Upvotes: 36

Skoff
Skoff

Reputation: 141

You have two options availabe.

Reduce the timeout on the HttpClient

final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 10);

This will apply to all request made by the same client. If the request exceeds this timeout, a SocketException is thrown.

Set a per request timeout
You can set a timeout on any Future using the Future.timeout method.

try {
  ..
  final request = await client.get(...);
  final response = await request.close().timeout(const Duration(seconds: 10));
  // more code
} on TimeoutException catch (e) {
  // handle timeout
}

Upvotes: 10

Related Questions