From 2f14bccb535bbc3436608fcf65c35ce72f5c137f Mon Sep 17 00:00:00 2001 From: zhongwuzw Date: Mon, 20 Apr 2020 19:29:09 +0800 Subject: [PATCH 1/3] [image_picker] Fixes crash when an image in the gallery is tapped more than once --- packages/image_picker/CHANGELOG.md | 4 ++++ packages/image_picker/ios/Classes/FLTImagePickerPlugin.m | 7 +++++-- packages/image_picker/pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index b6f787a2ecac..e666682a55d2 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.6 + +* Fixes crash when an image in the gallery is tapped more than once. + ## 0.6.5 * Set maximum duration for video recording. diff --git a/packages/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/ios/Classes/FLTImagePickerPlugin.m index f866ee30fc5e..d01d0928089e 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerPlugin.m +++ b/packages/image_picker/ios/Classes/FLTImagePickerPlugin.m @@ -279,7 +279,7 @@ - (void)imagePickerController:(UIImagePickerController *)picker } self.result(videoURL.path); self.result = nil; - + _arguments = nil; } else { UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; if (image == nil) { @@ -322,7 +322,6 @@ - (void)imagePickerController:(UIImagePickerController *)picker }]; } } - _arguments = nil; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { @@ -357,6 +356,9 @@ - (void)saveImageWithPickerInfo:(NSDictionary *)info } - (void)handleSavedPath:(NSString *)path { + if (!self.result) { + return; + } if (path) { self.result(path); } else { @@ -365,6 +367,7 @@ - (void)handleSavedPath:(NSString *)path { details:nil]); } self.result = nil; + _arguments = nil; } @end diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index df8879e05a6a..259d0c9b0955 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/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 -version: 0.6.5 +version: 0.6.6 flutter: plugin: From 29be8d36595f98319b5de64d4e6b6110694bb117 Mon Sep 17 00:00:00 2001 From: zhongwuzw Date: Tue, 21 Apr 2020 14:25:22 +0800 Subject: [PATCH 2/3] Add one test case of crash --- .../ios/Tests/ImagePickerPluginTests.m | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/image_picker/ios/Tests/ImagePickerPluginTests.m b/packages/image_picker/ios/Tests/ImagePickerPluginTests.m index e961aab55bfd..bbc887b3a9ca 100644 --- a/packages/image_picker/ios/Tests/ImagePickerPluginTests.m +++ b/packages/image_picker/ios/Tests/ImagePickerPluginTests.m @@ -7,6 +7,11 @@ @import image_picker; @import XCTest; +@interface FLTImagePickerPlugin (Test) +@property(copy, nonatomic) FlutterResult result; +- (void)handleSavedPath:(NSString *)path; +@end + @interface ImagePickerPluginTests : XCTestCase @end @@ -90,4 +95,20 @@ - (void)testPickingVideoWithDuration { XCTAssertEqual([plugin getImagePickerController].videoMaximumDuration, 95); } +- (void)testPluginPickImageSelectMultipleTimes { + FLTImagePickerPlugin *plugin = + [[FLTImagePickerPlugin alloc] initWithViewController:[UIViewController new]]; + FlutterMethodCall *call = + [FlutterMethodCall methodCallWithMethodName:@"pickImage" + arguments:@{@"source" : @(0), @"cameraDevice" : @(0)}]; + [plugin handleMethodCall:call + result:^(id _Nullable r){ + }]; + plugin.result = ^(id result) { + + }; + [plugin handleSavedPath:@"test"]; + [plugin handleSavedPath:@"test"]; +} + @end From c04d09c2f71101ae7350ae4b59f3583fa0bee76a Mon Sep 17 00:00:00 2001 From: zhongwuzw Date: Tue, 21 Apr 2020 14:40:50 +0800 Subject: [PATCH 3/3] code format --- packages/image_picker/ios/Tests/ImagePickerPluginTests.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/ios/Tests/ImagePickerPluginTests.m b/packages/image_picker/ios/Tests/ImagePickerPluginTests.m index bbc887b3a9ca..b7f0d71fb95d 100644 --- a/packages/image_picker/ios/Tests/ImagePickerPluginTests.m +++ b/packages/image_picker/ios/Tests/ImagePickerPluginTests.m @@ -105,7 +105,7 @@ - (void)testPluginPickImageSelectMultipleTimes { result:^(id _Nullable r){ }]; plugin.result = ^(id result) { - + }; [plugin handleSavedPath:@"test"]; [plugin handleSavedPath:@"test"];