import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'dart:async'; import 'zhiwen_platform_interface.dart'; /// An implementation of [ZhiwenPlatform] that uses method channels. class MethodChannelZhiwen extends ZhiwenPlatform { /// The method channel used to interact with the native platform. @visibleForTesting final methodChannel = const MethodChannel('zhiwen'); /// The event channel for receiving fingerprint enrollment progress. @visibleForTesting final progressEventChannel = const EventChannel('zhiwen_progress'); /// 进度事件流控制器 Stream>? _progressStream; @override Future getPlatformVersion() async { final version = await methodChannel.invokeMethod('getPlatformVersion'); return version; } @override Future openDevice(String devicePath, int baudRate) async { final result = await methodChannel.invokeMethod( 'openDevice', {'devicePath': devicePath, 'baudRate': baudRate}, ); return result ?? false; } @override Future closeDevice() async { await methodChannel.invokeMethod('closeDevice'); } @override Future> enrollFingerprint(int userId) async { final result = await methodChannel.invokeMethod('enrollFingerprint', {'userId': userId}); return Map.from(result as Map); } @override Future> verifyFingerprint(int userId) async { final result = await methodChannel.invokeMethod('verifyFingerprint', {'userId': userId}); return Map.from(result as Map); } @override Future> deleteAllFingerprint() async { final result = await methodChannel.invokeMethod('deleteAllFingerprint'); return Map.from(result as Map); } @override Future> deleteOneFingerprint(int userId) async { final result = await methodChannel.invokeMethod('deleteOneFingerprint', {'userId': userId}); return Map.from(result as Map); } @override Future> identifyFingerprint() async { final result = await methodChannel.invokeMethod('identifyFingerprint'); return Map.from(result as Map); } @override Future> getUserCount() async { final result = await methodChannel.invokeMethod('getUserCount'); return Map.from(result as Map); } /// 获取指纹录入进度事件流 @override Stream> get progressStream { _progressStream ??= progressEventChannel .receiveBroadcastStream() .map((event) => Map.from(event as Map)); return _progressStream!; } }