dismissible_image_view 1.0.0 copy "dismissible_image_view: ^1.0.0" to clipboard
dismissible_image_view: ^1.0.0 copied to clipboard

An image viewer widget with support zoom, pan, rotate and dismissible by one finger, dismiss gesture no conflict with photo zoom gesture

example/lib/main.dart

import 'package:dismissible_image_view/view_image.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Image Viewer Package Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const ImageGalleryScreen(),
    );
  }
}

class ImageGalleryScreen extends StatelessWidget {

  final List<String> imageUrls = const [
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
    'https://picsum.photos/id/1001/4912/3264',
  ];

  const ImageGalleryScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Dismissible Image Viewer Example'),
      ),
      body: GridView.builder(
        padding: const EdgeInsets.all(8.0),
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 5,
          crossAxisSpacing: 8.0,
          mainAxisSpacing: 8.0,
          childAspectRatio: 1.0,
        ),
        itemCount: imageUrls.length,
        itemBuilder: (context, index) {
          final imageUrl = imageUrls[index];
          final heroTag = 'image_$index';

          return GestureDetector(
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => ImageView(
                      url: imageUrl,
                      heroTag: heroTag,
                  ),
                  fullscreenDialog: true,
                ),
              );
            },
            child: Hero(
              tag: heroTag,
              child: ClipRRect(
                borderRadius: BorderRadius.circular(8.0),
                child: Image.network(
                  imageUrl,
                  fit: BoxFit.cover,
                  loadingBuilder: (context, child, loadingProgress) {
                    if (loadingProgress == null) return child;
                    return Center(
                      child: CircularProgressIndicator(
                        value: loadingProgress.expectedTotalBytes != null
                            ? loadingProgress.cumulativeBytesLoaded /
                            loadingProgress.expectedTotalBytes!
                            : null,
                      ),
                    );
                  },
                  errorBuilder: (context, error, stackTrace) {
                    return Container(
                      color: Colors.grey[300],
                      child: const Icon(Icons.error, color: Colors.red),
                    );
                  },
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}
1
likes
0
points
30
downloads

Publisher

unverified uploader

Weekly Downloads

An image viewer widget with support zoom, pan, rotate and dismissible by one finger, dismiss gesture no conflict with photo zoom gesture

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, photo_view

More

Packages that depend on dismissible_image_view