π 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