[image_picker] add requestFullMetadata for iOS (optional permissions) (#5915)

diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index ccf1cb3..7619256 100644
--- a/packages/image_picker/image_picker/CHANGELOG.md
+++ b/packages/image_picker/image_picker/CHANGELOG.md
@@ -1,7 +1,8 @@
-## NEXT
+## 0.8.6
 
 * Updates minimum Flutter version to 2.10.
 * Fixes avoid_redundant_argument_values lint warnings and minor typos.
+* Adds `requestFullMetadata` option to `pickImage`, so images on iOS can be picked without `Photo Library Usage` permission.
 
 ## 0.8.5+3
 
diff --git a/packages/image_picker/image_picker/README.md b/packages/image_picker/image_picker/README.md
index 2fa20be..aadfc83 100755
--- a/packages/image_picker/image_picker/README.md
+++ b/packages/image_picker/image_picker/README.md
@@ -23,6 +23,7 @@
 Add the following keys to your _Info.plist_ file, located in `<project root>/ios/Runner/Info.plist`:
 
 * `NSPhotoLibraryUsageDescription` - describe why your app needs permission for the photo library. This is called _Privacy - Photo Library Usage Description_ in the visual editor.
+  * This permission is not required for image picking on iOS 11+ if you pass `false` for `requestFullMetadata`.
 * `NSCameraUsageDescription` - describe why your app needs access to the camera. This is called _Privacy - Camera Usage Description_ in the visual editor.
 * `NSMicrophoneUsageDescription` - describe why your app needs access to the microphone, if you intend to record videos. This is called _Privacy - Microphone Usage Description_ in the visual editor.
 
diff --git a/packages/image_picker/image_picker/example/lib/main.dart b/packages/image_picker/image_picker/example/lib/main.dart
index 4eecc5f..5e448dd 100755
--- a/packages/image_picker/image_picker/example/lib/main.dart
+++ b/packages/image_picker/image_picker/example/lib/main.dart
@@ -93,7 +93,7 @@
       await _displayPickImageDialog(context!,
           (double? maxWidth, double? maxHeight, int? quality) async {
         try {
-          final List<XFile>? pickedFileList = await _picker.pickMultiImage(
+          final List<XFile> pickedFileList = await _picker.pickMultiImage(
             maxWidth: maxWidth,
             maxHeight: maxHeight,
             imageQuality: quality,
diff --git a/packages/image_picker/image_picker/lib/image_picker.dart b/packages/image_picker/image_picker/lib/image_picker.dart
index 84c6490..2e266cc 100755
--- a/packages/image_picker/image_picker/lib/image_picker.dart
+++ b/packages/image_picker/image_picker/lib/image_picker.dart
@@ -173,8 +173,9 @@
   /// The `source` argument controls where the image comes from. This can
   /// be either [ImageSource.camera] or [ImageSource.gallery].
   ///
-  /// Where iOS supports HEIC images, Android 8 and below doesn't. Android 9 and above only support HEIC images if used
-  /// in addition to a size modification, of which the usage is explained below.
+  /// Where iOS supports HEIC images, Android 8 and below doesn't. Android 9 and
+  /// above only support HEIC images if used in addition to a size modification,
+  /// of which the usage is explained below.
   ///
   /// If specified, the image will be at most `maxWidth` wide and
   /// `maxHeight` tall. Otherwise the image will be returned at it's
@@ -182,14 +183,22 @@
   /// The `imageQuality` argument modifies the quality of the image, ranging from 0-100
   /// where 100 is the original/max quality. If `imageQuality` is null, the image with
   /// the original quality will be returned. Compression is only supported for certain
-  /// image types such as JPEG and on Android PNG and WebP, too. If compression is not supported for the image that is picked,
-  /// a warning message will be logged.
+  /// image types such as JPEG and on Android PNG and WebP, too. If compression is not
+  /// supported for the image that is picked, a warning message will be logged.
   ///
-  /// Use `preferredCameraDevice` to specify the camera to use when the `source` is [ImageSource.camera].
-  /// The `preferredCameraDevice` is ignored when `source` is [ImageSource.gallery]. It is also ignored if the chosen camera is not supported on the device.
-  /// Defaults to [CameraDevice.rear]. Note that Android has no documented parameter for an intent to specify if
-  /// the front or rear camera should be opened, this function is not guaranteed
-  /// to work on an Android device.
+  /// Use `preferredCameraDevice` to specify the camera to use when the `source` is
+  /// [ImageSource.camera].
+  /// The `preferredCameraDevice` is ignored when `source` is [ImageSource.gallery].
+  /// It is also ignored if the chosen camera is not supported on the device.
+  /// Defaults to [CameraDevice.rear]. Note that Android has no documented parameter
+  /// for an intent to specify if the front or rear camera should be opened, this
+  /// function is not guaranteed to work on an Android device.
+  ///
+  /// Use `requestFullMetadata` (defaults to `true`) to control how much additional
+  /// information the plugin tries to get.
+  /// If `requestFullMetadata` is set to `true`, the plugin tries to get the full
+  /// image metadata which may require extra permission requests on some platforms,
+  /// such as `Photo Library Usage` permission on iOS.
   ///
   /// In Android, the MainActivity can be destroyed for various reasons. If that happens, the result will be lost
   /// in this call. You can then call [retrieveLostData] when your app relaunches to retrieve the lost data.
@@ -206,6 +215,7 @@
     double? maxHeight,
     int? imageQuality,
     CameraDevice preferredCameraDevice = CameraDevice.rear,
+    bool requestFullMetadata = true,
   }) {
     if (imageQuality != null && (imageQuality < 0 || imageQuality > 100)) {
       throw ArgumentError.value(
@@ -218,12 +228,15 @@
       throw ArgumentError.value(maxHeight, 'maxHeight', 'cannot be negative');
     }
 
-    return platform.getImage(
+    return platform.getImageFromSource(
       source: source,
-      maxWidth: maxWidth,
-      maxHeight: maxHeight,
-      imageQuality: imageQuality,
-      preferredCameraDevice: preferredCameraDevice,
+      options: ImagePickerOptions(
+        maxWidth: maxWidth,
+        maxHeight: maxHeight,
+        imageQuality: imageQuality,
+        preferredCameraDevice: preferredCameraDevice,
+        requestFullMetadata: requestFullMetadata,
+      ),
     );
   }
 
@@ -239,11 +252,18 @@
   /// If specified, the images will be at most `maxWidth` wide and
   /// `maxHeight` tall. Otherwise the images will be returned at it's
   /// original width and height.
+  ///
   /// The `imageQuality` argument modifies the quality of the images, ranging from 0-100
   /// where 100 is the original/max quality. If `imageQuality` is null, the images with
   /// the original quality will be returned. Compression is only supported for certain
-  /// image types such as JPEG and on Android PNG and WebP, too. If compression is not supported for the image that is picked,
-  /// a warning message will be logged.
+  /// image types such as JPEG and on Android PNG and WebP, too. If compression is not
+  /// supported for the image that is picked, a warning message will be logged.
+  ///
+  /// Use `requestFullMetadata` (defaults to `true`) to control how much additional
+  /// information the plugin tries to get.
+  /// If `requestFullMetadata` is set to `true`, the plugin tries to get the full
+  /// image metadata which may require extra permission requests on some platforms,
+  /// such as `Photo Library Usage` permission on iOS.
   ///
   /// The method could throw [PlatformException] if the app does not have permission to access
   /// the camera or photos gallery, no camera is available, plugin is already in use,
@@ -251,10 +271,11 @@
   /// be allocated (Android only) or due to an unknown error.
   ///
   /// See also [pickImage] to allow users to only pick a single image.
-  Future<List<XFile>?> pickMultiImage({
+  Future<List<XFile>> pickMultiImage({
     double? maxWidth,
     double? maxHeight,
     int? imageQuality,
+    bool requestFullMetadata = true,
   }) {
     if (imageQuality != null && (imageQuality < 0 || imageQuality > 100)) {
       throw ArgumentError.value(
@@ -267,10 +288,15 @@
       throw ArgumentError.value(maxHeight, 'maxHeight', 'cannot be negative');
     }
 
-    return platform.getMultiImage(
-      maxWidth: maxWidth,
-      maxHeight: maxHeight,
-      imageQuality: imageQuality,
+    return platform.getMultiImageWithOptions(
+      options: MultiImagePickerOptions(
+        imageOptions: ImageOptions(
+          maxWidth: maxWidth,
+          maxHeight: maxHeight,
+          imageQuality: imageQuality,
+          requestFullMetadata: requestFullMetadata,
+        ),
+      ),
     );
   }
 
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index 58f9f06..7fed3bf 100755
--- a/packages/image_picker/image_picker/pubspec.yaml
+++ b/packages/image_picker/image_picker/pubspec.yaml
@@ -3,7 +3,7 @@
   library, and taking new pictures with the camera.
 repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
-version: 0.8.5+3
+version: 0.8.6
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -24,8 +24,8 @@
     sdk: flutter
   image_picker_android: ^0.8.4+11
   image_picker_for_web: ^2.1.0
-  image_picker_ios: ^0.8.4+11
-  image_picker_platform_interface: ^2.3.0
+  image_picker_ios: ^0.8.6+1
+  image_picker_platform_interface: ^2.6.1
 
 dev_dependencies:
   build_runner: ^2.1.10
diff --git a/packages/image_picker/image_picker/test/image_picker_test.dart b/packages/image_picker/image_picker/test/image_picker_test.dart
index 10b5ac1..2d959bd 100644
--- a/packages/image_picker/image_picker/test/image_picker_test.dart
+++ b/packages/image_picker/image_picker/test/image_picker_test.dart
@@ -29,12 +29,8 @@
     group('#Single image/video', () {
       group('#pickImage', () {
         setUp(() {
-          when(mockPlatform.getImage(
-                  source: anyNamed('source'),
-                  maxWidth: anyNamed('maxWidth'),
-                  maxHeight: anyNamed('maxHeight'),
-                  imageQuality: anyNamed('imageQuality'),
-                  preferredCameraDevice: anyNamed('preferredCameraDevice')))
+          when(mockPlatform.getImageFromSource(
+                  source: anyNamed('source'), options: anyNamed('options')))
               .thenAnswer((Invocation _) async => null);
         });
 
@@ -44,8 +40,20 @@
           await picker.pickImage(source: ImageSource.gallery);
 
           verifyInOrder(<Object>[
-            mockPlatform.getImage(source: ImageSource.camera),
-            mockPlatform.getImage(source: ImageSource.gallery),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>(),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.gallery,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>(),
+                named: 'options',
+              ),
+            ),
           ]);
         });
 
@@ -76,20 +84,111 @@
               imageQuality: 70);
 
           verifyInOrder(<Object>[
-            mockPlatform.getImage(source: ImageSource.camera),
-            mockPlatform.getImage(source: ImageSource.camera, maxWidth: 10.0),
-            mockPlatform.getImage(source: ImageSource.camera, maxHeight: 10.0),
-            mockPlatform.getImage(
-                source: ImageSource.camera, maxWidth: 10.0, maxHeight: 20.0),
-            mockPlatform.getImage(
-                source: ImageSource.camera, maxWidth: 10.0, imageQuality: 70),
-            mockPlatform.getImage(
-                source: ImageSource.camera, maxHeight: 10.0, imageQuality: 70),
-            mockPlatform.getImage(
-                source: ImageSource.camera,
-                maxWidth: 10.0,
-                maxHeight: 20.0,
-                imageQuality: 70),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', isNull)
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', isNull)
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        isNull),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', equals(10.0))
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', isNull)
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        isNull),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', isNull)
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', equals(10.0))
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        isNull),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', equals(10.0))
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', equals(20.0))
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        isNull),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', equals(10.0))
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', isNull)
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', isNull)
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', equals(10.0))
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getImageFromSource(
+              source: ImageSource.camera,
+              options: argThat(
+                isInstanceOf<ImagePickerOptions>()
+                    .having((ImagePickerOptions options) => options.maxWidth,
+                        'maxWidth', equals(10.0))
+                    .having((ImagePickerOptions options) => options.maxHeight,
+                        'maxHeight', equals(20.0))
+                    .having(
+                        (ImagePickerOptions options) => options.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
           ]);
         });
 
@@ -117,7 +216,16 @@
           final ImagePicker picker = ImagePicker();
           await picker.pickImage(source: ImageSource.camera);
 
-          verify(mockPlatform.getImage(source: ImageSource.camera));
+          verify(mockPlatform.getImageFromSource(
+            source: ImageSource.camera,
+            options: argThat(
+              isInstanceOf<ImagePickerOptions>().having(
+                  (ImagePickerOptions options) => options.preferredCameraDevice,
+                  'preferredCameraDevice',
+                  equals(CameraDevice.rear)),
+              named: 'options',
+            ),
+          ));
         });
 
         test('camera position can set to front', () async {
@@ -126,9 +234,51 @@
               source: ImageSource.camera,
               preferredCameraDevice: CameraDevice.front);
 
-          verify(mockPlatform.getImage(
-              source: ImageSource.camera,
-              preferredCameraDevice: CameraDevice.front));
+          verify(mockPlatform.getImageFromSource(
+            source: ImageSource.camera,
+            options: argThat(
+              isInstanceOf<ImagePickerOptions>().having(
+                  (ImagePickerOptions options) => options.preferredCameraDevice,
+                  'preferredCameraDevice',
+                  equals(CameraDevice.front)),
+              named: 'options',
+            ),
+          ));
+        });
+
+        test('full metadata argument defaults to true', () async {
+          final ImagePicker picker = ImagePicker();
+          await picker.pickImage(source: ImageSource.gallery);
+
+          verify(mockPlatform.getImageFromSource(
+            source: ImageSource.gallery,
+            options: argThat(
+              isInstanceOf<ImagePickerOptions>().having(
+                  (ImagePickerOptions options) => options.requestFullMetadata,
+                  'requestFullMetadata',
+                  isTrue),
+              named: 'options',
+            ),
+          ));
+        });
+
+        test('passes the full metadata argument correctly', () async {
+          final ImagePicker picker = ImagePicker();
+          await picker.pickImage(
+            source: ImageSource.gallery,
+            requestFullMetadata: false,
+          );
+
+          verify(mockPlatform.getImageFromSource(
+            source: ImageSource.gallery,
+            options: argThat(
+              isInstanceOf<ImagePickerOptions>().having(
+                  (ImagePickerOptions options) => options.requestFullMetadata,
+                  'requestFullMetadata',
+                  isFalse),
+              named: 'options',
+            ),
+          ));
         });
       });
 
@@ -250,11 +400,11 @@
 
     group('#Multi images', () {
       setUp(() {
-        when(mockPlatform.getMultiImage(
-                maxWidth: anyNamed('maxWidth'),
-                maxHeight: anyNamed('maxHeight'),
-                imageQuality: anyNamed('imageQuality')))
-            .thenAnswer((Invocation _) async => null);
+        when(
+          mockPlatform.getMultiImageWithOptions(
+            options: anyNamed('options'),
+          ),
+        ).thenAnswer((Invocation _) async => <XFile>[]);
       });
 
       group('#pickMultiImage', () {
@@ -283,14 +433,101 @@
               maxWidth: 10.0, maxHeight: 20.0, imageQuality: 70);
 
           verifyInOrder(<Object>[
-            mockPlatform.getMultiImage(),
-            mockPlatform.getMultiImage(maxWidth: 10.0),
-            mockPlatform.getMultiImage(maxHeight: 10.0),
-            mockPlatform.getMultiImage(maxWidth: 10.0, maxHeight: 20.0),
-            mockPlatform.getMultiImage(maxWidth: 10.0, imageQuality: 70),
-            mockPlatform.getMultiImage(maxHeight: 10.0, imageQuality: 70),
-            mockPlatform.getMultiImage(
-                maxWidth: 10.0, maxHeight: 20.0, imageQuality: 70),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>(),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>().having(
+                    (MultiImagePickerOptions options) =>
+                        options.imageOptions.maxWidth,
+                    'maxWidth',
+                    equals(10.0)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>().having(
+                    (MultiImagePickerOptions options) =>
+                        options.imageOptions.maxHeight,
+                    'maxHeight',
+                    equals(10.0)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>()
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxWidth,
+                        'maxWidth',
+                        equals(10.0))
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxHeight,
+                        'maxHeight',
+                        equals(20.0)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>()
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxWidth,
+                        'maxWidth',
+                        equals(10.0))
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>()
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxHeight,
+                        'maxHeight',
+                        equals(10.0))
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
+            mockPlatform.getMultiImageWithOptions(
+              options: argThat(
+                isInstanceOf<MultiImagePickerOptions>()
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxWidth,
+                        'maxWidth',
+                        equals(10.0))
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.maxWidth,
+                        'maxHeight',
+                        equals(10.0))
+                    .having(
+                        (MultiImagePickerOptions options) =>
+                            options.imageOptions.imageQuality,
+                        'imageQuality',
+                        equals(70)),
+                named: 'options',
+              ),
+            ),
           ]);
         });
 
@@ -307,11 +544,45 @@
           );
         });
 
-        test('handles a null image file response gracefully', () async {
+        test('handles an empty image file response gracefully', () async {
           final ImagePicker picker = ImagePicker();
 
-          expect(await picker.pickMultiImage(), isNull);
-          expect(await picker.pickMultiImage(), isNull);
+          expect(await picker.pickMultiImage(), isEmpty);
+          expect(await picker.pickMultiImage(), isEmpty);
+        });
+
+        test('full metadata argument defaults to true', () async {
+          final ImagePicker picker = ImagePicker();
+          await picker.pickMultiImage();
+
+          verify(mockPlatform.getMultiImageWithOptions(
+            options: argThat(
+              isInstanceOf<MultiImagePickerOptions>().having(
+                  (MultiImagePickerOptions options) =>
+                      options.imageOptions.requestFullMetadata,
+                  'requestFullMetadata',
+                  isTrue),
+              named: 'options',
+            ),
+          ));
+        });
+
+        test('passes the full metadata argument correctly', () async {
+          final ImagePicker picker = ImagePicker();
+          await picker.pickMultiImage(
+            requestFullMetadata: false,
+          );
+
+          verify(mockPlatform.getMultiImageWithOptions(
+            options: argThat(
+              isInstanceOf<MultiImagePickerOptions>().having(
+                  (MultiImagePickerOptions options) =>
+                      options.imageOptions.requestFullMetadata,
+                  'requestFullMetadata',
+                  isFalse),
+              named: 'options',
+            ),
+          ));
         });
       });
     });
diff --git a/packages/image_picker/image_picker/test/image_picker_test.mocks.dart b/packages/image_picker/image_picker/test/image_picker_test.mocks.dart
index a79d076..f749b53 100644
--- a/packages/image_picker/image_picker/test/image_picker_test.mocks.dart
+++ b/packages/image_picker/image_picker/test/image_picker_test.mocks.dart
@@ -51,6 +51,7 @@
               }),
               returnValue: Future<_i2.PickedFile?>.value())
           as _i4.Future<_i2.PickedFile?>);
+
   @override
   _i4.Future<List<_i2.PickedFile>?> pickMultiImage(
           {double? maxWidth, double? maxHeight, int? imageQuality}) =>
@@ -62,6 +63,7 @@
               }),
               returnValue: Future<List<_i2.PickedFile>?>.value())
           as _i4.Future<List<_i2.PickedFile>?>);
+
   @override
   _i4.Future<_i2.PickedFile?> pickVideo(
           {_i2.ImageSource? source,
@@ -75,11 +77,13 @@
               }),
               returnValue: Future<_i2.PickedFile?>.value())
           as _i4.Future<_i2.PickedFile?>);
+
   @override
   _i4.Future<_i2.LostData> retrieveLostData() =>
       (super.noSuchMethod(Invocation.method(#retrieveLostData, []),
               returnValue: Future<_i2.LostData>.value(_FakeLostData_0()))
           as _i4.Future<_i2.LostData>);
+
   @override
   _i4.Future<_i5.XFile?> getImage(
           {_i2.ImageSource? source,
@@ -96,6 +100,7 @@
             #preferredCameraDevice: preferredCameraDevice
           }),
           returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>);
+
   @override
   _i4.Future<List<_i5.XFile>?> getMultiImage(
           {double? maxWidth, double? maxHeight, int? imageQuality}) =>
@@ -107,6 +112,7 @@
               }),
               returnValue: Future<List<_i5.XFile>?>.value())
           as _i4.Future<List<_i5.XFile>?>);
+
   @override
   _i4.Future<_i5.XFile?> getVideo(
           {_i2.ImageSource? source,
@@ -119,12 +125,14 @@
             #maxDuration: maxDuration
           }),
           returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>);
+
   @override
   _i4.Future<_i2.LostDataResponse> getLostData() =>
       (super.noSuchMethod(Invocation.method(#getLostData, []),
               returnValue:
                   Future<_i2.LostDataResponse>.value(_FakeLostDataResponse_1()))
           as _i4.Future<_i2.LostDataResponse>);
+
   @override
   _i4.Future<_i5.XFile?> getImageFromSource(
           {_i2.ImageSource? source,
@@ -133,4 +141,14 @@
           Invocation.method(
               #getImageFromSource, [], {#source: source, #options: options}),
           returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>);
+
+  @override
+  _i4.Future<List<_i5.XFile>> getMultiImageWithOptions(
+          {_i2.MultiImagePickerOptions? options =
+              const _i2.MultiImagePickerOptions()}) =>
+      (super.noSuchMethod(
+          Invocation.method(#getMultiImageWithOptions, [], {#options: options}),
+          returnValue:
+              Future<List<_i5.XFile>>.value(<_i5.XFile>[])) as _i4
+          .Future<List<_i5.XFile>>);
 }