photo_viewer 0.1.0
photo_viewer: ^0.1.0 copied to clipboard
Flutter image viewer library with multiple display modes. Features include: pinch-zoom, double-tap zoom, vertical dismiss, page navigation, custom overlays, and hero animations.
photo_viewer #
A versatile Flutter library for displaying and interacting with images in your app.
Features #
- Image zoom with pinch gestures
- Double-tap zoom functionality
- Vertical swipe to dismiss
- Multiple image viewing with pagination
- Custom overlay support
- Hero animation support
- Support for asset, network, and file images
Installation #
To use this plugin, add install_plugin as a dependency in your pubspec.yaml file. For example:
dependencies:
photo_viewer: '^0.1.0'
Basic Usage #
Single Image Display #
The simplest way to use PhotoViewer is to display a single image:
PhotoViewerImage(
imageUrl: 'assets/your_image.jpg',
)
PhotoViewerImage(
imageUrl: 'https://example.com/your_image.jpg',
)
This creates a tappable image that opens a full-screen viewer when tapped.
Multiple Images Display #
To display multiple images with swipe navigation:
PhotoViewerMultipleImage(
imageUrls: [
'assets/image1.jpg',
'https://example.com/image2.jpg',
'assets/image3.jpg'
],
index: 0, // Initial image index
id: 'unique_id', // Unique identifier for Hero animation
)
Direct Display Function #
PhotoViewerImage
also supports the same gesture callbacks as PhotoViewerImage:
PhotoViewerImage(
imageUrls: imageList,
index: 0,
id: 'gallery',
onLongPress: () => print('Long pressed!'),
onDoubleTap: () => print('Double tapped!'),
)
The PhotoViewerImage
widget handles file images, network images, and asset images, and also exposes properties such as long press and double tap. However, if you want more detailed customization, please refer to the PhotoViewerImage
implementation and call the showPhotoViewer
function directly.
showPhotoViewer(
context: context,
builders: imageUrls.map<WidgetBuilder>((url) {
return (BuildContext context) => Image.asset(
url,
width: MediaQuery.of(context).size.width,
fit: BoxFit.contain,
);
}).toList(),
initialPage: 0,
);
Advanced Usage #
Custom Overlays #
Add custom UI elements on top of the image viewer:
PhotoViewerImage(
imageUrl: 'assets/your_image.jpg',
overlayBuilder: (context) => Stack(
children: [
YourCustomCommentInput(),
YourCustomCloseButton(),
],
),
showDefaultCloseButton: false, // Hide the default close button
)
Gallery with Thumbnails #
Create a gallery-style image viewer with thumbnails:
PhotoViewerMultipleImage(
imageUrls: imagePaths,
index: currentIndex,
id: 'gallery',
onPageChanged: (index) {
// Update your state with the current index
setState(() {
currentIndex = index;
});
},
onJumpToPage: (jump) {
// Store the jump function to programmatically change pages
jumpToPage = jump;
},
overlayBuilder: (context) => YourCustomThumbnails(
imagePaths: imagePaths,
selectedIndex: currentIndex,
onTap: (index) {
// Use the stored jump function to navigate to the selected thumbnail
jumpToPage(index);
},
),
)
Manga/Book Reader Implementation #
Create a comic book or manga reader with custom page controls:
showPhotoViewer(
context: context,
builders: pages.map<WidgetBuilder>((page) {
return (BuildContext context) => Image.asset(
page,
width: MediaQuery.of(context).size.width,
fit: BoxFit.contain,
);
}).toList(),
showDefaultCloseButton: false,
enableVerticalDismiss: false, // Disable vertical swipe to dismiss
initialPage: currentPage,
onPageChanged: (index) {
// Update your state with the current page
},
onJumpToPage: (jump) {
// Store the jump function for page navigation
},
overlayBuilder: (context) => Stack(
children: [
YourCustomCloseButton(),
YourCustomPageControls(
currentPage: currentPage,
totalPages: totalPages,
onPageChanged: (index) {
// Use the stored jump function to navigate to the selected page
},
),
],
),
)
Customization Options #
PhotoViewer provides various customization options:
minScale
/maxScale
: Set the minimum and maximum zoom scaleshowDefaultCloseButton
: Toggle the default close button visibilityenableVerticalDismiss
: Enable or disable vertical swipe to dismiss
Example #
Check out the example project in the example
folder for complete implementation samples including:
- Basic image viewer
- Social media feed with image grids
- Gallery with thumbnails
- Comment overlay
- Manga/book reader
- Custom gesture handling examples
License #
This project is licensed under the MIT License - see the LICENSE file for details.