userPhotoUpload function Resources

Future<void> userPhotoUpload(
  1. BuildContext context,
  2. WidgetRef ref,
  3. String? folderId
)

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);
  });
}