[image_picker] Fix NSNull handling on iOS (#4728)
diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index 1b7d0ff..1712aa0 100644
--- a/packages/image_picker/image_picker/CHANGELOG.md
+++ b/packages/image_picker/image_picker/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.8.4+6
+
+* Fixes minor type issues in iOS implementation.
+
## 0.8.4+5
* Improves the documentation on handling MainActivity being killed by the Android OS.
diff --git a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
index 22d2032..f8fe668 100644
--- a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m
index b81b29f..c38930f 100644
--- a/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m
+++ b/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m
@@ -101,11 +101,10 @@
size_t numberOfFrames = CGImageSourceGetCount(imageSource);
- NSNumber *nilSize = (NSNumber *)[NSNull null];
NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF
image:imageGIF
- maxWidth:nilSize
- maxHeight:nilSize
+ maxWidth:nil
+ maxHeight:nil
imageQuality:nil];
XCTAssertNotNil(savedPathGIF);
XCTAssertEqualObjects([savedPathGIF substringFromIndex:savedPathGIF.length - 4], @".gif");
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
index b0edd03..5e77a6c 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
@@ -18,9 +18,10 @@
@interface FLTImagePickerImageUtil : NSObject
+// Resizes the given image to fit within maxWidth (if non-nil) and maxHeight (if non-nil)
+ (UIImage *)scaledImage:(UIImage *)image
- maxWidth:(NSNumber *)maxWidth
- maxHeight:(NSNumber *)maxHeight
+ maxWidth:(nullable NSNumber *)maxWidth
+ maxHeight:(nullable NSNumber *)maxHeight
isMetadataAvailable:(BOOL)isMetadataAvailable;
// Resize all gif animation frames.
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
index 7b45407..2d370aa 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
@@ -35,8 +35,8 @@
double originalWidth = image.size.width;
double originalHeight = image.size.height;
- bool hasMaxWidth = maxWidth != (id)[NSNull null];
- bool hasMaxHeight = maxHeight != (id)[NSNull null];
+ bool hasMaxWidth = maxWidth != nil;
+ bool hasMaxHeight = maxHeight != nil;
double width = hasMaxWidth ? MIN([maxWidth doubleValue], originalWidth) : originalWidth;
double height = hasMaxHeight ? MIN([maxHeight doubleValue], originalHeight) : originalHeight;
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
index cf31031..65a5fb8 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
@@ -16,6 +16,15 @@
#import "FLTImagePickerPhotoAssetUtil.h"
#import "FLTPHPickerSaveImageToPathOperation.h"
+/**
+ * Returns the value for the given key in 'dict', or nil if the value is
+ * NSNull.
+ */
+id GetNullableValueForKey(NSDictionary *dict, NSString *key) {
+ id value = dict[key];
+ return value == [NSNull null] ? nil : value;
+}
+
@interface FLTImagePickerPlugin () <UINavigationControllerDelegate,
UIImagePickerControllerDelegate,
PHPickerViewControllerDelegate,
@@ -397,9 +406,9 @@
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"];
+ NSNumber *maxWidth = GetNullableValueForKey(self->_arguments, @"maxWidth");
+ NSNumber *maxHeight = GetNullableValueForKey(self->_arguments, @"maxHeight");
+ NSNumber *imageQuality = GetNullableValueForKey(self->_arguments, @"imageQuality");
NSNumber *desiredImageQuality = [self getDesiredImageQuality:imageQuality];
NSOperationQueue *operationQueue = [NSOperationQueue new];
NSMutableArray *pathList = [self createNSMutableArrayWithSize:results.count];
@@ -480,14 +489,14 @@
if (image == nil) {
image = [info objectForKey:UIImagePickerControllerOriginalImage];
}
- NSNumber *maxWidth = [_arguments objectForKey:@"maxWidth"];
- NSNumber *maxHeight = [_arguments objectForKey:@"maxHeight"];
- NSNumber *imageQuality = [_arguments objectForKey:@"imageQuality"];
+ NSNumber *maxWidth = GetNullableValueForKey(_arguments, @"maxWidth");
+ NSNumber *maxHeight = GetNullableValueForKey(_arguments, @"maxHeight");
+ NSNumber *imageQuality = GetNullableValueForKey(_arguments, @"imageQuality");
NSNumber *desiredImageQuality = [self getDesiredImageQuality:imageQuality];
PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:info];
- if (maxWidth != (id)[NSNull null] || maxHeight != (id)[NSNull null]) {
+ if (maxWidth != nil || maxHeight != nil) {
image = [FLTImagePickerImageUtil scaledImage:image
maxWidth:maxWidth
maxHeight:maxHeight
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m
index 30da227..5a084c4 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m
@@ -91,7 +91,7 @@
PHAsset *originalAsset =
[FLTImagePickerPhotoAssetUtil getAssetFromPHPickerResult:self.result];
- if (self.maxWidth != (id)[NSNull null] || self.maxHeight != (id)[NSNull null]) {
+ if (self.maxWidth != nil || self.maxHeight != nil) {
localImage = [FLTImagePickerImageUtil scaledImage:localImage
maxWidth:self.maxWidth
maxHeight:self.maxHeight
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index 836c3ca..c072244 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/main/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.4+5
+version: 0.8.4+6
environment:
sdk: ">=2.14.0 <3.0.0"