NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #576 most downloaded on pub.dev
A Flutter plugin for Android, iOS and Web supports cropping images
Last release 5 months ago
15 Apr 2026
Release timing varies
gaps range from 2 weeks to 6 months
Nearly every release is documented
notes for 59 of 59 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
63 releases · first in 2018
upgrade libs in example
upgrade libs in example
fix issue on iOS: Lexical or Preprocessor Issue (Xcode): 'TOCropViewController/TOCropViewConstants.h' file not found
Lexical or Preprocessor Issue (Xcode): 'TOCropViewController/TOCropViewConstants.h' file not foundOne column per quarter.
fix issue of fixed (locked) aspect ratio on iOS
fix bug and bump version
fix bug and bump version
upgrade TOCropViewController to v3.1.1 (new Liquid Glass UI)
iOS: upgrade TOCropViewController to v2.8.0
TOCropViewController to v2.8.0BREAKING CHANGES:
image_cropper_platform_interface)Android: statusBarColor is deprecated and no longer in use, introduce new properties statusBarLight and navBarLight
uCrop 2.2.11, it fully supports edge-to-edge nowstatusBarColor is deprecated and no longer in use, introduce new properties statusBarLight and navBarLightBREAKING CHANGES:
compileSdkVersion is set to 36values-v35/styles.xml)correct README document for Android (removed workaround note because uCrop now fully supports edge-to-edge feature)
Android: fix deprecated API #546
iOS: add support for Swift Package Manager (PR #555)
Migration guide
android/app/src/main/res/values/styles.xml<resources>
....
<style name="Ucrop.CropTheme" parent="Theme.AppCompat.Light.NoActionBar"/> <!--add this line-->
</resources>
android/app/src/main/res/values-v35/styles.xml and add the following code to it:<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Ucrop.CropTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
</resources>
UCropActivity in your AndroidManifest.xml (if you have not modified it yet)<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Ucrop.CropTheme"/> <!--this line is updated-->
Android: workaround edge-to-adge issue on Android 15
Android: workaround edge-to-adge issue on Android 15
Before:
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
After:
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Ucrop.CropTheme"/> <!-- This line is updated -->
web: correct constraints of flutter version (>=3.22.0)
use >=0.5.0 < 2.0.0 version range for package:web
>=0.5.0 < 2.0.0 version range for package:webrelax flutter version constraints
web dependencyiOSUiSettings.embedInNavigationController to support add2app environmentsupgrade platform_interface dependency
platform_interface dependency>=3.3.0)Web: support config type of output image (jpg or png)
* Web: update dependencies
* Web: improve cropper UI
fix bug cropper not get correct container's size
* correct document
refactor plugin to use new JS library, cropperjs instead of croppie
cropperjs instead of croppieCropAspectRatioPresetBREAKING CHANGES:
- **WebUiSettings**: is totally re-implemented, please see plugin document for more details
- **cropImage()**: move `cropStyle` and `aspectRatioPresets` into `AndroidUiSettings` and `IOUiSettings` for sake of clean and clarity.
**Migration guides**:
***Before***:
```
File croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
cropStyle: CropStyle.circle,
aspectRatioPresets: [
CropAspectRatioPreset.square,
CropAspectRatioPreset.original,
],
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'Cropper',
),
IOSUiSettings(
title: 'Cropper',
),
],
);
```
***After***:
```
File croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'Cropper',
cropStyle: CropStyle.circle,
aspectRatioPresets: [
CropAspectRatioPreset.square,
CropAspectRatioPreset.original,
],
),
IOSUiSettings(
title: 'Cropper',
cropStyle: CropStyle.circle,
aspectRatioPresets: [
CropAspectRatioPreset.square,
CropAspectRatioPreset.original,
],
),
],
);
```
**Web integration**:
***Before***:
```
<head>
....
<!-- Croppie -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.css" />
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/exif-js/2.3.0/exif.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.min.js"></script>
....
</head>
```
***After***:
```
<head>
....
<!-- cropperjs -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.2/cropper.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.2/cropper.min.js"></script>
....
</head>
```
Android: upgrade uCrop to v2.2.9
uCrop to v2.2.9TOCropViewController to v2.7.3js to v0.7.1Android: improve compression quality
* upgrade http to v1.0.0
http to v1.0.0* refactor CHANGELOG
Android: support namespace, Gradle 8
iOS: bump ios minimum version to 11
* Web: fix web translation issue
Android: replace jcenter by mavenCentral
jcenter by mavenCentralBREAKING CHANGE: move all setting models to platform interface packages.
WebSettings model (so there's no need to use conditional import to config Web UI now)WebUiSettings(
boundary: Boundary(
width: 520,
height: 520,
),
viewPort: ViewPort(width: 480, height: 480, type: 'circle'),
)
WebUiSettings(
boundary: const CroppieBoundary(
width: 520,
height: 520,
),
viewPort: const CroppieViewPort(width: 480, height: 480, type: 'circle'),
)
* correct importing JS library
* update document
fix missing pubspec config on web
change result data type from File to CroppedFile.
BREAKING CHANGE:
File to CroppedFile.androidUiSettings and iosUiSettings parameter in cropImage method, they are replaced by uiSettingsFile croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
androidUiSettings: AndroidUiSettings(
toolbarTitle: 'Cropper',
toolbarColor: Colors.deepOrange,
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
iosUiSettings: IOSUiSettings(
minimumAspectRatio: 1.0,
)
);
CroppedFile croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'Cropper',
toolbarColor: Colors.deepOrange,
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
IOSUiSettings(
title: 'Cropper',
)
],
);
* support rotate image on Web
correct missing README document about Web support.
BREAKING CHANGE: update result models to support web, replace File by CroppedFile
File by CroppedFileBREAKING CHANGE: remove androidUiSettings and iosUiSettings, they are replaced by uiSettings for sake of supporting multiple platforms in future.
androidUiSettings and iosUiSettings, they are replaced by uiSettings for sake of supporting multiple platforms in future.File croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
androidUiSettings: AndroidUiSettings(
toolbarTitle: 'Cropper',
toolbarColor: Colors.deepOrange,
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
iosUiSettings: IOSUiSettings(
minimumAspectRatio: 1.0,
)
);
File croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile.path,
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'Cropper',
toolbarColor: Colors.deepOrange,
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
IOSUiSettings(
title: 'Cropper',
)
],
);
update README to introduce Web support experiment
* Upgrade uCrop to v2.2.7
uCrop to v2.2.7Upgrade TOCropViewController to v2.6.0
TOCropViewController to v2.6.0Fix bug: image compress file format (png)
uCrop to v2.2.6Upgrade TOCropViewController to v2.5.4
pubspec to new formatTOCropViewController to v2.5.4* Android: fix bug
BREAKING CHANGE: remove activeWidgetColor from AndroidUiSettings
activeWidgetColor from AndroidUiSettingsiOS: add more UI customization properties (title, initRect)
Android: migrate to embedding v2
Android: fix bug crashing on Flutter v1.12.13
Android: upgrade gradle version
static_framework Pod configuration, upgrade TOCropViewController to 2.5.2BREAKING CHANGE: ratioX and ratioY are replaced by aspectRatio, circleShape is replaced by cropStyle, removed toolbarTitle and toolbarColor (these pro…
ratioX and ratioY are replaced by aspectRatio, circleShape is replaced by cropStyle, removed toolbarTitle and toolbarColor (these properties are moved into AndroidUiSettings)* iOS: upgrade native library * Android: fix bug #40
* Android: migrate to AndroidX * upgrade native libraries
Android: remove deprecated support libraries
* clarify code document
set default value for circleShape
circleShape* support circular cropping
upgrade TOCropViewController dependency to v2.3.8
TOCropViewController dependency to v2.3.8* re-config to support Dart2 * fix bug: lock aspect ratio
refactor: change toolbarColor type of int to Color
toolbarColor type of int to ColorYour coding agent can read these notes before it upgrades. Set up the MCP server →