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