pickImage static method
Future<AdaptiveFile?>
pickImage({
- ImageSource source = ImageSource.gallery,
- CropOptions? cropOptions,
- CompressionOptions? compressionOptions,
- BuildContext? context,
- CameraDevice preferredCameraDevice = CameraDevice.rear,
- MediaType mediaType = MediaType.image,
Picks a single image from the specified source (Gallery, Camera, or URL).
Optionally chains cropping (cropOptions) and/or compression (compressionOptions).
Implementation
static Future<AdaptiveFile?> pickImage({
ImageSource source = ImageSource.gallery,
CropOptions? cropOptions,
CompressionOptions? compressionOptions,
BuildContext? context,
CameraDevice preferredCameraDevice = CameraDevice.rear,
MediaType mediaType = MediaType.image,
}) async {
AdaptiveFile? pickedFile;
if (source == ImageSource.camera) {
pickedFile = await AdaptiveImagePickerPlatform.instance.takePhoto(
PickerOptions(
source: ImageSource.camera,
mediaType: mediaType,
preferredCameraDevice: preferredCameraDevice,
),
);
} else if (source == ImageSource.gallery) {
final results = await AdaptiveImagePickerPlatform.instance.pickImages(
PickerOptions(
source: ImageSource.gallery,
mediaType: mediaType,
maxCount: 1,
),
);
if (results.isNotEmpty) {
pickedFile = results.first;
}
} else if (source == ImageSource.url) {
if (context == null) {
throw ArgumentError('BuildContext is required when source is ImageSource.url');
}
final url = await MediaBottomSheet.showUrlInputDialog(context);
if (url != null && url.isNotEmpty) {
pickedFile = await fromUrl(url);
}
}
if (pickedFile == null) return null;
// Apply crop if requested and context is available
if (cropOptions != null && context != null && context.mounted) {
pickedFile = await cropImage(
file: pickedFile,
context: context,
options: cropOptions,
);
if (pickedFile == null) return null;
}
// Apply compression if requested
if (compressionOptions != null) {
pickedFile = await compressImage(
file: pickedFile,
options: compressionOptions,
);
}
return pickedFile;
}