Implementation
Future<void> userPhotoUpload(
BuildContext context,
WidgetRef ref,
String? folderId,
) async {
return showDialog<DialogAction?>(
context: context,
builder: (context) {
return AlertDialog(
title: Text(t.photos.uploadPhotos),
content: Text(t.photos.uploadDescription),
actions: [
OutlinedButton.icon(
onPressed: () => context.pop(DialogAction.abort),
icon: const Icon(Icons.cancel),
label: const Text("Cancel"),
),
FilledButton.icon(
onPressed: () => context.pop(DialogAction.yes),
icon: const Icon(Icons.upload_file),
label: Text(t.photos.choosePhotos),
),
],
);
},
).then((DialogAction? result) {
if (result == null || result == DialogAction.abort) return null;
return ImagePicker().pickMultiImage().then((photos) {
if (photos.isEmpty) return null;
showDialog(
barrierDismissible: false,
context: context,
builder: (context) {
void fileUploadSuccessCallback() =>
ref.read(uploadProgressProvider.notifier).state +=
1 / photos.length;
void fileUploadErrorCallback(error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("${t.error.unknown}: $error"),
),
);
context.pop();
}
if (folderId == null) {
throw Exception("Folder ID is null");
} else {
ref.read(driveApiServiceProvider).uploadMultipleFiles(
photos,
folderId,
isDev ? appTeamDriveId : intranetDriveId,
fileUploadSuccessCallback,
fileUploadErrorCallback,
);
return const PhotoUploadProgressDialog();
}
},
);
}).then((_) => ref.read(uploadProgressProvider.notifier).state = 0);
});
}