CachedNetworkImage: मुख्य अवधारणाएँ और ImageProvider विजेट

लेखक: IT Sectr प्रकाशित: 2026-05-05 पढ़ने का समय: 8 मिनट

CachedNetworkImage एक Flutter विजेट है जो नेटवर्क से इमेज लोड करने और कैश करने के लिए है, जिसमें प्रोग्रेस इंडिकेटर, प्लेसहोल्डर और एरर हैंडलिंग का समर्थन है। आधिकारिक पैकेज पेज के अनुसार, लाइब्रेरी flutter_cache_manager पर आधारित है और कॉन्फ़िगरेबल TTL के साथ स्वचालित डिस्क कैशिंग प्रदान करती है। CachedNetworkImage कैशिंग के साथ Flutter ऐप्लिकेशन में इमेज लोड करने का मानक समाधान है।

मुख्य बिंदु

  • CachedNetworkImage — स्वचालित कैश प्रबंधन के साथ नेटवर्क इमेज लोड करने और कैश करने के लिए Flutter विजेट।
  • flutter_cache_manager — SQLite इंडेक्सिंग के साथ दो-स्तरीय कैशिंग (फ़ाइल + इन-मेमोरी) लागू करने वाला आधार पैकेज।
  • ImageProvider — किसी भी स्रोत से डीकोड की गई इमेज को एसिंक्रोनस रूप से प्राप्त करने के लिए Flutter की तंत्र।
  • प्रोग्रेस इंडिकेटर विजेट में निर्मित है और builder पैरामीटर progressIndicatorBuilder के माध्यम से डाउनलोड प्रतिशत प्रदर्शित करता है।
  • एरर हैंडलिंग — विजेट लोड विफल होने पर errorWidget दिखाता है, टूटी इमेज को प्लेसहोल्डर से बदलता है।

CachedNetworkImage क्या है?

CachedNetworkImage pub.dev पर इसी नाम के पैकेज से एक Flutter विजेट है जो स्वचालित कैशिंग के साथ नेटवर्क इमेज लोडिंग प्रदान करता है। यह मानक Image.network के चारों ओर एक आवरण है, जो फ़ाइल कैशिंग, प्रोग्रेस इंडिकेटर और कस्टम एरर हैंडलिंग जोड़ता है।

आंतरिक रूप से, CachedNetworkImage flutter_cache_manager — फ़ाइलों को ट्रैक करने के लिए SQLite डेटाबेस वाला कैश मैनेजर — का उपयोग करता है। पहले अनुरोध पर, इमेज नेटवर्क से डाउनलोड होती है, डिस्क पर सेव होती है, और बाद के अनुरोधों पर TTL (डिफ़ॉल्ट 7 दिन) को ध्यान में रखते हुए कैश से प्रदान की जाती है। इन-मेमोरी कैशिंग Flutter के मानक ImageCache द्वारा प्रबंधित की जाती है।

पैकेज के pub.dev पर 4,000 से अधिक लाइक हैं और इसका उपयोग हज़ारों Flutter प्रोजेक्ट्स में होता है। CachedNetworkImage सभी Flutter प्लेटफ़ॉर्म को सपोर्ट करता है: Android, iOS, Web, macOS, Windows और Linux। एकीकृत API की बदौलत, डेवलपर बिना प्लेटफ़ॉर्म-विशिष्ट कोड के क्रॉस-प्लेटफ़ॉर्म इमेज लोडिंग प्राप्त करते हैं।

Flutter में इमेज कैशिंग कैसे काम करती है

Flutter दो-स्तरीय कैशिंग सिस्टम का उपयोग करता है: ImageCache (मेमोरी) और flutter_cache_manager (डिस्क + SQLite)। ImageCache संख्या (डिफ़ॉल्ट 1000) और आकार (डिफ़ॉल्ट 100 MB) की सीमाओं के साथ डीकोड की गई इमेज का वैश्विक कैश है। flutter_cache_manager डिस्क पर फ़ाइलों और उनके मेटाडेटा का प्रबंधन करता है।

खोज क्रम

जब CachedNetworkImage को इमेज अनुरोध मिलता है, तो यह पहले Flutter के ImageCache की जाँच करता है — यदि इमेज पहले से मेमोरी में डीकोड है, तो यह तुरंत प्रदर्शित होती है। कैश मिस होने पर, flutter_cache_manager के माध्यम से डिस्क की जाँच की जाती है: SQLite क्वेरी जाँचती है कि फ़ाइल कैश में मौजूद है या नहीं और उसका TTL समाप्त हुआ है या नहीं। यदि फ़ाइल वर्तमान है — तो इसे डिस्क से पढ़ा जाता है, डीकोड किया जाता है और प्रदर्शित किया जाता है। यदि फ़ाइल गायब है या TTL समाप्त हो गया है — तो HTTP अनुरोध किया जाता है।

  • ImageCache — वैश्विक Flutter कैश, डिफ़ॉल्ट रूप से 1000 आइटम / 100 MB
  • flutter_cache_manager — SQLite + फ़ाइल सिस्टम, TTL 7 दिन
  • HTTP डाउनलोड — http पैकेज या कस्टम HttpClient के माध्यम से किया जाता है

कैश सफाई

DefaultCacheManager विधियाँ प्रदान करता है emptyCache() (पूर्ण सफाई), cleanCache() (केवल समाप्त हटाना) और कस्टम तिथि के साथ clearCacheWithAge()। ImageCache मेमोरी दबाव पर स्वचालित रूप से या मैन्युअल रूप से imageCache.clear() के माध्यम से साफ़ होता है।

CachedNetworkImage विजेट की वास्तुकला

CachedNetworkImage मानक Flutter विजेट संयोजन पर बनाया गया है। आंतरिक कार्यान्वयन एसिंक्रोनस लोडिंग के लिए ImageProvider और जीवनचक्र प्रबंधन के लिए StatefulWidget का उपयोग करता है।

मुख्य पैरामीटर

imageUrl — अनिवार्य पैरामीटर, इमेज URL (String या Uri)। placeholder — लोडिंग के दौरान दिखाया जाने वाला विजेट। errorWidget — लोडिंग त्रुटि पर विजेट। progressIndicatorBuilder — builder जो कॉन्टेक्स्ट, URL और totalSize व downloadedSize फ़ील्ड वाला DownloadProgress प्राप्त करता है।

ImageProvider

CachedNetworkImageProvider — ImageProvider का कार्यान्वयन जो CachedNetworkStreamImage लौटाता है, जो डाउनलोडिंग और कैशिंग का प्रबंधन करता है। प्रदाता Flutter के ImageCache के साथ एकीकृत होता है और सभी मानक ImageProvider क्षमताओं का समर्थन करता है: स्केलिंग, सेंटरिंग और दोहराव।

flutter_cache_manager को कॉन्फ़िगर करना

flutter_cache_manager CachedNetworkImage की कैशिंग की अंतर्निहित लाइब्रेरी है। यह कॉन्फ़िगर SQLite डेटाबेस, TTL और फ़ाइल सीमा के साथ DefaultCacheManager प्रदान करता है। आवश्यकता होने पर, अद्वितीय पैरामीटर के साथ कस्टम CacheManager बनाया जा सकता है।

पैरामीटरविवरणडिफ़ॉल्ट मान
maxAgeCacheObjectफ़ाइल संग्रहण की अधिकतम अवधि7 दिन
maxNrOfCacheObjectsफ़ाइलों की अधिकतम संख्या200
keyअद्वितीय प्रबंधक पहचानकर्ता“default”
repoमेटाडेटा संग्रहण प्रकारCacheObjectRepository (SQLite)
fileServiceडाउनलोड के लिए HTTP क्लाइंटHttpFileService

कस्टम CacheManager विधि ओवरराइड के साथ CacheManager से इनहेरिट करके बनाया जाता है। यह तब उपयोगी होता है जब इमेज को अलग निर्देशिका में संग्रहीत करने या भिन्न HTTP क्लाइंट का उपयोग करने की आवश्यकता होती है। प्रबंधक इंस्टेंस फिर CachedNetworkImage के cacheManager पैरामीटर में पास किया जाता है।

DefaultCacheManager का SQLite डेटाबेस ऐप्लिकेशन के temporaryDirectory में `{key}/CacheObjects.db` पथ पर स्थित होता है। इसमें cacheObjects तालिका है जिसमें फ़ील्ड हैं: key (URL), relativePath, url, creationDate, eTag, httpHeaders। समाप्त प्रविष्टियों की सफाई करते समय, maxAgeCacheObject पर शर्त के साथ SQL क्वेरी का उपयोग किया जाता है।

Dart में CachedNetworkImage उपयोग उदाहरण

CachedNetworkImage दो मुख्य लोडिंग दृष्टिकोण प्रदान करता है: CachedNetworkImage विजेट और कस्टम परिदृश्यों के लिए CachedNetworkImageProvider।

प्लेसहोल्डर के साथ बुनियादी लोडिंग

CachedNetworkImage — प्राथमिक दृष्टिकोण। बस imageUrl और placeholder पास करें। विजेट स्वचालित रूप से लोडिंग पूरी होने तक प्लेसहोल्डर प्रदर्शित करता है और फिर उसे इमेज से बदल देता है।

dart
CachedNetworkImage(
    imageUrl: "https://example.com/photo.jpg",
    placeholder: (context, url) => CircularProgressIndicator(),
    errorWidget: (context, url, error) => Icon(Icons.error),
    width: 200,
    height: 200,
    fit: BoxFit.cover,
)

placeholder और errorWidget builder फ़ंक्शन हैं जो कॉन्टेक्स्ट, URL और (errorWidget के लिए) एरर ऑब्जेक्ट स्वीकार करते हैं। यह दृष्टिकोण URL या एरर प्रकार के आधार पर अलग-अलग प्लेसहोल्डर दिखाने की अनुमति देता है।

प्रोग्रेस के साथ लोडिंग

progressIndicatorBuilder — एक पैरामीटर जो डाउनलोड प्रगति को प्रतिशत के रूप में प्रदर्शित करने की अनुमति देता है। DownloadProgress में totalSize (अज्ञात होने पर -1 हो सकता है) और downloadedSize होता है।

dart
CachedNetworkImage(
    imageUrl: "https://example.com/large.jpg",
    progressIndicatorBuilder: (context, url, downloadProgress) {
        return Center(
            child: SizedBox(
                width: 50,
                height: 50,
                child: Stack(
                    alignment: Alignment.center,
                    children: [
                        CircularProgressIndicator(
                            value: downloadProgress.progress,
                        ),
                        Text(
                            "\(downloadProgress.downloadedSize ~/ 1024) KB",
                        ),
                    ],
                ),
            ),
        };
    },
    imageBuilder: (context, imageProvider) {
        return Container(
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(12),
                image: DecorationImage(
                    image: imageProvider,
                    fit: BoxFit.cover,
                ),
            ),
        };
    },
)

imageBuilder — एक वैकल्पिक पैरामीटर जो इमेज प्रदर्शन को अनुकूलित करने की अनुमति देता है: गोल कोने, छाया, सजावट जोड़ना। उदाहरण गोल कोनों के लिए BorderRadius के साथ DecorationImage का उपयोग करता है।

CachedNetworkImageProvider का उपयोग

CachedNetworkImageProvider — CachedNetworkImage विजेट का उपयोग किए बिना Image या DecorationImage के लिए प्रदाता। BoxDecoration, FadeInImage या कस्टम Image विजेट के साथ काम करते समय उपयोगी।

dart
Container(
    decoration: BoxDecoration(
        image: DecorationImage(
            image: CachedNetworkImageProvider(
                "https://example.com/bg.jpg",
                maxWidthBytes: 2048,
                maxHeightBytes: 2048,
            ),
            fit: BoxFit.cover,
        ),
    ),
)

ImageBuilder और कस्टम हैंडलिंग

CachedNetworkImage में imageBuilder पैरामीटर मानक Image विजेट को कस्टम कार्यान्वयन से ओवरराइड करने की अनुमति देता है। सीधे Image प्रदर्शित करने के बजाय, आप सजावट के साथ Container, क्रॉपिंग के लिए ClipRRect, या रिपल इफ़ेक्ट के लिए Ink.image का उपयोग कर सकते हैं। imageBuilder तैयार इमेज का कॉन्टेक्स्ट और ImageProvider प्राप्त करता है, जो रेंडरिंग पर पूर्ण नियंत्रण देता है।

अतिरिक्त पैरामीटर: memCacheWidth और memCacheHeight RAM में कैश की गई इमेज के आकार को सीमित करते हैं, Flutter के ImageCache पर लोड कम करते हैं। cacheKey URL के बजाय कस्टम कैश कुंजी सेट करने की अनुमति देता है, जो URL में प्राधिकरण टोकन वाली इमेज के लिए उपयोगी है (क्वेरी पैरामीटर हर अनुरोध पर बदलते हैं लेकिन सामग्री समान रहती है)।

CachedNetworkImage बनाम मानक Image.network

मानक Image.network विजेट डिस्क पर सहेजे बिना हर विजेट पुनर्निर्माण पर इमेज लोड करता है। CachedNetworkImage फ़ाइल कैशिंग, प्रोग्रेस इंडिकेटर और एरर हैंडलिंग जोड़ता है, लेकिन flutter_cache_manager और SQLite पर निर्भरता जोड़ता है।

मापदंडImage.networkCachedNetworkImage
डिस्क कैशनहीं (केवल Flutter मेमोरी कैश)हाँ (SQLite + फ़ाइलें)
प्रगतिनहींprogressIndicatorBuilder
एरर विजेटडीबग में केवल लाल प्लेसहोल्डरकस्टम errorWidget
कैश TTLलागू नहींकॉन्फ़िगरेबल (डिफ़ॉल्ट 7 दिन)
निर्भरताएँकोई नहीं (Flutter में निर्मित)cached_network_image + flutter_cache_manager + sqflite
ऑफ़लाइन पहुँचनहींहाँ (पहले लोड की गई फ़ाइलों के साथ)
बिल्ड आकार0 KB अतिरिक्त~300 KB अतिरिक्त

उन प्रोजेक्ट्स के लिए जहाँ ऑफ़लाइन क्षमता और बैंडविड्थ बचत महत्वपूर्ण है, CachedNetworkImage स्पष्ट विकल्प है। सरल एक-बार स्क्रीन (जैसे ऑनबोर्डिंग या स्प्लैश) के लिए, Image.network को अतिरिक्त निर्भरता की आवश्यकता नहीं है।

Flutter प्रोजेक्ट में CachedNetworkImage सेटअप करना

CachedNetworkImage को एक मानक pub.dev निर्भरता के रूप में जोड़ा जाता है। इंस्टॉलेशन के बाद, विजेट उपयोग के लिए तैयार है। flutter_cache_manager एक ट्रांज़िटिव निर्भरता के रूप में शामिल है।

dart
// pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  cached_network_image: ^3.4.1

डिफ़ॉल्ट रूप से, DefaultCacheManager सेटिंग्स के साथ उपयोग किया जाता है: TTL = 7 दिन, अधिकतम 200 फ़ाइलें। वैश्विक पैरामीटर बदलने के लिए, Config के साथ कस्टम CacheManager इंस्टेंस बनाया जाता है, जहाँ maxAgeCacheObject, maxNrOfCacheObjects और repo ओवरराइड किए जाते हैं।

dart
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';

final customCacheManager = CacheManager(
  Config(
    "custom_images",
    stalePeriod: Duration(days: 14),
    maxNrOfCacheObjects: 500,
    repo: JsonCacheInfoRepository(
      databaseName: "custom_images_cache.db",
    ),
  ),
);

// कस्टम मैनेजर का उपयोग:
CachedNetworkImage(
    cacheManager: customCacheManager,
    imageUrl: url,
    // ...
)

maxWidthBytes और maxHeightBytes — कैश की गई फ़ाइल के आकार को सीमित करने के लिए वैकल्पिक पैरामीटर। यह डिस्क स्थान बचाने के लिए उपयोगी है जब मूल इमेज आवश्यक स्क्रीन आकार से बड़ी हो।

अक्सर पूछे जाने वाले प्रश्न

CachedNetworkImage क्या है और इसकी आवश्यकता क्यों है?

CachedNetworkImage स्वचालित डिस्क कैशिंग के साथ नेटवर्क इमेज लोड करने के लिए Flutter विजेट है। इसकी आवश्यकता बैंडविड्थ बचाने, ऑफ़लाइन मोड में काम करने और डाउनलोड प्रगति दिखाने के लिए है, जो मानक Image.network प्रदान नहीं करता।

मैं Flutter प्रोजेक्ट में CachedNetworkImage कैसे जोड़ूँ?

pubspec.yaml के dependencies सेक्शन में cached_network_image: ^3.4.1 जोड़ें और flutter pub get चलाएँ। फिर अपनी फ़ाइल में पैकेज इम्पोर्ट करें: import 'package:cached_network_image/cached_network_image.dart'.

कैश संग्रहण अवधि कैसे बदलूँ?

Config के साथ कस्टम CacheManager बनाएँ जहाँ stalePeriod पैरामीटर Duration के रूप में निर्दिष्ट हो। बनाए गए मैनेजर को CachedNetworkImage विजेट के cacheManager पैरामीटर में पास करें। डिफ़ॉल्ट रूप से, फ़ाइलें 7 दिनों तक संग्रहीत रहती हैं।

CachedNetworkImage कैश कैसे साफ़ करूँ?

सभी फ़ाइलों की पूर्ण सफाई के लिए DefaultCacheManager().emptyCache() कॉल करें। केवल समाप्त फ़ाइलों को हटाने के लिए cleanCache() का उपयोग करें। कस्टम मैनेजर को उसके इंस्टेंस पर emptyCache कॉल करके साफ़ किया जाता है।

क्या CachedNetworkImage सभी Flutter प्लेटफ़ॉर्म पर काम करता है?

हाँ, CachedNetworkImage Android, iOS, Web, macOS, Windows और Linux को सपोर्ट करता है। एकीकृत API सभी प्लेटफ़ॉर्म पर समान व्यवहार सुनिश्चित करती है, और कैशिंग प्रत्येक OS के लिए अनुकूलित flutter_cache_manager के माध्यम से काम करती है।

सारांश

  • CachedNetworkImage pub.dev पर 4,000 से अधिक लाइक के साथ Flutter में कैश्ड इमेज लोडिंग का मानक समाधान है।
  • दो-स्तरीय कैशिंग (Flutter ImageCache + SQLite के माध्यम से फ़ाइलें) नेटवर्क अनुरोधों को कम करती है और प्रदर्शन को गति देती है।
  • progressIndicatorBuilder बड़ी इमेज और धीमे कनेक्शन के लिए डाउनलोड प्रतिशत प्रदर्शित करने की अनुमति देता है।
  • कस्टम CacheManager TTL, फ़ाइल संख्या और संग्रहण पथ पर पूर्ण नियंत्रण देता है।
  • CachedNetworkImageProvider DecorationImage और BoxDecoration के साथ काम करता है, उपयोग के मामलों का विस्तार करता है।
  • ऑफ़लाइन पहुँच पहले लोड की गई इमेज तक मानक Image.network पर एक मुख्य लाभ है।
  • क्रॉस-प्लेटफ़ॉर्म — एकल कोडबेस बिना बदलाव के सभी छह Flutter प्लेटफ़ॉर्म पर काम करता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें