fix storage upload issue
This commit is contained in:
@@ -63,7 +63,8 @@ Future<void> deleteStorageFromUrls(List<String> urls) async {
|
||||
Future<void> deleteStorageFromUrl(String url) async {
|
||||
try {
|
||||
StorageReference storageReference =
|
||||
await FirebaseStorage.instance.getReferenceFromUrl(url);
|
||||
await FirebaseStorage(storageBucket: Config.instance.bucketName)
|
||||
.getReferenceFromUrl(url);
|
||||
await storageReference.delete();
|
||||
} catch (e) {
|
||||
log.warning("deleteStorage:$e");
|
||||
|
||||
@@ -253,8 +253,10 @@ class PackageModel extends BaseModel {
|
||||
package.fcsID = user.fcsID;
|
||||
}
|
||||
if (files != null) {
|
||||
if (files.length > uploadPhotoLimit)
|
||||
if (files.length > uploadPhotoLimit) {
|
||||
throw Exception("Exceed number of file upload");
|
||||
}
|
||||
|
||||
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
||||
String path = Path.join(pkg_files_path);
|
||||
List<String> urls = await uploadFiles(path, files);
|
||||
@@ -262,7 +264,16 @@ class PackageModel extends BaseModel {
|
||||
package.photoUrls.add(url);
|
||||
});
|
||||
}
|
||||
return Services.instance.packageService.createReceiving(package);
|
||||
|
||||
try {
|
||||
return Services.instance.packageService.createReceiving(package);
|
||||
} catch (e) {
|
||||
try {
|
||||
// delete uploaded photos if create fails
|
||||
deleteStorageFromUrls(package.photoUrls);
|
||||
} catch (e) {}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateReceiving(User user, Package package, List<File> files,
|
||||
@@ -274,9 +285,9 @@ class PackageModel extends BaseModel {
|
||||
for (String url in deletedUrls) {
|
||||
package.photoUrls.remove(url);
|
||||
}
|
||||
await deleteStorageFromUrls(deletedUrls);
|
||||
}
|
||||
|
||||
List<String> uploadedURL = [];
|
||||
if (files != null) {
|
||||
var count = (package.photoUrls?.length ?? 0) +
|
||||
files.length -
|
||||
@@ -284,14 +295,25 @@ class PackageModel extends BaseModel {
|
||||
|
||||
if (count > uploadPhotoLimit)
|
||||
throw Exception("Exceed number of file upload");
|
||||
|
||||
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
||||
String path = Path.join(pkg_files_path);
|
||||
List<String> urls = await uploadFiles(path, files);
|
||||
urls.forEach((url) {
|
||||
uploadedURL = await uploadFiles(path, files);
|
||||
uploadedURL.forEach((url) {
|
||||
package.photoUrls.add(url);
|
||||
});
|
||||
}
|
||||
await Services.instance.packageService.updateReceiving(package);
|
||||
try {
|
||||
await Services.instance.packageService.updateReceiving(package);
|
||||
} catch (e) {
|
||||
// delete newly uploaded photos if fails
|
||||
try {
|
||||
deleteStorageFromUrls(uploadedURL);
|
||||
package.photoUrls.removeWhere((i) => uploadedURL.contains(i));
|
||||
} catch (e) {}
|
||||
throw e;
|
||||
}
|
||||
return deleteStorageFromUrls(deletedUrls);
|
||||
}
|
||||
|
||||
Future<void> deleteReceiving(Package package) {
|
||||
@@ -304,9 +326,9 @@ class PackageModel extends BaseModel {
|
||||
for (String url in deletedUrls) {
|
||||
package.photoUrls.remove(url);
|
||||
}
|
||||
await deleteStorageFromUrls(deletedUrls);
|
||||
}
|
||||
|
||||
List<String> uploadedURL = [];
|
||||
if (files != null) {
|
||||
var count = (package.photoUrls?.length ?? 0) +
|
||||
files.length -
|
||||
@@ -316,13 +338,23 @@ class PackageModel extends BaseModel {
|
||||
throw Exception("Exceed number of file upload");
|
||||
package.photoUrls = package.photoUrls == null ? [] : package.photoUrls;
|
||||
String path = Path.join(pkg_files_path);
|
||||
List<String> urls = await uploadFiles(path, files);
|
||||
urls.forEach((url) {
|
||||
uploadedURL = await uploadFiles(path, files);
|
||||
uploadedURL.forEach((url) {
|
||||
package.photoUrls.add(url);
|
||||
});
|
||||
package.photoUrls.removeWhere((e) => deletedUrls.contains(e));
|
||||
}
|
||||
await Services.instance.packageService.updateProcessing(package);
|
||||
try {
|
||||
await Services.instance.packageService.updateProcessing(package);
|
||||
} catch (e) {
|
||||
// delete newly uploaded photos if fails
|
||||
try {
|
||||
deleteStorageFromUrls(uploadedURL);
|
||||
package.photoUrls.removeWhere((i) => uploadedURL.contains(i));
|
||||
} catch (e) {}
|
||||
throw e;
|
||||
}
|
||||
return deleteStorageFromUrls(deletedUrls);
|
||||
}
|
||||
|
||||
Future<void> deleteProcessing(Package package) {
|
||||
|
||||
@@ -81,7 +81,7 @@ class _ReceivingEditorState extends State<ReceivingEditor> {
|
||||
setState(() {
|
||||
this.user = u;
|
||||
});
|
||||
},popPage: true)),
|
||||
}, popPage: true)),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -224,10 +224,10 @@ class _ReceivingEditorState extends State<ReceivingEditor> {
|
||||
}
|
||||
|
||||
_save() async {
|
||||
package.trackingID = _trackingIDCtl.text;
|
||||
package.remark = _remarkCtl.text;
|
||||
Package _p =
|
||||
Package(trackingID: _trackingIDCtl.text, remark: _remarkCtl.text);
|
||||
|
||||
if (package.trackingID == null || package.trackingID == "") {
|
||||
if (_p.trackingID == null || _p.trackingID == "") {
|
||||
showMsgDialog(context, "Error", "Invalid tracking ID!");
|
||||
return;
|
||||
}
|
||||
@@ -239,12 +239,13 @@ class _ReceivingEditorState extends State<ReceivingEditor> {
|
||||
try {
|
||||
if (_isNew) {
|
||||
await packageModel.createReceiving(
|
||||
user, package, _multiImgController.getAddedFile);
|
||||
user, _p, _multiImgController.getAddedFile);
|
||||
} else {
|
||||
package.id = widget.package.id;
|
||||
_p.id = widget.package.id;
|
||||
_p.photoUrls = package.photoUrls;
|
||||
await packageModel.updateReceiving(
|
||||
user,
|
||||
package,
|
||||
_p,
|
||||
_multiImgController.getAddedFile,
|
||||
_multiImgController.getDeletedUrl);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user