pickFromGallery static method
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;
}
}