easy_image_viewer 1.2.1
easy_image_viewer: ^1.2.1 copied to clipboard
An easy image viewer with pinch & zoom, multi image, and built-in full-screen dialog support.
EasyImageViewer #
An easy way to display images in a full-screen dialog, including pinch & zoom.

Features #
- Show a single image or a swipeable list of images
- Use pinch & zoom to zoom in and out of images
- Optionally allow "double tap to zoom" by passing in
doubleTapZoomable: true - Optionally allow "swipe down to dismiss" by passing in
swipeDismissible: true - No dependencies besides Flutter
- Callbacks for
onPageChangedandonViewerDismissed
Usage #
Show a single image:
final imageProvider = Image.network("https://picsum.photos/id/1001/5616/3744").image;
showImageViewer(context, imageProvider, onViewerDismissed: () {
print("dismissed");
});
Show a bunch of images:
MultiImageProvider multiImageProvider = MultiImageProvider([
Image.network("https://picsum.photos/id/1001/5616/3744").image,
Image.network("https://picsum.photos/id/1003/1181/1772").image,
Image.network("https://picsum.photos/id/1004/5616/3744").image,
Image.network("https://picsum.photos/id/1005/5760/3840").image
]);
showImageViewerPager(context, multiImageProvider, onPageChanged: (page) {
print("page changed to $page");
}, onViewerDismissed: (page) {
print("dismissed while on page $page");
});
Usually you'll want to implement your own EasyImageProvider. Suppose you have
a list of Products, each of which has an imagePath property with the path
to a local image file. You could create an EasyImageProvider that takes a list
of Products like this:
class ProductsImageProvider extends EasyImageProvider {
final List<Product> products;
final int initialIndex;
ProductsImageProvider({ required this.products, this.initialIndex = 0 });
@override
ImageProvider<Object> imageBuilder(BuildContext context, int index) {
String? localImagePath = products[index].imagePath;
File? imageFile;
if (localImagePath != null) {
imageFile = File(localImagePath);
}
ImageProvider imageProvider = imageFile != null ? FileImage(imageFile) : AssetImage("assets/images/product_placeholder.jpg") as ImageProvider;
return imageProvider;
}
@override
int get imageCount => products.length;
}
You could then use it like this:
ProductsImageProvider productsImageProvider = ProductsImageProvider(products: products);
showImageViewerPager(context, productsImageProvider, onPageChanged: (page) {
print("page changed to $page");
}, onViewerDismissed: (page) {
print("dismissed while on page $page");
});
How to release a new version on pub.flutter-io.cn #
- Update the version number in
pubspec.yaml. - Add an entry for the new version in
CHANGELOG.md. - Make sure
flutter testandflutter analyzepass without any issues. - Run
dart pub publish --dry-runto ensure all publishing checks pass. - If you haven't installed the pana package analysis tool yet, install it with
dart pub global activate pana. - Make sure all changes are committed and run
pana .inside the project directory. We are aiming for the highest score. - Address any issues reported by pana.
- Create a new branch for your changes, for example by running
git checkout -b release-1.1.0. - Commit your changes (formatting changes separately from other changes).
- Open a PR with your changes.
- Once approved, merge the PR.
- Run
dart pub publishto publish the new version. - On GitHub, create a new release by visiting Releases. The tag should have the format of
vplus the version number, for examplev1.1.0. The title of the release should be the version number without av. Add what you've added to the changelog as the release's description. - That's it.
Credits #
EasyImageViewer is a project by TSG, a full-service digital agency taking software from concept to launch. Our powerhouse team of designers and engineers build iOS, Android, and web apps across many industries.