πŸš€ Smart Download Manager Plus

pub version likes popularity license

A powerful, resumable, and queue-based download manager for Flutter β€” built for production apps.


✨ Highlights

  • ⚑ Parallel downloads with queue system
  • πŸ”„ Resume & pause downloads
  • πŸ” Smart retry mechanism
  • πŸ“Š Real-time progress & speed tracking
  • πŸ“ Save directly to Downloads (Android MediaStore)
  • 🍎 iOS support (Documents directory)
  • πŸ”” Built-in notifications
  • πŸ“¦ Batch downloads
  • πŸ’Ύ Persistent tasks (auto restore)
  • πŸš€ Open file automatically after download

πŸ€” Why Smart Download Manager Plus?

  • Built for real production apps, not just demos
  • Supports resume downloads (Range requests)
  • Handles Android scoped storage (MediaStore) correctly
  • Clean and simple API
  • Designed for performance and reliability

πŸŽ₯ Demo


πŸ“Έ Preview


πŸš€ Installation

dependencies:
  smart_download_manager_plus: latest

⚑ Quick Start

Initialize

await DownloadNotificationService.init();
await DownloadNotificationService.requestPermission();

Create Controller

final controller = DownloadController(
  maxConcurrent: 2,
);

Download a File

final task = controller.addTask(
  'https://example.com/file.pdf',
  subFolder: 'MyApp',
  openAfterDownload: true,
);

await controller.startTask(task);

πŸ“₯ Usage Examples

πŸ“„ Download PDF

controller.addTask(
  'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
  openAfterDownload: true,
);

πŸ–Ό Download Image

controller.addTask(
  'https://www.w3.org/Icons/w3c_home.png',
);

πŸ“¦ Batch Download

controller.addBatch([
  'https://example.com/file1.pdf',
  'https://example.com/file2.png',
]);

⏸ Pause / Resume

controller.pauseTask(task);
controller.resumeTask(task);

❌ Cancel Download

await controller.cancelTask(task);

πŸš€ Open File After Download

Automatically open files when completed:

controller.addTask(
  url,
  openAfterDownload: true,
);

πŸ“‚ File Storage

Android

  • Uses MediaStore API
  • Saves to Downloads/
  • No storage permission required

iOS

  • Saves to Application Documents Directory

πŸ“‘ Listen to Progress

controller.onTaskUpdated.listen((task) {
  print(task.progress);
});

βš™οΈ Configuration

Option Description
maxConcurrent Number of parallel downloads
priority Download priority
headers Custom request headers
retryDelay Delay between retries
maxRetries Retry attempts
subFolder Save inside subfolder
openAfterDownload Auto open file

πŸ†š Comparison

Feature Smart Download Manager Plus Other Packages
Resume Support βœ… ❌
Notifications βœ… ⚠️
MediaStore Support βœ… ❌
Queue System βœ… ⚠️
Clean API βœ… ⚠️

🧠 How It Works

  • Uses Dio for downloading
  • Supports HTTP Range requests (resume downloads)
  • Stores tasks using SharedPreferences
  • Uses MethodChannel for Android file saving

⚠️ Notes

  • Resume requires server support for Range headers
  • Some file types require external apps to open
  • Android 13+ requires notification permission

πŸ“Œ Roadmap

  • Background downloads (WorkManager / BGTaskScheduler)
  • File preview inside app
  • Download grouping
  • Web support

🀝 Contributing

Contributions are welcome! Feel free to open issues or submit PRs.


πŸ“„ License

MIT License Β© 2026