import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'arc_platform_interface.dart'; /// An implementation of [ArcPlatform] that uses method channels. class MethodChannelArc extends ArcPlatform { /// The method channel used to interact with the native platform. @visibleForTesting final methodChannel = const MethodChannel('arc'); @override Future getPlatformVersion() async { final version = await methodChannel.invokeMethod('getPlatformVersion'); return version; } @override Future?> activeOnline({ required String appId, required String sdkKey, required String activeKey, }) async { final result = await methodChannel.invokeMethod>('activeOnline', { 'appId': appId, 'sdkKey': sdkKey, 'activeKey': activeKey, }); return result?.cast(); } @override Future?> init({ int? detectMode, int? orient, int? maxFaceNum, int? combinedMask, }) async { final result = await methodChannel.invokeMethod>('init', { 'detectMode': detectMode, 'orient': orient, 'maxFaceNum': maxFaceNum, 'combinedMask': combinedMask, }); return result?.cast(); } @override Future?> detectFaces({ required Uint8List data, required int width, required int height, int format = 2050, }) async { final result = await methodChannel.invokeMethod>('detectFaces', { 'data': data, 'width': width, 'height': height, 'format': format, }); return result?.cast(); } @override Future?> extractFaceFeature({ required Uint8List data, required int width, required int height, required int rectLeft, required int rectTop, required int rectRight, required int rectBottom, int format = 2050, int faceOrientation = 0, int faceId = -1, Uint8List? faceData, int extractType = 1, int mask = 0, }) async { final result = await methodChannel.invokeMethod>('extractFaceFeature', { 'data': data, 'width': width, 'height': height, 'format': format, 'rectLeft': rectLeft, 'rectTop': rectTop, 'rectRight': rectRight, 'rectBottom': rectBottom, 'faceOrientation': faceOrientation, 'faceId': faceId, 'faceData': faceData, // 关键:传递 faceData,这是虹软 SDK 特征提取必需的数据 'extractType': extractType, 'mask': mask, }); return result?.cast(); } @override Future?> compareFaceFeature({ required Uint8List featureData1, required Uint8List featureData2, int compareModel = 0, }) async { final result = await methodChannel.invokeMethod>('compareFaceFeature', { 'featureData1': featureData1, 'featureData2': featureData2, 'compareModel': compareModel, }); return result?.cast(); } @override Future?> registerFaceFeature({ required int searchId, required Uint8List featureData, String? faceTag, }) async { final result = await methodChannel.invokeMethod>('registerFaceFeature', { 'searchId': searchId, 'featureData': featureData, 'faceTag': faceTag, }); return result?.cast(); } @override Future?> registerFaceFeatureBatch({ required List> faceList, }) async { final result = await methodChannel.invokeMethod>('registerFaceFeatureBatch', { 'faceList': faceList, }); return result?.cast(); } }