Skip to content

Commit 9b2d46a

Browse files
[image_picker] Fix NSNull handling on iOS (flutter#4728)
1 parent 37b592c commit 9b2d46a

File tree

8 files changed

+30
-17
lines changed

8 files changed

+30
-17
lines changed

packages/image_picker/image_picker/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.8.4+6
2+
3+
* Fixes minor type issues in iOS implementation.
4+
15
## 0.8.4+5
26

37
* Improves the documentation on handling MainActivity being killed by the Android OS.

packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 46;
6+
objectVersion = 50;
77
objects = {
88

99
/* Begin PBXBuildFile section */

packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,10 @@ - (void)testSaveImageWithOriginalImageData_ShouldSaveAsGifAnimation {
101101

102102
size_t numberOfFrames = CGImageSourceGetCount(imageSource);
103103

104-
NSNumber *nilSize = (NSNumber *)[NSNull null];
105104
NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF
106105
image:imageGIF
107-
maxWidth:nilSize
108-
maxHeight:nilSize
106+
maxWidth:nil
107+
maxHeight:nil
109108
imageQuality:nil];
110109
XCTAssertNotNil(savedPathGIF);
111110
XCTAssertEqualObjects([savedPathGIF substringFromIndex:savedPathGIF.length - 4], @".gif");

packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
1818

1919
@interface FLTImagePickerImageUtil : NSObject
2020

21+
// Resizes the given image to fit within maxWidth (if non-nil) and maxHeight (if non-nil)
2122
+ (UIImage *)scaledImage:(UIImage *)image
22-
maxWidth:(NSNumber *)maxWidth
23-
maxHeight:(NSNumber *)maxHeight
23+
maxWidth:(nullable NSNumber *)maxWidth
24+
maxHeight:(nullable NSNumber *)maxHeight
2425
isMetadataAvailable:(BOOL)isMetadataAvailable;
2526

2627
// Resize all gif animation frames.

packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ + (UIImage *)scaledImage:(UIImage *)image
3535
double originalWidth = image.size.width;
3636
double originalHeight = image.size.height;
3737

38-
bool hasMaxWidth = maxWidth != (id)[NSNull null];
39-
bool hasMaxHeight = maxHeight != (id)[NSNull null];
38+
bool hasMaxWidth = maxWidth != nil;
39+
bool hasMaxHeight = maxHeight != nil;
4040

4141
double width = hasMaxWidth ? MIN([maxWidth doubleValue], originalWidth) : originalWidth;
4242
double height = hasMaxHeight ? MIN([maxHeight doubleValue], originalHeight) : originalHeight;

packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616
#import "FLTImagePickerPhotoAssetUtil.h"
1717
#import "FLTPHPickerSaveImageToPathOperation.h"
1818

19+
/**
20+
* Returns the value for the given key in 'dict', or nil if the value is
21+
* NSNull.
22+
*/
23+
id GetNullableValueForKey(NSDictionary *dict, NSString *key) {
24+
id value = dict[key];
25+
return value == [NSNull null] ? nil : value;
26+
}
27+
1928
@interface FLTImagePickerPlugin () <UINavigationControllerDelegate,
2029
UIImagePickerControllerDelegate,
2130
PHPickerViewControllerDelegate,
@@ -397,9 +406,9 @@ - (void)picker:(PHPickerViewController *)picker
397406
dispatch_queue_t backgroundQueue =
398407
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
399408
dispatch_async(backgroundQueue, ^{
400-
NSNumber *maxWidth = [self->_arguments objectForKey:@"maxWidth"];
401-
NSNumber *maxHeight = [self->_arguments objectForKey:@"maxHeight"];
402-
NSNumber *imageQuality = [self->_arguments objectForKey:@"imageQuality"];
409+
NSNumber *maxWidth = GetNullableValueForKey(self->_arguments, @"maxWidth");
410+
NSNumber *maxHeight = GetNullableValueForKey(self->_arguments, @"maxHeight");
411+
NSNumber *imageQuality = GetNullableValueForKey(self->_arguments, @"imageQuality");
403412
NSNumber *desiredImageQuality = [self getDesiredImageQuality:imageQuality];
404413
NSOperationQueue *operationQueue = [NSOperationQueue new];
405414
NSMutableArray *pathList = [self createNSMutableArrayWithSize:results.count];
@@ -480,14 +489,14 @@ - (void)imagePickerController:(UIImagePickerController *)picker
480489
if (image == nil) {
481490
image = [info objectForKey:UIImagePickerControllerOriginalImage];
482491
}
483-
NSNumber *maxWidth = [_arguments objectForKey:@"maxWidth"];
484-
NSNumber *maxHeight = [_arguments objectForKey:@"maxHeight"];
485-
NSNumber *imageQuality = [_arguments objectForKey:@"imageQuality"];
492+
NSNumber *maxWidth = GetNullableValueForKey(_arguments, @"maxWidth");
493+
NSNumber *maxHeight = GetNullableValueForKey(_arguments, @"maxHeight");
494+
NSNumber *imageQuality = GetNullableValueForKey(_arguments, @"imageQuality");
486495
NSNumber *desiredImageQuality = [self getDesiredImageQuality:imageQuality];
487496

488497
PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:info];
489498

490-
if (maxWidth != (id)[NSNull null] || maxHeight != (id)[NSNull null]) {
499+
if (maxWidth != nil || maxHeight != nil) {
491500
image = [FLTImagePickerImageUtil scaledImage:image
492501
maxWidth:maxWidth
493502
maxHeight:maxHeight

packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ - (void)start {
9191
PHAsset *originalAsset =
9292
[FLTImagePickerPhotoAssetUtil getAssetFromPHPickerResult:self.result];
9393

94-
if (self.maxWidth != (id)[NSNull null] || self.maxHeight != (id)[NSNull null]) {
94+
if (self.maxWidth != nil || self.maxHeight != nil) {
9595
localImage = [FLTImagePickerImageUtil scaledImage:localImage
9696
maxWidth:self.maxWidth
9797
maxHeight:self.maxHeight

packages/image_picker/image_picker/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image
33
library, and taking new pictures with the camera.
44
repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker
55
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
6-
version: 0.8.4+5
6+
version: 0.8.4+6
77

88
environment:
99
sdk: ">=2.14.0 <3.0.0"

0 commit comments

Comments
 (0)