pickImage method

Future<XFile?> pickImage({
  1. required BuildContext context,
  2. required MountedCheck mounted,
  3. required ImageSource source,
  4. bool crop = false,
  5. bool compress = false,
  6. int quality = 35,
  7. double? maxHeight,
  8. double? maxWidth,
})

Picks an image from the given source, optionally crops and compresses it. Uses mounted callback to avoid context misuse after async gaps.

Implementation

Future<XFile?> pickImage({
  required BuildContext context,
  required MountedCheck mounted,
  required ImageSource source,
  bool crop = false,
  bool compress = false,
  int quality = 35,
  double? maxHeight,
  double? maxWidth,
}) async {
  try {
    XFile? pickedFile = await pickerService.pickImage(
      source: source,
      maxHeight: maxHeight,
      maxWidth: maxWidth,
      imageQuality: quality,
    );

    if (pickedFile == null) return null;
    if (crop && mounted()) {
      pickedFile = await cropperService.cropImage(
        pickedFile: pickedFile,
        context: context,
      );
    }

    if (compress) {
      pickedFile = await compressorService.compressImage(
        pickedFile,
        quality: quality,
      );
    }

    return pickedFile;
  } catch (e) {
    debugPrint('ImagePickerHandler | pickImage failed: $e');
    return null;
  }
}