doUploadMedia function
ProgressTracker<Uri>
doUploadMedia(
- dynamic file,
- MediaContentType<Object> contentType, {
- dynamic mediaType,
- required String mediaId,
- ProgressTracker<Uri>? progress,
})
Implementation
ProgressTracker<Uri> doUploadMedia(
final dynamic file, MediaContentType contentType,
{mediaType, required String mediaId, ProgressTracker<Uri>? progress}) {
initializeGStorageFileLoaders();
var storageReference = _ref.child(getMediaRefUri(mediaId, mediaType));
var pfile = PFile.of(file);
var tup = setupTask(storageReference, pfile!, "image/jpeg");
final _progress = progress ?? ProgressTracker<Uri>.ratio();
tup.then((t) {
StreamSubscription? sub;
var uploadTask = t.first;
sub = uploadTask.onStateChanged.listen((event) {
switch (event.state) {
case fb.TaskState.PAUSED:
_log.info("Paused upload for $mediaId");
break;
case fb.TaskState.RUNNING:
_progress.update(event.bytesTransferred.toDouble() *
100 /
event.totalBytes.toDouble());
break;
case fb.TaskState.SUCCESS:
sub?.cancel();
break;
case fb.TaskState.CANCELED:
sub?.cancel();
break;
case fb.TaskState.ERROR:
sub?.cancel();
_progress.completeError();
break;
}
});
uploadTask.future.then((_) async {
final url = await storageReference.getDownloadURL();
final uri = url.toString().toUri();
_progress.complete(uri);
_progress.dispose();
});
});
return _progress;
}