41 lines
1.4 KiB
Dart
41 lines
1.4 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'dart:io';
|
|
|
|
/// 缓存管理
|
|
class EsoImageCacheManager extends CacheManager {
|
|
static const key = 'libEsoCachedImageData';
|
|
|
|
static final EsoImageCacheManager _instance = EsoImageCacheManager._internal();
|
|
factory EsoImageCacheManager() => _instance;
|
|
EsoImageCacheManager._internal() : super(Config(key, fileService: EsoHttpFileService()));
|
|
}
|
|
|
|
class EsoHttpFileService extends FileService {
|
|
HttpClient? _httpClient;
|
|
EsoHttpFileService({HttpClient? httpClient}) {
|
|
_httpClient = httpClient ?? HttpClient();
|
|
_httpClient!.badCertificateCallback = (cert, host, port) => true;
|
|
}
|
|
|
|
@override
|
|
Future<FileServiceResponse> get(String url, {Map<String, String>? headers = const {}}) async {
|
|
final Uri resolved = Uri.base.resolve(url);
|
|
final HttpClientRequest req = await _httpClient!.getUrl(resolved);
|
|
headers?.forEach((key, value) {
|
|
req.headers.add(key, value);
|
|
});
|
|
final HttpClientResponse httpResponse = await req.close();
|
|
final http.StreamedResponse _response = http.StreamedResponse(
|
|
httpResponse.timeout(Duration(seconds: 60)),
|
|
httpResponse.statusCode,
|
|
contentLength: httpResponse.contentLength,
|
|
reasonPhrase: httpResponse.reasonPhrase,
|
|
isRedirect: httpResponse.isRedirect,
|
|
);
|
|
return HttpGetResponse(_response);
|
|
}
|
|
}
|