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 =
FirebaseStorage.instance.ref().child(getMediaRefUri(mediaId, mediaType));
final pfile = PFile.of(file);
var tuple =
setupTask(storageReference, pfile!, "image/${file.extension ?? '*'}");
final _progress = progress ?? ProgressTracker<Uri>.ratio();
tuple.then((t) {
StreamSubscription? sub;
final _ = t.first;
_.whenComplete(() async {
final url = await storageReference.getDownloadURL();
final uri = url.toString().toUri();
_progress.complete(uri);
_progress.dispose();
});
sub = _.snapshotEvents.listen((event) {
switch (event.state) {
case TaskState.paused:
_log.info("Paused upload for $mediaId");
break;
case TaskState.running:
_progress.update(event.bytesTransferred.toDouble() *
100 /
event.totalBytes.toDouble());
break;
case TaskState.success:
sub?.cancel();
break;
case TaskState.canceled:
sub?.cancel();
break;
case TaskState.error:
sub?.cancel();
_progress.completeError();
break;
}
});
});
return _progress;
}