import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:platform/platform.dart'; class VolumeEventsService { final LocalPlatform _localPlatform; @visibleForTesting static const volumeHandlingChannel = MethodChannel("com.vodemn.lightmeter/volumeHandling"); @visibleForTesting static const volumeEventsChannel = EventChannel("com.vodemn.lightmeter/volumeEvents"); const VolumeEventsService(this._localPlatform); /// If set to `false` we allow system to handle key events. /// Returns current status of volume handling. Future<bool> setVolumeHandling(bool enableHandling) async { if (!_localPlatform.isAndroid) { return false; } return volumeHandlingChannel .invokeMethod<bool>("setVolumeHandling", enableHandling) .then((value) => value!); } /// Emits new events on /// KEYCODE_VOLUME_UP = 24; /// KEYCODE_VOLUME_DOWN = 25; /// pressed Stream<int> volumeButtonsEventStream() { if (!_localPlatform.isAndroid) { return const Stream.empty(); } return volumeEventsChannel .receiveBroadcastStream() .cast<int>() .where((event) => event == 24 || event == 25); } }