From 0efa5d10ff6abb23ce7d7acb939ed7bb9ec146f2 Mon Sep 17 00:00:00 2001 From: Heron <heron.roman@gmail.com> Date: Tue, 31 Mar 2020 22:48:18 +0800 Subject: [PATCH] [image_picker] fix bug, sometimes double click cancel button will crash --- .../image_picker/image_picker/CHANGELOG.md | 4 ++++ .../ios/Classes/FLTImagePickerPlugin.m | 4 +++- .../ios/Tests/ImagePickerPluginTests.m | 20 +++++++++++++++++++ .../image_picker/image_picker/pubspec.yaml | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 75af68133df8..c557f4ac0a89 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 d01d0928089e..449157565e7f 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)imagePickerController:(UIImagePickerController *)picker - (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 b7f0d71fb95d..e5c681e7d956 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 @@ - (void)testPluginPickVideoDeviceBack { 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 5cfba84dc3a5..e9161748db56 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker 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: