httpUploadStream function
Implementation
Stream<UploadStreamProgress> httpUploadStream(
TClient client, {
required String path,
required File file,
TClientToken? token,
}) {
final controller = StreamController<UploadStreamProgress>();
(() async {
try {
controller.add(
UploadStreamProgress(
progressStatus: StreamProgressStatus.preparing,
total: file.lengthSync(),
),
);
await client.upload(
path,
file: file,
token: token,
onUploadProgress: (sent, total) {
double progress = total > 0 ? (sent / total) : 0.0;
controller.add(
UploadStreamProgress(
progressStatus: StreamProgressStatus.progress,
total: total,
loaded: sent,
progress: progress,
),
);
},
onError: (message) {
controller.add(
UploadStreamProgress(
progressStatus: StreamProgressStatus.error,
total: file.lengthSync(),
errorMessage: message,
isCanceled: true,
),
);
controller.close();
},
onCancelCallback: (message) {
controller.add(
UploadStreamProgress(
progressStatus: StreamProgressStatus.error,
total: file.lengthSync(),
errorMessage: message,
isCanceled: true,
),
);
controller.close();
},
);
controller.add(
UploadStreamProgress(progressStatus: StreamProgressStatus.done),
);
} catch (e) {
controller.add(
UploadStreamProgress(
progressStatus: StreamProgressStatus.error,
total: file.lengthSync(),
errorMessage: e.toString(),
isCanceled: true,
),
);
controller.close();
}
})();
return controller.stream;
}