requestStoragePermission method

  1. @override
Future<String> requestStoragePermission()
override

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',
      );

      // For Android 13+ (API 33+)
      if (androidVersion != null && androidVersion >= 33) {
        // Request modern storage permissions
        debugPrint(
          'Using modern storage permissions for Android $androidVersion',
        );
        final result = await _invokePermissionMethod(
          'requestStoragePermission',
        );

        // Check if any of the permissions were granted
        if (result is Map<dynamic, dynamic>) {
          final values = (result as Map<dynamic, dynamic>).values.toList();
          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';
        }
        return result;
      }
    } catch (e) {
      debugPrint('Error checking Android version: $e');
      return 'ERROR';
    }
  }

  // Default implementation for older Android versions and iOS
  try {
    return await _invokePermissionMethod('requestStoragePermission');
  } catch (e) {
    debugPrint('Error requesting storage permission: $e');
    return 'ERROR';
  }
}