[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"