pickFromGallery static method

Future<String?> pickFromGallery()

Smart gallery picker:

  • Samsung (Android) → файловий менеджер (SAF / ACTION_OPEN_DOCUMENT)
  • інші → стандартна галерея (ImagePicker)

Implementation

static Future<String?> pickFromGallery() async {
  try {
    if (Platform.isAndroid) {
      final info = await DeviceInfoPlugin().androidInfo;

      // 🔧 ТУТ БУЛИ warning-и: прибрав ?? ''
      final brand = info.brand.toLowerCase();
      final manufacturer = info.manufacturer.toLowerCase();
      final model = info.model.toLowerCase();

      final isSamsung = brand.contains('samsung') ||
          manufacturer.contains('samsung') ||
          model.startsWith('sm-');

      String? path;

      if (isSamsung) {
        // 🔹 Samsung → відкриваємо файловий менеджер / документ-пікер
        try {
          path = await _channel.invokeMethod<String>('openDocumentImage');
        } on PlatformException catch (e) {
          debugPrint(
              'openDocumentImage failed on Samsung, fallback to gallery: $e');
        }
      }

      // Якщо не Samsung або SAF не спрацював → стандартна галерея
      if (path == null || path.isEmpty) {
        final picker = ImagePicker();
        final picked = await picker.pickImage(source: ImageSource.gallery);
        path = picked?.path;
      }

      if (path == null) return null;

      // Перевіряємо GPS через native checkGps; якщо FAKE → чистимо
      try {
        final status =
            await _channel.invokeMethod<String>('checkGps', {'path': path});
        if (status == 'FAKE') {
          await removeGps(path: path);
        }
      } catch (e) {
        debugPrint('checkGps/removeGps error: $e');
      }

      return path;
    } else {
      // iOS / інші платформи — просто галерея
      final picker = ImagePicker();
      final picked = await picker.pickImage(source: ImageSource.gallery);
      return picked?.path;
    }
  } catch (e) {
    debugPrint('pickFromGallery error: $e');
    return null;
  }
}