|
@@ -6,7 +6,7 @@ import 'package:permission_handler/permission_handler.dart';
|
|
|
|
|
|
class GalleryPermissionNotifier extends StateNotifier<PermissionStatus> {
|
|
|
GalleryPermissionNotifier()
|
|
|
- : super(PermissionStatus.denied) // Denied is the intitial state
|
|
|
+ : super(PermissionStatus.denied) // Denied is the intitial state
|
|
|
{
|
|
|
// Sets the initial state
|
|
|
getGalleryPermissionStatus();
|
|
@@ -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(),
|
|
|
+);
|