Reputation: 1843
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
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
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