| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import 'dart:isolate';
- import 'dart:typed_data';
- import 'package:http/http.dart' as http;
- class HttpGetImage {
- final String url;
- final int count;
- final Map<String, String>? httpHeaders;
- HttpGetImage({
- required this.url,
- required this.count,
- required this.httpHeaders,
- });
- Future<Uint8List> getDataObjectIsolate() async {
- final ReceivePort receivePort = ReceivePort();
- var data = {'sendPort': receivePort.sendPort, 'url': url, 'count': count};
- if (httpHeaders != null) {
- data = {
- 'sendPort': receivePort.sendPort,
- 'url': url,
- 'headers': httpHeaders!,
- 'count': count,
- };
- }
- final Isolate isolate = await Isolate.spawn(_isolateFetchVideo, data);
- try {
- final dynamic result = await receivePort.first;
- isolate.kill();
- if (result is Uint8List) {
- return result;
- } else {
- throw Exception();
- }
- } catch (e) {
- isolate.kill();
- throw Exception();
- } finally {
- receivePort.close();
- }
- }
- Future<void> _isolateFetchVideo(Map<String, dynamic> message) async {
- final SendPort sendPort = message['sendPort'];
- final String url = message['url'];
- int count = message['count'];
- Map<String, String> headers = message.containsKey("headers")
- ? message['headers']
- : null;
- int time = 10;
- late http.Response response;
- do {
- if (time > count) {
- sendPort.send(null);
- break;
- }
- try {
- response = await http
- .get(Uri.parse(url), headers: headers)
- .timeout(Duration(seconds: time));
- if (response.statusCode == 200) {
- sendPort.send(response.bodyBytes);
- break;
- }
- time++;
- } catch (e) {
- sendPort.send(null);
- }
- } while (response.statusCode != 200);
- }
- }
|