getPermissionStream method

  1. @override
Stream<DeviceLocationPermission> getPermissionStream({
  1. Duration pollingInterval = const Duration(seconds: 1),
})
override

Implementation

@override
Stream<DeviceLocationPermission> getPermissionStream({
  Duration pollingInterval = const Duration(seconds: 1),
}) {
  final controller = StreamController<DeviceLocationPermission>.broadcast();
  Timer? timer;

  Future<void> emitCurrent() async {
    if (controller.isClosed) return;
    try {
      final permission = await checkPermission();
      if (!controller.isClosed) controller.add(permission);
    } on Exception catch (e) {
      if (!controller.isClosed) controller.addError(e);
    }
  }

  controller.onListen = () {
    timer = Timer.periodic(pollingInterval, (_) => emitCurrent());
    emitCurrent();
  };

  controller.onCancel = () {
    timer?.cancel();
  };

  return controller.stream;
}