Files
sf-app-platform/apps/mobile_app/lib/providers/permissions/permissions_provider.dart

76 lines
2.0 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:permission_handler/permission_handler.dart';
final permissionsProvider =
NotifierProvider<PermissionsNotifier, PermissionsState>(
PermissionsNotifier.new,
);
class PermissionsNotifier extends Notifier<PermissionsState> {
@override
PermissionsState build() {
final initialState = PermissionsState();
checkPermissions();
return initialState;
}
Future<void> checkPermissions() async {
final permissionsArray = await Future.wait([
Permission.camera.status,
Permission.photos.status,
]);
state = state.copyWith(
camera: permissionsArray[0],
photoLibrary: permissionsArray[1],
);
}
void openSettinsScreen() {
openAppSettings();
}
void _checkPerssionState(PermissionStatus status) {
if (status == PermissionStatus.permanentlyDenied) {
openSettinsScreen();
}
}
Future<bool> requestCameraAccess() async {
final status = await Permission.camera.request();
state = state.copyWith(camera: status);
_checkPerssionState(status);
return status == PermissionStatus.granted;
}
Future<bool> requestPhotoLibraryAccess() async {
final status = await Permission.photos.request();
state = state.copyWith(photoLibrary: status);
_checkPerssionState(status);
return status == PermissionStatus.granted;
}
}
class PermissionsState {
final PermissionStatus camera;
final PermissionStatus photoLibrary;
PermissionsState({
this.camera = PermissionStatus.denied,
this.photoLibrary = PermissionStatus.denied,
});
bool get cameraGranted => camera == PermissionStatus.granted;
bool get photoLibraryGranted => photoLibrary == PermissionStatus.granted;
PermissionsState copyWith({
PermissionStatus? camera,
PermissionStatus? photoLibrary,
}) {
return PermissionsState(
camera: camera ?? this.camera,
photoLibrary: photoLibrary ?? this.photoLibrary,
);
}
}