pickImage method

Future<File?> pickImage({
  1. required BuildContext context,
  2. required ImageFrom source,
})

Implementation

Future<File?> pickImage({required BuildContext context, required ImageFrom source}) async {
  cameraUiSettings?.initialCameraSide ??= CameraSide.back;

  try {
    if (source == ImageFrom.camera) {
      debugPrint('Camera settings: ${cameraUiSettings?.toJson()}');

      file = await Navigator.push<File?>(
        context,
        CupertinoPageRoute<File?>(
          builder: (context) => CameraPlugin(cameraUiSettings: cameraUiSettings),
        ),
      );
    } else {
      final pickedFile = await _picker.pickImage(source: ImageSource.gallery);

      if (pickedFile != null) {
        debugPrint('Image picked successfully: ${pickedFile.path}');
        file = File(pickedFile.path);
      } else {
        debugPrint('User canceled image picking');
      }
    }

    if (file != null && features?.crop != null && features!.crop!.enabled) {
      file = await _cropIfNeeded(file!);
    }

    if (compressImage && file != null) {
      if (!compressOnlyForCamera || (compressOnlyForCamera && source == ImageFrom.camera)) {
        final sizeInKbBeforeCompression = file!.lengthSync() / 1024;
        debugPrint('Before compress: $sizeInKbBeforeCompression KB');

        file = await compress(image: file!, compressParams: compressParams ?? defaultCompress);

        if (file != null) {
          final sizeInKbAfterCompression = file!.lengthSync() / 1024;
          debugPrint('After compress: $sizeInKbAfterCompression KB');
        }
      }
    }

    return file;
  } catch (e, st) {
    debugPrint('Error picking image: $e\n$st');
    return null;
  }
}