|
|
|
|
@ -16,19 +16,20 @@ class GalleryPermissionNotifier extends StateNotifier<PermissionStatus> {
|
|
|
|
|
|
|
|
|
|
/// Requests the gallery permission
|
|
|
|
|
Future<PermissionStatus> requestGalleryPermission() async {
|
|
|
|
|
PermissionStatus result;
|
|
|
|
|
// Android 32 and below uses Permission.storage
|
|
|
|
|
if (Platform.isAndroid) {
|
|
|
|
|
final androidInfo = await DeviceInfoPlugin().androidInfo;
|
|
|
|
|
if (androidInfo.version.sdkInt <= 32) {
|
|
|
|
|
// Android 32 and below need storage
|
|
|
|
|
final permission = await Permission.storage.request();
|
|
|
|
|
state = permission;
|
|
|
|
|
return permission;
|
|
|
|
|
result = permission;
|
|
|
|
|
} else {
|
|
|
|
|
// Android 33 need photo & video
|
|
|
|
|
final photos = await Permission.photos.request();
|
|
|
|
|
if (!photos.isGranted) {
|
|
|
|
|
// Don't ask twice for the same permission
|
|
|
|
|
state = photos;
|
|
|
|
|
return photos;
|
|
|
|
|
}
|
|
|
|
|
final videos = await Permission.videos.request();
|
|
|
|
|
@ -45,28 +46,32 @@ class GalleryPermissionNotifier extends StateNotifier<PermissionStatus> {
|
|
|
|
|
status = PermissionStatus.denied;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
state = status;
|
|
|
|
|
return status;
|
|
|
|
|
result = status;
|
|
|
|
|
}
|
|
|
|
|
if (result == PermissionStatus.granted &&
|
|
|
|
|
androidInfo.version.sdkInt >= 29) {
|
|
|
|
|
result = await Permission.accessMediaLocation.request();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// iOS can use photos
|
|
|
|
|
final photos = await Permission.photos.request();
|
|
|
|
|
state = photos;
|
|
|
|
|
return photos;
|
|
|
|
|
result = photos;
|
|
|
|
|
}
|
|
|
|
|
state = result;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Checks the current state of the gallery permissions without
|
|
|
|
|
/// requesting them again
|
|
|
|
|
Future<PermissionStatus> getGalleryPermissionStatus() async {
|
|
|
|
|
PermissionStatus result;
|
|
|
|
|
// Android 32 and below uses Permission.storage
|
|
|
|
|
if (Platform.isAndroid) {
|
|
|
|
|
final androidInfo = await DeviceInfoPlugin().androidInfo;
|
|
|
|
|
if (androidInfo.version.sdkInt <= 32) {
|
|
|
|
|
// Android 32 and below need storage
|
|
|
|
|
final permission = await Permission.storage.status;
|
|
|
|
|
state = permission;
|
|
|
|
|
return permission;
|
|
|
|
|
result = permission;
|
|
|
|
|
} else {
|
|
|
|
|
// Android 33 needs photo & video
|
|
|
|
|
final photos = await Permission.photos.status;
|
|
|
|
|
@ -84,18 +89,23 @@ class GalleryPermissionNotifier extends StateNotifier<PermissionStatus> {
|
|
|
|
|
status = PermissionStatus.denied;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
state = status;
|
|
|
|
|
return status;
|
|
|
|
|
result = status;
|
|
|
|
|
}
|
|
|
|
|
if (state == PermissionStatus.granted &&
|
|
|
|
|
androidInfo.version.sdkInt >= 29) {
|
|
|
|
|
result = await Permission.accessMediaLocation.status;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// iOS can use photos
|
|
|
|
|
final photos = await Permission.photos.status;
|
|
|
|
|
state = photos;
|
|
|
|
|
return photos;
|
|
|
|
|
result = photos;
|
|
|
|
|
}
|
|
|
|
|
state = result;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final galleryPermissionNotifier
|
|
|
|
|
= StateNotifierProvider<GalleryPermissionNotifier, PermissionStatus>
|
|
|
|
|
((ref) => GalleryPermissionNotifier());
|
|
|
|
|
final galleryPermissionNotifier =
|
|
|
|
|
StateNotifierProvider<GalleryPermissionNotifier, PermissionStatus>(
|
|
|
|
|
(ref) => GalleryPermissionNotifier(),
|
|
|
|
|
);
|
|
|
|
|
|