import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:nearby_service/nearby_service.dart'; import 'nearby_service_platform_interface.dart'; import 'src/utils/result_handler.dart'; /// An implementation of [NearbyServicePlatform] that uses method channels. class MethodChannelNearbyService extends NearbyServicePlatform { /// The method channel used to interact with the native platform. @visibleForTesting final methodChannel = const MethodChannel('nearby_service'); @override Future getPlatformVersion() async { final result = await methodChannel.invokeMethod( 'getPlatformVersion', ); return ResultHandler.instance.handle(result); } @override Future getPlatformModel() async { final result = await methodChannel.invokeMethod('getPlatformModel'); return ResultHandler.instance.handle(result); } @override Future getCurrentDeviceInfo() async { final result = await methodChannel.invokeMethod('getCurrentDevice'); final updatedResult = ResultHandler.instance.handle(result); return NearbyDeviceMapper.instance.mapToDevice(updatedResult)?.info; } @override Future openServicesSettings() async { await methodChannel.invokeMethod('openServicesSettings'); } @override Future> getPeers() async { final result = await methodChannel.invokeMethod('getPeers'); final updatedResult = ResultHandler.instance.handle(result); return NearbyDeviceMapper.instance.mapToDeviceList(updatedResult); } @override Stream> getPeersStream() { const peersChannel = EventChannel("nearby_service_peers"); return peersChannel.receiveBroadcastStream().map((e) { final updatedResult = ResultHandler.instance.handle(e); return NearbyDeviceMapper.instance.mapToDeviceList(updatedResult); }); } @override @Deprecated('Use getConnectedDeviceStreamById instead') Stream getConnectedDeviceStream(NearbyDevice device) { return getConnectedDeviceStreamById(device.info.id); } @override Stream getConnectedDeviceStreamById(String deviceId) { const connectedDeviceChannel = EventChannel( "nearby_service_connected_device", ); return connectedDeviceChannel.receiveBroadcastStream(deviceId).map((e) { final updatedResult = ResultHandler.instance.handle(e); return NearbyDeviceMapper.instance.mapToDevice(updatedResult); }); } }