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 loadMemory({ProgressCallback? onReceiveProgress}) async{ if(md5.isEmpty){ return Uint8List(0); } if (data != null){ return data!; } final db = Get.find(); 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( 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!; } }