import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:spotube/services/download_manager/download_request.dart'; import 'package:spotube/services/download_manager/download_status.dart'; class DownloadTask { final DownloadRequest request; ValueNotifier status = ValueNotifier(DownloadStatus.queued); ValueNotifier progress = ValueNotifier(0); DownloadTask( this.request, ); Future whenDownloadComplete( {Duration timeout = const Duration(hours: 2)}) async { var completer = Completer(); if (status.value.isCompleted) { completer.complete(status.value); } void listener() { if (status.value.isCompleted) { completer.complete(status.value); status.removeListener(listener); } } status.addListener(listener); return completer.future.timeout(timeout); } }