import 'dart:typed_data'; import 'ffi.dart' as ffi; import 'package:trackoffical_app/model/m_position.dart'; import 'package:flutter/material.dart'; class MapPackage { ffi.RwLockGeoMapInfo? ptr; Future loadMemory(Uint8List data) async{ ptr = await ffi.api.parseMapPackage(data: data); } Future get mapExt async{ return await ffi.api.runMapPackageMapExtOpaque(mapPackage: ptr!); } Future get dstSize async{ final r = await ffi.api.runMapPackageGetDstSizeOpaque(mapPackage: ptr!); return Size(r.width, r.height); } Future get mapImageData async{ return await ffi.api.runMapPackageMapImageDataOpaque(mapPackage: ptr!); } Future setDstSize(Size size) async{ final dstSize = ffi.Size(width: size.width, height: size.height); await ffi.api.runMapPackageSetDstSizeOpaque(mapPackage: ptr!, dstSize: dstSize); } Future picToPosition(Offset onPic) async{ final r = await ffi.api.runMapPackagePicToPositionOpaque( mapPackage: ptr!, onPic: ffi.Offset(x: onPic.dx, y: onPic.dy)); return MPosition(latitude: r.latitude, longitude: r.longitude); } Future positionToPic(MPosition position) async{ final r = await ffi.api.runMapPackagePositionToPicOpaque( mapPackage: ptr!, position: ffi.Position(latitude: position.latitude, longitude: position.longitude)); return Offset(r.x, r.y); } Future isInHotZone(MPosition position) async{ final r = await ffi.api.runMapPackageIsInHotZoneOpaque( mapPackage: ptr!, position: ffi.Position(latitude: position.latitude, longitude: position.longitude)); return r; } void close(){ ptr?.dispose(); ptr = null; } }