Image Cropper In Flutter :
This flutter tutorial post is image crop.
Crop functionality
1) Choose image from gallery or camera.
2) Provide the functionality crop, rotated and scale.
AndroidManifest.xml
<activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
Screenshot 1 :
Screenshot 2 :

Screenshot 3 :

pubspec.yaml
name: image_crop description: A new Flutter application. version: 1.0.0+1 environment: sdk: ">=2.1.0 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 image_cropper: image_picker: dev_dependencies: flutter_test: sdk: flutter flutter: uses-material-design: true
Main.dart
import 'package:flutter/material.dart'; import 'dart:async'; import 'dart:io'; import 'package:image_cropper/image_cropper.dart'; import 'package:image_picker/image_picker.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'ImageCropper', theme: ThemeData.light().copyWith(primaryColor: Colors.deepOrange), home: MyHomePage( title: 'ImageCropper', ), ); } } class MyHomePage extends StatefulWidget { final String title; MyHomePage({this.title}); @override _MyHomePageState createState() => _MyHomePageState(); } enum AppState { free, picked, cropped, } class _MyHomePageState extends State<MyHomePage> { AppState state; File imageFile; @override void initState() { super.initState(); state = AppState.free; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: imageFile != null ? Image.file(imageFile) : Container(), ), floatingActionButton: FloatingActionButton( backgroundColor: Colors.deepOrange, onPressed: () { if (state == AppState.free) _pickImage(); else if (state == AppState.picked) _cropImage(); else if (state == AppState.cropped) _clearImage(); }, child: _buildButtonIcon(), ), ); } Widget _buildButtonIcon() { if (state == AppState.free) return Icon(Icons.add); else if (state == AppState.picked) return Icon(Icons.crop); else if (state == AppState.cropped) return Icon(Icons.clear); else return Container(); } Future<Null> _pickImage() async { imageFile = await ImagePicker.pickImage(source: ImageSource.gallery); if (imageFile != null) { setState(() { state = AppState.picked; }); } } Future<Null> _cropImage() async { File croppedFile = await ImageCropper.cropImage( sourcePath: imageFile.path, aspectRatioPresets: Platform.isAndroid ? [ CropAspectRatioPreset.square, CropAspectRatioPreset.ratio3x2, CropAspectRatioPreset.original, CropAspectRatioPreset.ratio4x3, CropAspectRatioPreset.ratio16x9 ] : [ CropAspectRatioPreset.original, CropAspectRatioPreset.square, CropAspectRatioPreset.ratio3x2, CropAspectRatioPreset.ratio4x3, CropAspectRatioPreset.ratio5x3, CropAspectRatioPreset.ratio5x4, CropAspectRatioPreset.ratio7x5, CropAspectRatioPreset.ratio16x9 ], androidUiSettings: AndroidUiSettings( toolbarTitle: 'Cropper', toolbarColor: Colors.deepOrange, toolbarWidgetColor: Colors.white, initAspectRatio: CropAspectRatioPreset.original, lockAspectRatio: false), ); if (croppedFile != null) { imageFile = croppedFile; setState(() { state = AppState.cropped; }); } } void _clearImage() { imageFile = null; setState(() { state = AppState.free; }); } }