import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:nearby_service/nearby_service.dart'; import 'package:nearby_service/nearby_service_platform_interface.dart'; import 'package:nearby_service/src/utils/logger.dart'; export 'package:nearby_service/src/platforms/android/android.dart'; export 'package:nearby_service/src/platforms/ios/ios.dart'; export 'src/models/models.dart'; export 'src/utils/utils.dart'; export 'src/types/types.dart'; abstract class NearbyService { static NearbyService getInstance({NearbyServiceLogLevel? logLevel}) { if (logLevel != null) { Logger.level = logLevel; } if (Platform.isAndroid) { Logger.debug('Created Nearby Android Service'); return NearbyAndroidService(); } else if (Platform.isIOS) { Logger.debug('Created Nearby IOS Service'); return NearbyIOSService(); } else { throw NearbyServiceException.unsupportedPlatform( caller: 'getInstance()', ); } } late final NearbyIOSService? ios = get( onIOS: (e) => e, ); late final NearbyAndroidService? android = get( onAndroid: (e) => e, ); ValueListenable get isCommunicationChannelConnecting; Future getPlatformVersion() { return NearbyServicePlatform.instance.getPlatformVersion(); } Future getPlatformModel() { return NearbyServicePlatform.instance.getPlatformModel(); } Future getCurrentDevice() { return NearbyServicePlatform.instance.getCurrentDevice(); } Future openServicesSettings() { return NearbyServicePlatform.instance.openServicesSettings(); } Future> getPeers() { return NearbyServicePlatform.instance.getPeers(); } Stream> getPeersStream() { return NearbyServicePlatform.instance.getPeersStream(); } Stream getConnectedDeviceStream(NearbyDevice device) { return NearbyServicePlatform.instance.getConnectedDeviceStream(device); } Future initialize({ NearbyInitializeData data = const NearbyInitializeData(), }); Future discover(); Future stopDiscovery(); Future connect(NearbyDevice device); Future disconnect(NearbyDevice device); FutureOr startCommunicationChannel( NearbyCommunicationChannelData data, ); FutureOr endCommunicationChannel(); FutureOr send(OutgoingNearbyMessage message); } extension NearbyServiceGetterExtension on NearbyService { T? get({ T Function(NearbyAndroidService)? onAndroid, T Function(NearbyIOSService)? onIOS, T Function(NearbyService)? onAny, }) { assert( onAndroid != null || onIOS != null || onAny != null, 'You should provide at least one of (onAndroid, onIOS, onAny)', ); if (this is NearbyAndroidService && onAndroid != null) { return onAndroid(this as NearbyAndroidService); } if (this is NearbyIOSService && onIOS != null) { return onIOS(this as NearbyIOSService); } if (onAny != null) { return onAny(this); } return null; } }