A URL-based flutter downloader that supports to download any type of file and automatically manages a lot of things.
If you need Chinese Document, click here.
- manage download tasks by url
- simple download status
- I/O infrequently
- provide convenient download handle
- support batch download
- manage automatically files without requiring to be specified a download path
- based on flutter_downloader
Native Config: same as flutter_downloader native config
add the following line to your pubspec.yaml
dependencies:
al_downloader: ^1.8.4
run the following line with your command line
flutter packages get
import the following line, then you can use al_downloader
import 'package:al_downloader/al_downloader.dart';
ALDownloader.initialize();
ALDownloader.configurePrint(true, frequentEnabled: false);
ALDownloader.download(url,
directoryPath: directoryPath,
fileName: fileName,
handlerInterface:
ALDownloaderHandlerInterface(progressHandler: (progress) {
debugPrint(
'ALDownloader | download progress = $progress, url = $url\n');
}, succeededHandler: () {
debugPrint('ALDownloader | download succeeded, url = $url\n');
}, failedHandler: () {
debugPrint('ALDownloader | download failed, url = $url\n');
}, pausedHandler: () {
debugPrint('ALDownloader | download paused, url = $url\n');
}));
ALDownloader.addHandlerInterface(
ALDownloaderHandlerInterface(progressHandler: (progress) {
debugPrint(
'ALDownloader | download progress = $progress, url = $url\n');
}, succeededHandler: () {
debugPrint('ALDownloader | download succeeded, url = $url\n');
}, failedHandler: () {
debugPrint('ALDownloader | download failed, url = $url\n');
}, pausedHandler: () {
debugPrint('ALDownloader | download paused, url = $url\n');
}),
url);
ALDownloader.addForeverHandlerInterface(
ALDownloaderHandlerInterface(progressHandler: (progress) {
debugPrint(
'ALDownloader | download progress = $progress, url = $url\n');
}, succeededHandler: () {
debugPrint('ALDownloader | download succeeded, url = $url\n');
}, failedHandler: () {
debugPrint('ALDownloader | download failed, url = $url\n');
}, pausedHandler: () {
debugPrint('ALDownloader | download paused, url = $url\n');
}),
url);
ALDownloader.removeHandlerInterfaceForUrl(url);
/// Stop download, but the incomplete data will not be deleted.
ALDownloader.pause(url);
/// Stop download, and the incomplete data will be deleted.
ALDownloader.cancel(url);
/// Remove download, and all the data will be deleted.
ALDownloader.remove(url);
final status = await ALDownloader.getStatusForUrl(url);
final progress = await ALDownloader.getProgressForUrl(url);
final task = await ALDownloader.getTaskForUrl(url);
final tasks = await ALDownloader.tasks;
ALDownloaderBatcher.download(urls,
handlerInterface:
ALDownloaderHandlerInterface(progressHandler: (progress) {
debugPrint('ALDownloader | batch | download progress = $progress\n');
}, succeededHandler: () {
debugPrint('ALDownloader | batch | download succeeded\n');
}, failedHandler: () {
debugPrint('ALDownloader | batch | download failed\n');
}, pausedHandler: () {
debugPrint('ALDownloader | batch | download paused\n');
}));
ALDownloaderBatcher.addHandlerInterface(
ALDownloaderHandlerInterface(progressHandler: (progress) {
debugPrint('ALDownloader | batch | download progress = $progress\n');
}, succeededHandler: () {
debugPrint('ALDownloader | batch | download succeeded\n');
}, failedHandler: () {
debugPrint('ALDownloader | batch | download failed\n');
}, pausedHandler: () {
debugPrint('ALDownloader | batch | download paused\n');
}),
urls);
final status = await ALDownloaderBatcher.getStatusForUrls(urls);
final tasks = await ALDownloaderBatcher.getTasksForUrls(urls);
final physicalFilePath =
await ALDownloaderFileManager.getPhysicalFilePathForUrl(url);
debugPrint(
'ALDownloader | get physical file path for [url], url = $url, path = $physicalFilePath\n');
1. If the persistent file was removed by exceptional means, such as the cache folder being deleted by some business code, call [remove] and then call [download] to re-download for fixing the problem.
Welcome contribution!
Welcome to open issue or PR for any problem, suggestion and idea!
Maintainer: jackleemeta ([email protected])