[image_picker] Fix pickImage not returning on iOS when dismissing the PHPicker view by swiping down. (#4228)

diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index 4f21ed3..a925597 100644
--- a/packages/image_picker/image_picker/CHANGELOG.md
+++ b/packages/image_picker/image_picker/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.8.3+3
 
+* Fix pickImage not returning a value on iOS when dismissing PHPicker sheet by swiping.
 * Updated Android lint settings.
 
 ## 0.8.3+2
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
index 4084ae6..cf31031 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
@@ -18,7 +18,8 @@
 
 @interface FLTImagePickerPlugin () <UINavigationControllerDelegate,
                                     UIImagePickerControllerDelegate,
-                                    PHPickerViewControllerDelegate>
+                                    PHPickerViewControllerDelegate,
+                                    UIAdaptivePresentationControllerDelegate>
 
 @property(copy, nonatomic) FlutterResult result;
 
@@ -92,6 +93,7 @@
 
   _pickerViewController = [[PHPickerViewController alloc] initWithConfiguration:config];
   _pickerViewController.delegate = self;
+  _pickerViewController.presentationController.delegate = self;
 
   self.maxImagesAllowed = maxImagesAllowed;
 
@@ -373,18 +375,28 @@
   return imageQuality;
 }
 
+- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController {
+  if (self.result != nil) {
+    self.result(nil);
+    self.result = nil;
+    self->_arguments = nil;
+  }
+}
+
 - (void)picker:(PHPickerViewController *)picker
     didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)) {
   [picker dismissViewControllerAnimated:YES completion:nil];
-  dispatch_queue_t backgroundQueue =
-      dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
-  dispatch_async(backgroundQueue, ^{
-    if (results.count == 0) {
+  if (results.count == 0) {
+    if (self.result != nil) {
       self.result(nil);
       self.result = nil;
       self->_arguments = nil;
-      return;
     }
+    return;
+  }
+  dispatch_queue_t backgroundQueue =
+      dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
+  dispatch_async(backgroundQueue, ^{
     NSNumber *maxWidth = [self->_arguments objectForKey:@"maxWidth"];
     NSNumber *maxHeight = [self->_arguments objectForKey:@"maxHeight"];
     NSNumber *imageQuality = [self->_arguments objectForKey:@"imageQuality"];
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index e167d8a..4becca9 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/master/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.3+2
+version: 0.8.3+3
 
 environment:
   sdk: ">=2.12.0 <3.0.0"