image_multi_type 1.0.6 copy "image_multi_type: ^1.0.6" to clipboard
image_multi_type: ^1.0.6 copied to clipboard

Flutter package for displaying images from network, assets, SVG, files, or widgets with caching and error handling.

example/lib/main.dart

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:image_multi_type/image_multi_type_pakage.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Image Multi Type Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int _currentIndex = 0;

  final List<Widget> _pages = [
    const BasicExamplesPage(),
    const CircleExamplesPage(),
    const RoundExamplesPage(),
    const AdvancedExamplesPage(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Image Multi Type Examples'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: _pages[_currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        currentIndex: _currentIndex,
        onTap: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
        items: const [
          BottomNavigationBarItem(
            icon: Icon(Icons.image),
            label: 'Basic',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.circle),
            label: 'Circle',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.rounded_corner),
            label: 'Round',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.rounded_corner),
            label: 'Advanced',
          ),
        ],
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Basic ImageMultiType Examples',
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),

          // Network Image
          _buildExampleCard(
            title: 'Network Image',
            description: 'Loading image from internet with caching',
            child: ImageMultiType(
              url: 'https://picsum.photos/300/200?random=1',
              height: 200,
              width: 300,
              fit: BoxFit.cover,
            ),
            code: '''ImageMultiType(
  url: 'https://picsum.photos/300/200?random=1',
  height: 200,
  width: 300,
  fit: BoxFit.cover,
)''',
          ),

          // Asset Image (placeholder)
          _buildExampleCard(
            title: 'Asset Image',
            description: 'Loading image from assets folder',
            child: Container(
              height: 200,
              width: 300,
              decoration: BoxDecoration(
                color: Colors.grey[300],
                borderRadius: BorderRadius.circular(8),
              ),
              child: const Center(
                child: Text(
                  'Asset Image\n(Add image to assets/images/)',
                  textAlign: TextAlign.center,
                  style: TextStyle(color: Colors.grey),
                ),
              ),
            ),
            code: '''ImageMultiType(
  url: 'assets/images/logo.png',
  height: 200,
  width: 300,
)''',
          ),

          // SVG Asset (placeholder)
          _buildExampleCard(
            title: 'SVG Asset',
            description: 'Loading SVG from assets with color tinting',
            child: Container(
              height: 200,
              width: 300,
              decoration: BoxDecoration(
                color: Colors.grey[300],
                borderRadius: BorderRadius.circular(8),
              ),
              child: const Center(
                child: Text(
                  'SVG Asset\n(Add SVG to assets/icons/)',
                  textAlign: TextAlign.center,
                  style: TextStyle(color: Colors.grey),
                ),
              ),
            ),
            code: '''ImageMultiType(
  url: 'assets/icons/icon.svg',
  height: 200,
  width: 300,
  color: Colors.blue,
)''',
          ),

          // Icon
          _buildExampleCard(
            title: 'Icon',
            description: 'Displaying Flutter icons with custom size and color',
            child: ImageMultiType(
              url: Icons.favorite,
              height: 100,
              width: 100,
              color: Colors.red,
            ),
            code: '''ImageMultiType(
  url: Icons.favorite,
  height: 100,
  width: 100,
  color: Colors.red,
)''',
          ),

          // Custom Widget
          _buildExampleCard(
            title: 'Custom Widget',
            description: 'Using any Flutter widget as image source',
            child: ImageMultiType(
              url: Container(
                height: 200,
                width: 300,
                decoration: BoxDecoration(
                  gradient: const LinearGradient(
                    colors: [Colors.blue, Colors.purple],
                  ),
                  borderRadius: BorderRadius.circular(8),
                ),
                child: const Center(
                  child: Text(
                    'Custom Widget',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 24,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            ),
            code: '''ImageMultiType(
  url: Container(
    decoration: BoxDecoration(
      gradient: LinearGradient(
        colors: [Colors.blue, Colors.purple],
      ),
    ),
    child: Text('Custom Widget'),
  ),
)''',
          ),
        ],
      ),
    );
  }

  Widget _buildExampleCard({
    required String title,
    required String description,
    required Widget child,
    required String code,
  }) {
    return Card(
      margin: const EdgeInsets.only(bottom: 20),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(
              description,
              style: TextStyle(color: Colors.grey[600]),
            ),
            const SizedBox(height: 16),
            Center(child: child),
            const SizedBox(height: 16),
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(12),
              decoration: BoxDecoration(
                color: Colors.grey[100],
                borderRadius: BorderRadius.circular(8),
              ),
              child: Text(
                code,
                style: const TextStyle(fontFamily: 'monospace', fontSize: 12),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Circle Image Examples',
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),

          // Different sizes
          _buildExampleCard(
            title: 'Different Sizes',
            description: 'Circle images with various sizes',
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=2',
                  size: 60,
                ),
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=3',
                  size: 80,
                ),
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=4',
                  size: 100,
                ),
              ],
            ),
            code: '''CircleImageWidget(
  url: 'https://picsum.photos/100/100?random=2',
  size: 60,
)''',
          ),

          // With background color
          _buildExampleCard(
            title: 'With Background Color',
            description: 'Circle images with custom background colors',
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=5',
                  size: 80,
                  color: Colors.blue[100],
                ),
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=6',
                  size: 80,
                  color: Colors.green[100],
                ),
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=7',
                  size: 80,
                  color: Colors.purple[100],
                ),
              ],
            ),
            code: '''CircleImageWidget(
  url: 'https://picsum.photos/100/100?random=5',
  size: 80,
  color: Colors.blue[100],
)''',
          ),

          // With margin and padding
          _buildExampleCard(
            title: 'With Margin and Padding',
            description: 'Circle images with custom spacing',
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=8',
                  size: 80,
                  margin: const EdgeInsets.all(8),
                  color: Colors.red[100],
                ),
                CircleImageWidget(
                  url: 'https://picsum.photos/100/100?random=9',
                  size: 80,
                  padding: const EdgeInsets.all(4),
                  color: Colors.orange[100],
                ),
              ],
            ),
            code: '''CircleImageWidget(
  url: 'https://picsum.photos/100/100?random=8',
  size: 80,
  margin: EdgeInsets.all(8),
  color: Colors.red[100],
)''',
          ),
        ],
      ),
    );
  }

  Widget _buildExampleCard({
    required String title,
    required String description,
    required Widget child,
    required String code,
  }) {
    return Card(
      margin: const EdgeInsets.only(bottom: 20),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(
              description,
              style: TextStyle(color: Colors.grey[600]),
            ),
            const SizedBox(height: 16),
            Center(child: child),
            const SizedBox(height: 16),
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(12),
              decoration: BoxDecoration(
                color: Colors.grey[100],
                borderRadius: BorderRadius.circular(8),
              ),
              child: Text(
                code,
                style: const TextStyle(fontFamily: 'monospace', fontSize: 12),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Round Image Examples',
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),

          // Different border radius
          _buildExampleCard(
            title: 'Different Border Radius',
            description: 'Rounded images with various corner radius',
            child: Column(
              children: [
                RoundImageWidget(
                  url: 'https://picsum.photos/300/150?random=10',
                  height: 100,
                  width: 300,
                  radios: 8,
                ),
                const SizedBox(height: 16),
                RoundImageWidget(
                  url: 'https://picsum.photos/300/150?random=11',
                  height: 100,
                  width: 300,
                  radios: 16,
                ),
                const SizedBox(height: 16),
                RoundImageWidget(
                  url: 'https://picsum.photos/300/150?random=12',
                  height: 100,
                  width: 300,
                  radios: 32,
                ),
              ],
            ),
            code: '''RoundImageWidget(
  url: 'https://picsum.photos/300/150?random=10',
  height: 100,
  width: 300,
  radios: 8,
)''',
          ),

          // Different sizes
          _buildExampleCard(
            title: 'Different Sizes',
            description: 'Rounded images with various dimensions',
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=13',
                  height: 80,
                  width: 80,
                  radios: 16,
                ),
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=14',
                  height: 100,
                  width: 150,
                  radios: 16,
                ),
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=15',
                  height: 120,
                  width: 80,
                  radios: 16,
                ),
              ],
            ),
            code: '''RoundImageWidget(
  url: 'https://picsum.photos/100/100?random=13',
  height: 80,
  width: 80,
  radios: 16,
)''',
          ),

          // With color tinting
          _buildExampleCard(
            title: 'With Color Tinting',
            description: 'Rounded images with color overlay',
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=16',
                  height: 80,
                  width: 80,
                  radios: 16,
                  color: Colors.blue.withValues(alpha: 0.3),
                ),
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=17',
                  height: 80,
                  width: 80,
                  radios: 16,
                  color: Colors.green.withValues(alpha: 0.3),
                ),
                RoundImageWidget(
                  url: 'https://picsum.photos/100/100?random=18',
                  height: 80,
                  width: 80,
                  radios: 16,
                  color: Colors.red.withValues(alpha: 0.3),
                ),
              ],
            ),
            code: '''RoundImageWidget(
  url: 'https://picsum.photos/100/100?random=16',
  height: 80,
  width: 80,
  radios: 16,
  color: Colors.blue.withValues(alpha:)(0.3),
)''',
          ),
        ],
      ),
    );
  }

  Widget _buildExampleCard({
    required String title,
    required String description,
    required Widget child,
    required String code,
  }) {
    return Card(
      margin: const EdgeInsets.only(bottom: 20),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(
              description,
              style: TextStyle(color: Colors.grey[600]),
            ),
            const SizedBox(height: 16),
            Center(child: child),
            const SizedBox(height: 16),
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(12),
              decoration: BoxDecoration(
                color: Colors.grey[100],
                borderRadius: BorderRadius.circular(8),
              ),
              child: Text(
                code,
                style: const TextStyle(fontFamily: 'monospace', fontSize: 12),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text(
            'Advanced Examples',
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 20),

          // Error handling
          _buildExampleCard(
            title: 'Error Handling',
            description: 'Custom error images and fallbacks',
            child: Column(
              children: [
                // Set custom error image
                ElevatedButton(
                  onPressed: () {
                    setImageMultiTypeErrorImage(
                      Container(
                        padding: const EdgeInsets.all(16),
                        decoration: BoxDecoration(
                          color: Colors.red[100],
                          borderRadius: BorderRadius.circular(8),
                        ),
                        child: const Column(
                          children: [
                            Icon(Icons.error, color: Colors.red, size: 32),
                            SizedBox(height: 8),
                            Text('Custom Error', style: TextStyle(color: Colors.red)),
                          ],
                        ),
                      ),
                    );
                    ScaffoldMessenger.of(context).showSnackBar(
                      const SnackBar(content: Text('Custom error image set!')),
                    );
                  },
                  child: const Text('Set Custom Error Image'),
                ),
                const SizedBox(height: 16),
                // Test with invalid URL
                ImageMultiType(
                  url: 'https://invalid-url-that-will-fail.com/image.jpg',
                  height: 150,
                  width: 300,
                  fit: BoxFit.cover,
                ),
              ],
            ),
            code: '''// Set custom error image
setImageMultiTypeErrorImage(
  Container(
    decoration: BoxDecoration(
      color: Colors.red[100],
      borderRadius: BorderRadius.circular(8),
    ),
    child: Icon(Icons.error, color: Colors.red),
  ),
);

// Use with invalid URL to see error handling
ImageMultiType(
  url: 'https://invalid-url.com/image.jpg',
  height: 150,
  width: 300,
)''',
          ),

          // File from bytes
          _buildExampleCard(
            title: 'File from Bytes',
            description: 'Display images from byte data',
            child: ImageMultiType(
              url: Uint8List.fromList([
                0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
                // This is just a placeholder - not a real PNG
              ]),
              height: 150,
              width: 300,
              fit: BoxFit.cover,
            ),
            code: '''ImageMultiType(
  url: Uint8List.fromList([...]),
  height: 150,
  width: 300,
  fit: BoxFit.cover,
)''',
          ),

          // Async file loading
          _buildExampleCard(
            title: 'Async File Loading',
            description: 'Loading images asynchronously',
            child: ImageMultiType(
              url: Future.delayed(
                const Duration(seconds: 2),
                () => Uint8List.fromList([
                  0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A,
                  // This is just a placeholder - not a real PNG
                ]),
              ),
              height: 150,
              width: 300,
              fit: BoxFit.cover,
            ),
            code: '''ImageMultiType(
  url: Future.delayed(
    Duration(seconds: 2),
    () => Uint8List.fromList([...]),
  ),
  height: 150,
  width: 300,
)''',
          ),

          // Mixed content
          _buildExampleCard(
            title: 'Mixed Content Grid',
            description: 'Combining different image types in a grid',
            child: GridView.count(
              shrinkWrap: true,
              physics: const NeverScrollableScrollPhysics(),
              crossAxisCount: 2,
              crossAxisSpacing: 8,
              mainAxisSpacing: 8,
              children: [
                ImageMultiType(
                  url: 'https://picsum.photos/150/150?random=19',
                  height: 150,
                  width: 150,
                  fit: BoxFit.cover,
                ),
                ImageMultiType(
                  url: Icons.star,
                  height: 150,
                  width: 150,
                  color: Colors.amber,
                ),
                ImageMultiType(
                  url: Container(
                    height: 150,
                    width: 150,
                    decoration: BoxDecoration(
                      gradient: const LinearGradient(
                        colors: [Colors.pink, Colors.purple],
                      ),
                      borderRadius: BorderRadius.circular(8),
                    ),
                    child: const Center(
                      child: Text(
                        'Custom',
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: 18,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                  ),
                ),
                ImageMultiType(
                  url: 'https://picsum.photos/150/150?random=20',
                  height: 150,
                  width: 150,
                  fit: BoxFit.cover,
                ),
              ],
            ),
            code: '''GridView.count(
  crossAxisCount: 2,
  children: [
    ImageMultiType(url: 'https://picsum.photos/150/150?random=19'),
    ImageMultiType(url: Icons.star, color: Colors.amber),
    ImageMultiType(url: Container(...)),
    ImageMultiType(url: 'https://picsum.photos/150/150?random=20'),
  ],
)''',
          ),
        ],
      ),
    );
  }

  Widget _buildExampleCard({
    required String title,
    required String description,
    required Widget child,
    required String code,
  }) {
    return Card(
      margin: const EdgeInsets.only(bottom: 20),
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(
              description,
              style: TextStyle(color: Colors.grey[600]),
            ),
            const SizedBox(height: 16),
            child,
            const SizedBox(height: 16),
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(12),
              decoration: BoxDecoration(
                color: Colors.grey[100],
                borderRadius: BorderRadius.circular(8),
              ),
              child: Text(
                code,
                style: const TextStyle(fontFamily: 'monospace', fontSize: 12),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
130
points
15
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Flutter package for displaying images from network, assets, SVG, files, or widgets with caching and error handling.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

cached_network_image, flutter, flutter_cache_manager, flutter_svg

More

Packages that depend on image_multi_type