import 'package:permission_handler/permission_handler.dart';
/// カメラ・ストレージのパーミッション確認・要求を行うサービス.
class PermissionService {
/// 直近の [requestCamera] で得たカメラ権限の状態.
///
/// permission_handler_android 14.1.0 以降,Android では
/// `Permission.status` が `permanentlyDenied` を返さなくなり,
/// `request()` の結果でのみ永久拒否を判定できるため保持する.
PermissionStatus? _lastCameraStatus;
/// カメラ権限を確認し,未許可なら要求する.
Future<bool> requestCamera() async {
final status = await Permission.camera.request();
_lastCameraStatus = status;
return status.isGranted;
}
/// ストレージ権限を確認し,未許可なら要求する.
Future<bool> requestStorage() async {
final status = await Permission.storage.request();
return status.isGranted;
}
/// カメラ権限が永久に拒否されているかを返す.
///
/// [requestCamera] 実行後はその結果で判定する(Android では
/// `Permission.status` から永久拒否を判定できないため).
Future<bool> isCameraPermanentlyDenied() async {
final lastStatus = _lastCameraStatus;
if (lastStatus != null) {
return lastStatus.isPermanentlyDenied;
}
return await Permission.camera.isPermanentlyDenied;
}
/// アプリの設定画面を開く.
Future<void> openSettings() async {
await openAppSettings();
}
}