[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"