[image_picker] iOS: fix bug, sometimes double click cancel button will crash (#2625)
diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index 75af681..c557f4a 100644
--- a/packages/image_picker/image_picker/CHANGELOG.md
+++ b/packages/image_picker/image_picker/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.6+4
+
+* Fix bug, sometimes double click cancel button will crash.
+
## 0.6.6+3
* Update README
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
index d01d092..4491575 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
@@ -326,8 +326,10 @@
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[_imagePickerController dismissViewControllerAnimated:YES completion:nil];
+ if (!self.result) {
+ return;
+ }
self.result(nil);
-
self.result = nil;
_arguments = nil;
}
diff --git a/packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m b/packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m
index b7f0d71..e5c681e 100644
--- a/packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m
+++ b/packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m
@@ -10,6 +10,7 @@
@interface FLTImagePickerPlugin (Test)
@property(copy, nonatomic) FlutterResult result;
- (void)handleSavedPath:(NSString *)path;
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
@end
@interface ImagePickerPluginTests : XCTestCase
@@ -66,6 +67,25 @@
UIImagePickerControllerCameraDeviceRear);
}
+- (void)testPluginPickImageDeviceCancelClickMultipleTimes {
+ if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
+ return;
+ }
+ FLTImagePickerPlugin *plugin =
+ [[FLTImagePickerPlugin alloc] initWithViewController:[UIViewController new]];
+ FlutterMethodCall *call =
+ [FlutterMethodCall methodCallWithMethodName:@"pickImage"
+ arguments:@{@"source" : @(0), @"cameraDevice" : @(1)}];
+ [plugin handleMethodCall:call
+ result:^(id _Nullable r){
+ }];
+ plugin.result = ^(id result) {
+
+ };
+ [plugin imagePickerControllerDidCancel:[plugin getImagePickerController]];
+ [plugin imagePickerControllerDidCancel:[plugin getImagePickerController]];
+}
+
- (void)testPluginPickVideoDeviceFront {
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
return;
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index 5cfba84..e916174 100755
--- a/packages/image_picker/image_picker/pubspec.yaml
+++ b/packages/image_picker/image_picker/pubspec.yaml
@@ -2,7 +2,7 @@
description: Flutter plugin for selecting images from the Android and iOS image
library, and taking new pictures with the camera.
homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker
-version: 0.6.6+3
+version: 0.6.6+4
flutter:
plugin: