media_cache_manager 0.3.1 copy "media_cache_manager: ^0.3.1" to clipboard
media_cache_manager: ^0.3.1 copied to clipboard

This package helps you to cache media (Audio, Video, Image, etc...).


πŸ“¦ media_cache_manager #

⚑ Helps you to cache and encrypt media (Audio 🎡, Video 🎬, Image πŸ–ΌοΈ, etc...) Permanently or for a specific time.

With just a URL, the DownloadMediaBuilder widget will:

  • πŸ” Search locally for the file.
  • πŸ“‚ If found β†’ File will be returned in a snapshot.
  • ⬇️ If not found β†’ File will be downloaded and stored locally, then returned in a snapshot.

✨ What’s New? #

  • πŸ—“οΈ daysToExpire behavior improved.
  • βš™οΈ autoDownload option to enable/disable auto download.
  • πŸ“ Renamed onInit ➝ onInitialize.
  • πŸ”„ Added initial state to DownloadMediaStatus.
  • πŸ” Encrypt & decrypt files with AES.
  • ⏹️ Cancel downloads anytime.
  • πŸ” Retry failed downloads.
  • πŸ”„ Added Encrypting / Decrypting states.
  • 🧩 Refactored DownloadMediaBuilder widget.
  • πŸš€ Optimized plugin imports.

πŸ“₯ Install #

Add to your pubspec.yaml:

dependencies:
  media_cache_manager: 

βš™οΈ Android Setup #

  1. Open android β†’ app β†’ build.gradle
  2. Add this inside defaultConfig:
multiDexEnabled true
minSdkVersion 20

πŸš€ Initializing Plugin (Required) #

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MediaCacheManager.instance.init();
  runApp(const MyApp());
}

πŸ” Encrypted Files (Optional) #

Encrypt media files using AES (OFB mode).

βœ… Enable encryption globally #

await MediaCacheManager.instance.setEncryptionPassword("I love flutter");

or directly on init:

await MediaCacheManager.instance.init(encryptionPassword: 'I love flutter');

⚠️ Notes:

  • 🐒 Large files may take more time to en/decrypt.
  • πŸ”’ Files are stored in Temporary Directory, so users & other apps can’t access them.
  • πŸ”‘ Keep passwords safe! The plugin does not cache your file passwords.

πŸ” Encrypt single file #

DownloadMediaBuilder(
  url: "https://example.com/sample.jpg",
  encryptionPassword: "this is a password",  
  onSuccess: (snapshot) {
    return Image.file(File(snapshot.filePath!));
  }
)

⏳ File Expiration (Optional) #

Make cached files expire automatically after specific days.

await MediaCacheManager.instance.setExpireDate(daysToExpire: 10);

or via init:

await MediaCacheManager.instance.init(daysToExpire: 1);

πŸ“Œ Behavior: If a file is accessed before its expiration β†’ expiration will extend automatically.


⚑ General Usage #

DownloadMediaBuilder(
  url: 'https://example.com/sample.jpg',
  onSuccess: (snapshot) {
    return Image.file(File(snapshot.filePath!));
  },
  onLoading: (snapshot) {
    return LinearProgressIndicator(value: snapshot.progress);
  },
),

⏯️ Disable Auto Download #

By default, autoDownload = true. You can disable it and control downloads manually:

late DownloadMediaBuilderController controller;

DownloadMediaBuilder(
  url: 'https://example.com/video.mp4',
  autoDownload: false,
  onInitialize: (ctrl) => controller = ctrl,
  onInitial: (_) {
    return ElevatedButton(
      onPressed: controller.getFile,
      child: const Text('Load file'),
    );
  },
  onSuccess: (snapshot) => BetterPlayer.file(snapshot.filePath!),
  onLoading: (snapshot) => LinearProgressIndicator(value: snapshot.progress),
),

⚠️ Handle Loading & Error States #

DownloadMediaBuilder(
  url: 'https://example.com/video.mp4',
  onLoading: (snapshot) => LinearProgressIndicator(value: snapshot.progress),
  onSuccess: (snapshot) => BetterPlayer.file(snapshot.filePath!),
  onError: (_) => const Text('❌ Error!'),
),

⏹️ Cancel & πŸ”„ Retry Downloads #

late DownloadMediaBuilderController controller;

DownloadMediaBuilder(
  url: 'https://example.com/video.mp4',
  onInitialize: (ctrl) => controller = ctrl,
  onLoading: (snapshot) {
    return Column(
      children: [
        LinearProgressIndicator(value: snapshot.progress),
        ElevatedButton(
          onPressed: controller.cancel,
          child: const Text('Cancel Download'),
        ),
      ],
    );
  },
  onSuccess: (snapshot) => BetterPlayer.file(snapshot.filePath!),
  onError: (_) => const Text('❌ Error!'),
  onCancel: (_) {
    return ElevatedButton(
      onPressed: controller.retry,
      child: const Text('Retry'),
    );
  },
),

πŸ“Œ Notes:

  • ❌ You can only call cancel() if status = loading.
  • πŸ” You can only call retry() if status = canceled.

πŸ“Š Snapshot Explained #

DownloadMediaSnapshot contains 3 fields:

  1. Status β†’ Initial, Success, Loading, Error, Canceled, Encrypting, Decrypting.
  2. FilePath β†’ Available if file is downloaded.
  3. Progress β†’ Download progress (0 β†’ 1).

83
likes
160
points
219
downloads

Publisher

unverified uploader

Weekly Downloads

This package helps you to cache media (Audio, Video, Image, etc...).

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

aes_crypt_null_safe, dio, flutter, get_storage, path_provider

More

Packages that depend on media_cache_manager