🚀 Smart Download Manager Plus
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
Rangeheaders - Some file types require external apps to open
- Android 13+ requires notification permission
📌 Roadmap
Background downloads (WorkManager / BGTaskScheduler)File preview inside appDownload groupingWeb support
🤝 Contributing
Contributions are welcome! Feel free to open issues or submit PRs.
📄 License
MIT License © 2026