requestStoragePermission method
Request storage permission
Implementation
@override
Future<String> requestStoragePermission() async {
// Handle storage permissions differently based on platform and Android version
if (Platform.isAndroid) {
try {
final androidVersion = await methodChannel.invokeMethod<int>(
'getAndroidVersion',
);
debugPrint('Requesting storage permission on Android $androidVersion');
// Process based on Android version
if (androidVersion != null) {
// Request storage permissions through the native implementation
final result = await methodChannel.invokeMethod<dynamic>(
'requestStoragePermission',
);
debugPrint('Storage permission result: $result');
// Check if any of the permissions were granted
if (result is Map<dynamic, dynamic>) {
final values = result.values.toList();
debugPrint('Storage permission values: $values');
// If any permission is granted, consider the overall result as granted
if (values.contains('GRANTED')) {
return 'GRANTED';
} else if (values.contains('OPEN_SETTINGS')) {
return 'OPEN_SETTINGS';
} else if (values.contains('SHOW_RATIONALE')) {
return 'SHOW_RATIONALE';
}
return 'DENIED';
} else if (result is bool) {
// Handle boolean result
return result ? 'GRANTED' : 'DENIED';
} else if (result is String) {
// Handle string result
return result;
}
// Default to denied for unknown result types
return 'DENIED';
} else {
// If we couldn't determine the Android version, use the standard approach
debugPrint(
'Could not determine Android version, using standard approach',
);
return await _invokePermissionMethod('requestStoragePermission');
}
} catch (e) {
debugPrint('Error requesting storage permission: $e');
return 'ERROR';
}
} else if (Platform.isIOS) {
// On iOS, we use photo library permissions
debugPrint('Requesting photo library permission on iOS');
return await _invokePermissionMethod('requestStoragePermission');
}
// Default implementation for other platforms
try {
return await _invokePermissionMethod('requestStoragePermission');
} catch (e) {
debugPrint('Error requesting storage permission: $e');
return 'ERROR';
}
}