IsolateHttp provides a way to launch http package with IsolateFlutter.
Flutter >=3.35.0, Dart ^3.9.0. Verified against Flutter 3.44. Version 4.0.0
and later build on http 1.x.
dependencies:
isolate_http: ^4.0.0import 'package:isolate_http/isolate_http.dart';Performing a GET request:
final _isolateHttp = IsolateHttp();final _response = await _isolateHttp.get('https://example.com/product',
query: {'q': 'flutter'},
headers: {'Authorization': 'abc='});
print(_response);Performing a POST request:
final _response = await _isolateHttp.post('https://example.com/product',
headers: {'Authorization': 'abc='},
body: {'size': 'XL', 'price': 236},
files: [
HttpFile.fromPath('files', 'path/image_1.png')
]);
print(_response);Performing a DELETE request:
final _response = await _isolateHttp.delete('https://example.com/product/1',
headers: {'Authorization': 'abc='});
print(_response);head, get, post, put and delete are available, plus send if you want
to build the IsolateHttpRequest yourself.
*** You can set a timeout and debug label for your request when creating an IsolateHttp like:
final _isolateHttp = IsolateHttp(timeout: Duration(seconds: 30), debugLabel: 'get_products')If timeout, its returns you an IsolateHttpResponse with status code 408 (Request Timeout) and the isolate running the request is stopped. Other exceptions come back as status code 520.
The body is encoded from the content-type header:
- no
content-type— the header is set toapplication/jsonand the body is JSON encoded. application/x-www-form-urlencoded— the body is sent as form fields.multipart/form-data, or any request withfiles— the body is sent as a multipart request.- anything else — the body is sent as
body.toString().
final _request = IsolateHttpRequest('https://example.com/product',
method: HttpMethod.post,
headers: ContentType.json.toContentTypeHeader,
body: {'size': 'XL'});
final _response = await _isolateHttp.send(_request);_response?.statusCode; // int
_response?.body; // String
_response?.headers; // Map<String, String>
_response?.contentLength; // int?
_response?.bodyJson; // dynamic, decoded from body
_response?.bodyAsMap; // Map<String, dynamic>, throws ArgumentError if not a map
_response?.bodyAsList; // List<dynamic>, throws ArgumentError if not a listHttpFile.fromPath('files', 'path/image_1.png');
HttpFile.fromBytes('files', bytes, filename: 'image_1.png');
HttpFile.fromString('files', '{"a":1}', filename: 'a.json',
contentType: MediaType('application', 'json'));MediaType is re-exported by this package, so you do not need to depend on
http_parser yourself.
_isolateHttp.listener = (curl) {
if (kDebugMode) {
log('Isolate Http -> Curl: ----------------\n$curl\n----------------');
}
};httpmoved from0.13.xto1.x. If you useHttpFile.toMultipartFile(), theMultipartFileyou get back is now the one fromhttp1.x. Most code needs no change beyond bumpinghttpin your ownpubspec.yaml.- Requires Flutter
>=3.35.0/ Dart^3.9.0. - A request that times out no longer keeps running in the background; the isolate
is stopped once
send()returns.
IsolateHttp is developed by Thong Dang. You can contact me at thongdn.it@gmail.com
If you like my project, you can support me 
Thank you! ❤️