pickImage static method

Future<AdaptiveFile?> pickImage({
  1. ImageSource source = ImageSource.gallery,
  2. CropOptions? cropOptions,
  3. CompressionOptions? compressionOptions,
  4. BuildContext? context,
  5. CameraDevice preferredCameraDevice = CameraDevice.rear,
  6. 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;
}