Search packages, repositories and app categories

gallery_image_viewer cover
Package detailsv1.2.0

gallery_image_viewer

An easy image viewer with pinch & zoom, multi image, gallery image and built-in full-screen dialog support.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
726
Likes
32
Pub points
150

Install package

flutter pub add gallery_image_viewer

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A Flutter package that provides an intuitive image viewer with support for pinch-to-zoom, multi-image navigation, and gallery-style browsing. It includes built-in full-screen dialog functionality, making it ideal for displaying images in a seamless, user-friendly manner across platforms. Designed for simplicity and performance, it integrates easily into apps requiring robust image viewing capabilities without extensive custom implementation. The package supports all major platforms including Android, iOS, Web, macOS, Windows, and Linux.

Use cases

  • Displaying image galleries
  • Viewing high-resolution images with zoom
  • Full-screen image browsing
  • Integrating image viewers in photo apps
  • Enhancing user experience in media-heavy apps

Key features

  • Pinch-to-zoom gesture support
  • Multi-image navigation
  • Built-in full-screen dialog
  • Cross-platform compatibility
  • Simple integration with minimal setup
  • Gallery-style image browsing

Suitable for

  • Photo sharing apps
  • E-commerce product image viewers
  • Travel or portfolio apps
  • Educational or documentation apps
  • Apps requiring interactive image exploration

Considerations

  • Requires proper image asset management
  • May need additional styling for custom UI
  • Performance depends on image size and count
  • Limited to image-only content
  • Not designed for video playback

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

GalleryImageViewer

An easy way to display images in a full-screen dialog, including pinch & zoom.

Pub Tests license

Easy Image Viewer Demo

Features

  • Show a single image or a swipeable list of images
  • Use pinch & zoom to zoom in and out of images
  • Optionally allow "swipe down to dismiss" by passing in swipeDismissible: true
  • No dependencies besides Flutter
  • Callbacks for onPageChanged and onViewerDismissed

Usage

Show a Gallery image:

final List<ImageProvider> _imageProviders = [
    Image.network("https://picsum.photos/id/237/200/300").image,
    Image.network("https://picsum.photos/seed/picsum/200/300").image,
    Image.network("https://picsum.photos/200/300?grayscale").image,
    Image.network("https://picsum.photos/200/300").image,
    Image.network("https://picsum.photos/200/300?grayscale").image
  ];
GalleryImageView(
  listImage: _imageProviders,
  width: 200,
  height: 200,
  imageDecoration: BoxDecoration(border: Border.all(color: Colors.white)),
),

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");
});

Credits

GalleryImageViewer is custom from EasyImageViewer. 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.

Categories

Source repository

Projects using this package

No data available yet.