-
Notifications
You must be signed in to change notification settings - Fork 9.7k
[image_picker] add requestFullMetadata for iOS (optional permissions) - platform interface #5603
Changes from 7 commits
3335935
93874c0
2983b84
fdeb8bf
577f6bf
1e94e07
ca7e4b4
816b59b
ffb2d79
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,10 @@ | ||
## 2.5.0 | ||
|
||
* Makes `getImage` deprecated in favor of a new method `getImageFromSource`. | ||
* Adds `requestFullMetadata` option that allows disabling extra permission requests | ||
on certain platforms. | ||
* Moves optional image picking parameters to `ImagePickerOptions` class. | ||
|
||
|
||
## 2.4.4 | ||
|
||
* Internal code cleanup for stricter analysis options. | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -146,6 +146,8 @@ abstract class ImagePickerPlatform extends PlatformInterface { | |
throw UnimplementedError('retrieveLostData() has not been implemented.'); | ||
} | ||
|
||
/// This method is deprecated in favor of [getImageFromSource] and will be removed in a future update. | ||
/// | ||
/// Returns an [XFile] with the image that was picked. | ||
/// | ||
/// The `source` argument controls where the image comes from. This can | ||
|
@@ -251,4 +253,32 @@ abstract class ImagePickerPlatform extends PlatformInterface { | |
Future<LostDataResponse> getLostData() { | ||
throw UnimplementedError('getLostData() has not been implemented.'); | ||
} | ||
|
||
/// Returns an [XFile] with the image that was picked. | ||
/// | ||
/// The `source` argument controls where the image comes from. This can | ||
/// be either [ImageSource.camera] or [ImageSource.gallery]. | ||
/// | ||
/// The `options` argument controls additional settings that can be used when picking an image. See [ImagePickerOptions] | ||
/// for more details. | ||
/// | ||
/// Where iOS supports HEIC images, Android 8 and below doesn't. Android 9 and above only support HEIC images if used | ||
/// in addition to a size modification, of which the usage is explained in [ImagePickerOptions]. | ||
/// | ||
/// In Android, the MainActivity can be destroyed for various reasons. If that happens, the result will be lost | ||
/// in this call. You can then call [getLostData] when your app relaunches to retrieve the lost data. | ||
/// | ||
/// If no images were picked, the return value is null. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please wrap all the lines in this comment block to 80 characters. |
||
Future<XFile?> getImageFromSource({ | ||
required ImageSource source, | ||
ImagePickerOptions options = const ImagePickerOptions(), | ||
}) { | ||
return getImage( | ||
source: source, | ||
maxHeight: options.maxHeight, | ||
maxWidth: options.maxWidth, | ||
imageQuality: options.imageQuality, | ||
preferredCameraDevice: options.preferredCameraDevice, | ||
); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// Copyright 2013 The Flutter Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
import 'package:image_picker_platform_interface/src/types/types.dart'; | ||
|
||
/// Specifies options for picking a single image from the device's camera or gallery. | ||
class ImagePickerOptions { | ||
/// Creates an instance with the given [maxHeight], [maxWidth], [imageQuality], | ||
/// [referredCameraDevice] and [requestFullMetadata]. | ||
const ImagePickerOptions({ | ||
this.maxHeight, | ||
this.maxWidth, | ||
this.imageQuality, | ||
this.preferredCameraDevice = CameraDevice.rear, | ||
this.requestFullMetadata = true, | ||
}); | ||
|
||
/// The maximum width of the image, in pixels. | ||
/// | ||
/// If null, the image will only be resized if [maxHeight] is specified. | ||
final double? maxWidth; | ||
|
||
/// The maximum height of the image, in pixels. | ||
/// | ||
/// If null, the image will only be resized if maxWidth is specified. | ||
|
||
final double? maxHeight; | ||
|
||
/// Modifies the quality of the image, ranging from 0-100 where 100 is the | ||
/// original/max quality. | ||
/// | ||
/// If null, the image will be returned with the original quality. Compression | ||
/// is only supported for certain image types such as JPEG. If compression is | ||
/// not supported for the image that is picked, a warning message will be logged. | ||
|
||
final int? imageQuality; | ||
|
||
/// Used to specify the camera to use when the `source` is [ImageSource.camera]. | ||
/// | ||
/// Ignored if the source is not [ImageSource.camera], or the chosen camera is not | ||
/// supported on the device. Defaults to [CameraDevice.rear]. | ||
final CameraDevice preferredCameraDevice; | ||
|
||
/// If true, requests full image metadata, which may require extra permissions | ||
/// on some platforms, (e.g., NSPhotoLibraryUsageDescription on iOS). | ||
// | ||
// Defaults to true. | ||
final bool requestFullMetadata; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: change "Makes
getImage
deprecated" to "DeprecatesgetImage
".