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

      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';
  }
}