isolate_http 4.0.0
isolate_http: ^4.0.0 copied to clipboard
IsolateHttp provides a way to launch 'http' library in Isolate with IsolatesFlutter.
IsolateHttp #
IsolateHttp provides a way to launch http package with IsolateFlutter.
Requirements #
Flutter >=3.35.0, Dart ^3.9.0. Verified against Flutter 3.44. Version 4.0.0
and later build on http 1.x.
Installation #
dependencies:
isolate_http: ^4.0.0
import 'package:isolate_http/isolate_http.dart';
Usage #
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.
Request #
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 #
_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 list
Files #
HttpFile.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.
Log Curl #
_isolateHttp.listener = (curl) {
if (kDebugMode) {
log('Isolate Http -> Curl: ----------------\n$curl\n----------------');
}
};
Migrating from 3.x #
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.
Author #
IsolateHttp is developed by Thong Dang. You can contact me at thongdn.it@gmail.com
If you like my project, you can support me
or star (like) for it.
Thank you! ❤️