76 lines
2.0 KiB
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,
|
|
);
|
|
}
|
|
}
|