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

A smart cached network image package with queue management, retry logic, and rate limiting

example/smart_cached_network_image_example.dart

import 'package:flutter/material.dart';
import 'package:smart_cached_network_image/smart_cached_network_image.dart';

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

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

  @override
  Widget build(final BuildContext context) {
    return MaterialApp(
      title: 'Smart Cached Network Image Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<String> _imageUrls = [
    'https://picsum.photos/300/200?random=1',
    'https://picsum.photos/300/200?random=2',
    'https://picsum.photos/300/200?random=3',
    'https://picsum.photos/300/200?random=4',
    'https://picsum.photos/300/200?random=5',
    'https://picsum.photos/300/200?random=6',
    'https://picsum.photos/300/200?random=7',
    'https://picsum.photos/300/200?random=8',
  ];

  @override
  void initState() {
    super.initState();
    _initializeImageProvider();
  }

  Future<void> _initializeImageProvider() async {
    await SmartCachedNetworkImageProvider.initialize(
      ImageLoadConfig(
        maxConcurrentRequests: 2,
        requestDelay: Duration(milliseconds: 100),
      ),
    );
  }

  @override
  Widget build(final BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Smart Cached Network Image Example'),
        actions: [
          IconButton(
            icon: const Icon(Icons.refresh),
            onPressed: () {
              setState(() {
                _imageUrls.shuffle();
              });
            },
          ),
          IconButton(
            icon: const Icon(Icons.clear),
            onPressed: () async {
              await SmartCachedNetworkImageProvider.cacheManager.clearCache();
              setState(() {});
            },
          ),
        ],
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                Text('Loading queue: ${SmartCachedNetworkImageProvider.queueLength}'),
                Text('Currently loading: ${SmartCachedNetworkImageProvider.loadingCount}'),
                Text('Cached files: ${SmartCachedNetworkImageProvider.cacheManager.cachedFilesCount}'),
              ],
            ),
          ),
          Expanded(
            child: GridView.builder(
              padding: const EdgeInsets.all(16.0),
              gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 2,
                crossAxisSpacing: 16.0,
                mainAxisSpacing: 16.0,
              ),
              itemCount: _imageUrls.length,
              itemBuilder: (final BuildContext context, final int index) {
                return Card(
                  elevation: 4.0,
                  child: Column(
                    children: [
                      Expanded(
                        child: SmartCachedNetworkImage(
                          imageUrl: _imageUrls[index],
                          placeholder: const Center(
                            child: CircularProgressIndicator(),
                          ),
                          errorWidget: const Center(
                            child: Icon(Icons.error, color: Colors.red),
                          ),
                          fit: BoxFit.cover,
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(
                          'Image ${index + 1}',
                          style: const TextStyle(fontSize: 12),
                        ),
                      ),
                    ],
                  ),
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                const Text('FutureBuilder Example:'),
                const SizedBox(height: 8.0),
                SizedBox(
                  height: 100,
                  child: SmartCachedNetworkImageFuture(
                    imageUrl: 'https://picsum.photos/200/100?random=9',
                    placeholder: const Center(
                      child: CircularProgressIndicator(),
                    ),
                    errorWidget: const Center(
                      child: Icon(Icons.error, color: Colors.red),
                    ),
                    fit: BoxFit.cover,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
1
likes
160
points
8
downloads

Publisher

verified publisherauramel.ru

Weekly Downloads

A smart cached network image package with queue management, retry logic, and rate limiting

Repository (GitHub)
View/report issues

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

cached_network_image, crypto, flutter, http, path_provider, queue

More

Packages that depend on smart_cached_network_image