image_picker_cropper 0.0.2
image_picker_cropper: ^0.0.2 copied to clipboard
A simple wrapper combining image_picker and image_cropper into a single function call — pick and crop images in one step.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker_cropper/image_picker_cropper.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Image Picker Cropper Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final ImagePickerCropper _pickerCropper = ImagePickerCropper();
File? _croppedImage;
bool _isLoading = false;
Future<void> _pickImage(ImageSource source) async {
setState(() => _isLoading = true);
final File? image = await _pickerCropper.pickAndCrop(
source: source,
aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1),
);
setState(() {
_isLoading = false;
if (image != null) {
_croppedImage = image;
}
});
}
void _showSourceDialog() {
showModalBottomSheet(
context: context,
builder: (context) => SafeArea(
child: Wrap(
children: [
ListTile(
leading: const Icon(Icons.camera_alt),
title: const Text('Camera'),
onTap: () {
Navigator.pop(context);
_pickImage(ImageSource.camera);
},
),
ListTile(
leading: const Icon(Icons.photo_library),
title: const Text('Gallery'),
onTap: () {
Navigator.pop(context);
_pickImage(ImageSource.gallery);
},
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Image Picker Cropper Demo')),
body: Center(
child: _isLoading
? const CircularProgressIndicator()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_croppedImage != null)
ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.file(
_croppedImage!,
width: 220,
height: 220,
fit: BoxFit.cover,
),
)
else
Container(
width: 220,
height: 220,
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(12),
),
child: const Icon(
Icons.person,
size: 80,
color: Colors.grey,
),
),
const SizedBox(height: 24),
ElevatedButton.icon(
onPressed: _showSourceDialog,
icon: const Icon(Icons.add_a_photo),
label: const Text('Pick & Crop Image'),
),
],
),
),
);
}
}