#flutter #asynchronous #async-await #dio
#flutter #асинхронный #асинхронный -ожидание #dio
Вопрос:
Я пытаюсь загрузить несколько файлов с помощью пакета dio. Из этой проблемы с git я узнал, что будущее.для достижения этой задачи можно использовать ожидание, хотя я могу обновлять несколько файлов одновременно, но не могу обновить базу данных. Вот фрагмент кода для загрузки
download(Attachment attachment) => work(context, () async {
final dio = Dio();
final path = await getLocalFilePath(attachment);
var downloadRequest = dio.download(
attachment.url,
path,
deleteOnError: true,
onReceiveProgress: (count, total) {
setState(
() {
_downloadProgress[attachment.url] = count / total;
print(_downloadProgress[attachment.url]);
},
);
},
).then(
(value) async {
await ReviewDownloadsDB().add({
'id': attachment.id,
'name': attachment.name,
'url': attachment.url,
'path': path
});
},
);
Future.wait([downloadRequest]);
});
Может кто-нибудь сказать мне, где я ошибаюсь, и как я могу добавить загруженный элемент в свою базу данных ObjectDB после его загрузки. Полный код для экрана присутствует здесь.
Комментарии:
1. Вы нашли какое-либо решение этой проблемы?
Ответ №1:
Если вы не возражаете против использования другого пакета, вы можете использовать пакет flutter_downloader для одновременной загрузки нескольких файлов. По умолчанию установлено максимальное количество задач одновременной загрузки, равное трем (3), вы можете изменить эту конфигурацию, следуя этому руководству.
Затем вы можете использовать FlutterDownloader.enqueue()
для создания задач загрузки.
final taskId = await FlutterDownloader.enqueue(
url: 'your download link',
headers: {}, // optional: header send with url (auth token etc)
savedDir: 'the path of directory where you want to save downloaded files',
showNotification: true, // show download progress in status bar (for Android)
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);