pickFromGallery static method
Pick an image from the gallery. Samsung devices route through SAF / ACTION_OPEN_DOCUMENT because their stock gallery strips EXIF; other platforms use ImagePicker directly.
Implementation
static Future<String?> pickFromGallery() async {
try {
if (Platform.isAndroid) {
final info = await DeviceInfoPlugin().androidInfo;
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) {
try {
path = await _channel.invokeMethod<String>('openDocumentImage');
} on PlatformException catch (e) {
debugPrint(
'openDocumentImage failed on Samsung, fallback to gallery: $e');
}
}
if (path == null || path.isEmpty) {
final picker = ImagePicker();
final picked = await picker.pickImage(source: ImageSource.gallery);
path = picked?.path;
}
if (path == null) return null;
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 {
final picker = ImagePicker();
final picked = await picker.pickImage(source: ImageSource.gallery);
return picked?.path;
}
} catch (e) {
debugPrint('pickFromGallery error: $e');
return null;
}
}