camera_with_gps 2.5.3
camera_with_gps: ^2.5.3 copied to clipboard
Flutter plugin that captures photos with GPS coordinates embedded in EXIF. Includes pinch zoom, flash, aspect ratio toggle and gallery picker.
2.5.3 - 2026-05-25 #
- Fix — GPS no longer stripped / zeroed when picking from the gallery (Android)
- Root cause: Android 10+ redacts location EXIF from any image read through a
content URI unless the app holds
ACCESS_MEDIA_LOCATIONat runtime and reads the original viaMediaStore.setRequireOriginal(). The old SAF (ACTION_OPEN_DOCUMENT) copy did neither, so the picked file arrived without GPS (or with0,0), and the fake-GPS scrubber then "confirmed" the wipe. - Android picking now goes through a native
pickImageWithGps: it requestsACCESS_MEDIA_LOCATIONbefore opening the picker, thenACTION_PICKon the MediaStore images collection (yields a real MediaStore URI) →MediaStore.setRequireOriginal()→ copy of the un-redacted bytes read immediately after the pick. A single picker is shown; theImagePickerfallback only runs if the native picker cannot launch at all (no double-pick). - Picked images are no longer aggressively scrubbed: valid coordinates are
returned untouched. The only scrub left strips coordinates that are exactly
0,0(placeholder), so a picked photo never carries fake zeros — it has either real coordinates or no GPS at all. containsFakeSamsungGpsno longer flags a photo as fake on a1970-01-01GPS datestamp alone — that wiped valid coordinates from cameras that record location without a GPS time fix. Only missing /0,0coordinates count as fake now.
- Root cause: Android 10+ redacts location EXIF from any image read through a
content URI unless the app holds
- Dependencies: dropped
device_info_plus(was only used for Samsung detection, which the new MediaStore path makes unnecessary). - iOS:
camera_with_gps.podspecversion bumped to matchpubspec.yaml(was stuck at2.5.0).
2.5.2 - 2026-05-18 #
- Dependencies — widened version constraints
- All runtime dependencies now use open ranges spanning multiple major versions so consumer apps are not forced to downgrade. Specifically:
camera: ">=0.11.1 <0.13.0"geolocator: ">=13.0.4 <16.0.0"image: ">=4.5.4 <6.0.0"plugin_platform_interface: ">=2.1.8 <3.0.0"image_picker: ">=1.1.2 <3.0.0"device_info_plus: ">=11.5.0 <14.0.0"native_device_orientation: ">=2.0.4 <4.0.0"
- All runtime dependencies now use open ranges spanning multiple major versions so consumer apps are not forced to downgrade. Specifically:
2.5.1 - 2026-05-18 #
- Dependencies
- Removed unused
permission_handlerandexifdependencies frompubspec.yaml. Consumer apps are no longer constrained to specific versions of these packages.
- Removed unused
2.5.0 - 2026-05-12 #
- Zoom support
- Pinch-to-zoom over the camera preview (clamped to the device's
getMinZoomLevel/getMaxZoomLevel). - Preset buttons (
0.5x/1x/2x) above the shutter row, shown only when reachable by the active camera. - Zoom resets to
1xon camera switch and lifecycle resume.
- Pinch-to-zoom over the camera preview (clamped to the device's
- GPS performance
- Pre-warmed location via
Geolocator.getLastKnownPosition()+getPositionStream()while the camera is open. _handleGpsnow uses a bounded fallback chain (warmed → last-known →getCurrentPosition(timeLimit: 2s)) so a single shutter press no longer blocks for tens of seconds in airplane mode / cold-start scenarios.
- Pre-warmed location via
- Shutter latency: camera controller is now disposed after
Navigator.pop, saving ~300-500 ms of perceived delay. - Fixes
- Samsung SAF gallery picker no longer dead-locks when the user cancels the system file picker (Android
RESULT_CANCELEDnow resolvespendingResultwithnull). - Added the public library entry point
lib/camera_with_gps.dart—import 'package:camera_with_gps/camera_with_gps.dart';now works as documented. - Bundle identifier typo in the example app's Debug build configuration corrected.
- Samsung SAF gallery picker no longer dead-locks when the user cancels the system file picker (Android
- Polish
print(...)calls replaced withdebugPrint(...)so logs no longer leak to release builds of host apps.BottomBaraccepts an optionalabovewidget rendered inside the sameSafeAreaas the shutter row — used byZoomPresets, structurally cannot be covered by the controls panel.- iOS
camera_with_gps.podspecfilled with real metadata (was an autogenerated stub).
- Dependencies: SDK constraint tightened to
>=3.0.0 <4.0.0; direct dependencies switched to caret constraints on currently-resolved versions for pana scoring.
2.4.0 - 2026-02-04 #
- **Update to version 2.4.0 - Adjust dependency constraints, update SDK requirements,
- and prepare for compatibility with Flutter 3.10.0 and Dart 2.19.
2.3.1 - 2025-11-13 #
- ** "Introduce platform-specific gallery picker for Android and Samsung devices,
- improve GPS handling for picked images,
- and refactor photo processing code"
2.3.0 - 2025-11-13 #
- Platform-specific photo processing and preview handling:
- Split
PhotoProcessorinto platform-specific implementations (PhotoProcessorAndroidandPhotoProcessorIOS) - Split
PreviewBoxinto platform-specific implementations (PreviewBoxAndroidandPreviewBoxIOS) - Each platform now has independent rotation logic and preview behavior
- Split
- iOS improvements:
- Added adaptive preview that rotates to landscape when device is rotated
- Fixed photo rotation for both landscape orientations (left and right)
- Implemented correct aspect ratio calculation after rotation using actual dimensions
- Added 90° correction for landscape photos to ensure proper orientation
- Android improvements:
- Maintained portrait-only preview (UI locked to portrait)
- Integrated
OrientationServicefor accurate device orientation detection via sensors - Fixed horizontal photo rotation issues
- Preserved original working rotation logic
- Unified orientation detection:
- Both platforms now use
OrientationServicefor sensor-based orientation detection - iOS: Preview adapts with
setState()for dynamic UI updates - Android: Orientation tracked without
setState()to maintain fixed portrait preview
- Both platforms now use
- Code organization:
- Created platform-agnostic facade classes that delegate to platform-specific implementations
- Improved maintainability by separating iOS and Android behavior
- Added comprehensive debug logging for orientation changes and photo processing
2.2.0 - 2025-11-12 #
- **Refactor and enhance camera functionality: consolidate photo processing logic,
- introduce animated rotation for UI,
- refactor lifecycle handling,
- optimize orientation services,
- and update iOS configurations for EXIF and GPS metadata improvements."
2.0.0 - 2025-06-23 #
- Major refactoring of camera app structure:
- Split monolithic file into small, testable components
- Created dedicated services, widgets, and utility classes
- Improved code organization with clear separation of concerns
- Enhanced maintainability and testability
- Fixed iOS photo rotation issue:
- Corrected rotation angle for photos taken in landscape right orientation on iOS devices
- Updated code for better compatibility:
- Replaced pattern matching switch expressions with traditional switch statements
1.1.7 - 2025-06-22 #
- "Fix Android orientation detection issue where devices were always detecting landscapeLeft"
- "Improve image rotation logic for Android devices in landscape mode"
1.1.6 - 2025-06-22 #
- "Fix Android photo orientation issue when taking photos in landscape-right orientation"
1.1.5 2025-06-221 #
- "Add
removeGpsmethod to handle GPS metadata removal and enable corresponding iOS build warning for quoted includes"
1.1.4 2025-06-221 #
- "Refactor GPS metadata handling: remove confirmation dialog for invalid coordinates, streamline EXIF parsing,
- add
removeGpsmethod, and enhance gallery feature with detailed metadata display."
1.1.3 - 2025-06-20 #
- "Fix crash on launch in release APK by adding ProGuard rules to prevent obfuscation of critical classes"
1.1.2 - 2025-06-19 #
- "Update Android build configs: adjust minSdkVersion for example app and plugin to maintain compatibility"
1.1.1 - 2025-06-18 #
- Refactor CameraPreviewPage:
- Add orientation-aware UI, optimize GPS handling, and improve photo cropping/rotation logic"
- "Add device detection using
device_info_plusfor Samsung-specific gallery handling, - refine GPS checks, and update orientation-aware UI with enhanced margin adjustments"
0.2.0 - 2025-06-13 #
- Integrate permission_handler package and update configurations
- Added
permission_handlerdependency inpubspec.yamland example project - Updated iOS project configuration to include
permission_handler_apple - Removed unused permissions and microphone description in
Info.plist - Updated AndroidManifest.xml for clean-up of blank lines
- Added
0.1.1+1 - 2025-03-31 #
- Update
openCamerato requireBuildContextfor navigation - Replaced
navigatorKeywith aBuildContextparameter inopenCamerafor improved navigation handling
0.1.0+2 - 2025-03-24 #
- "Allow camera usage without GPS permission and enhance GPS status warnings"
0.1.0+3 - 2025-06-18 #
-
"Allow camera usage without GPS permission and enhance GPS status warnings"