reusable_image_widget 0.0.2+1
reusable_image_widget: ^0.0.2+1 copied to clipboard
A reusable Flutter widget library for picking, cropping, compressing, and displaying images from gallery, camera, or network with full-screen preview support.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:reusable_image_widget/reusable_image_widget.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Reusable Image Widget Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const ImagePickerExample(),
);
}
}
class ImagePickerExample extends StatefulWidget {
const ImagePickerExample({super.key});
@override
State<ImagePickerExample> createState() => _ImagePickerExampleState();
}
class _ImagePickerExampleState extends State<ImagePickerExample> {
File? selectedImage;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Reusable Image Widget Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
AvatarImagePicker(
// initialFile: selectedImage,
onChanged: (File? image) {
setState(() {
selectedImage = image;
});
},
),
const SizedBox(height: 24),
const Divider(),
const SizedBox(height: 16),
Text(
'Preview:',
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 12),
selectedImage != null
? GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => FullScreenImageViewer(
imageSource: selectedImage!.path,
),
),
);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.file(
selectedImage!,
width: 200,
height: 200,
fit: BoxFit.cover,
),
),
)
: const Text('No image selected.'),
],
),
),
);
}
}