| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import 'dart:typed_data';
- import 'package:dio/dio.dart';
- import 'package:get/get.dart';
- import 'package:trackoffical_app/service/api.dart';
- import '../logger.dart';
- import '../model/cache_image.dart';
- import '../model/m_net_image.dart';
- import 'database.dart';
- import '../appcore/ffi.dart' as ffi;
- extension NetImageExtension on MNetImage{
- Future<Uint8List> loadMemory({ProgressCallback? onReceiveProgress}) async{
- if(md5.isEmpty){
- return Uint8List(0);
- }
- if (data != null){
- return data!;
- }
- final db = Get.find<DatabaseService>();
- CacheImage? dbImage;
- final md5Hex = this.md5Hex;
- if(md5Hex != null){
- try{
- dbImage = await db.getImage(md5Hex);
- }catch(e){
- warn('加载缓存图片失败:', e);
- }
- }
- if (dbImage != null){
- data = Uint8List.fromList(dbImage.image);
- timestamp = dbImage.timestamp;
- ext=dbImage.ext??'';
- nonce=Uint8List.fromList(dbImage.nonce);
- onReceiveProgress?.call(1, 1);
- }else{
- if(url.isEmpty){
- final image = await ApiService.to.getBinByMd5(md5, onReceiveProgress??(a, b){});
- ext=image.ext;
- data = image.data;
- nonce=image.nonce;
- }else{
- final r = await Dio()
- .get<Uint8List>(
- url,
- options: Options(responseType: ResponseType.bytes), //设置接收类型为二进制数组
- onReceiveProgress: onReceiveProgress
- );
- if (r.data != null){
- data = r.data;
- }else{
- data = Uint8List(0);
- }
- }
- if(data?.isNotEmpty==true){
- if(md5Hex!= null){
- db.saveImage(this);
- }
- }
- }
- if(nonce.isNotEmpty && data!.isNotEmpty){
- debug('解密地图');
- data=await ffi.Crypto(bridge: ffi.api).decrypt(nonce: nonce, data: data!);
- info('解密成功');
- }
- return data!;
- }
- }
|