uploadToGoogleDrive method

Future<void> uploadToGoogleDrive(
  1. String filePath
)

Implementation

Future<void> uploadToGoogleDrive(String filePath) async {
  if (_driveApi == null) {
    print(
        'Google Drive API client not initialized. Please authenticate first.');
    return;
  }

  final file = File(filePath);
  final media = drive.Media(file.openRead(), file.lengthSync());

  final driveFile = drive.File()
    ..name = path.basename(filePath)
    ..mimeType = 'application/vnd.android.package-archive';

  try {
    // Upload the file
    final uploadedFile =
        await _driveApi.files.create(driveFile, uploadMedia: media);

    print('Upload successful to Google Drive!');

    // Set file permissions to make it shareable
    final permission = drive.Permission()
      ..type = 'anyone'
      ..role = 'reader';

    await _driveApi.permissions.create(
      permission,
      uploadedFile.id!,
    );

    // Retrieve the updated file metadata to get the webContentLink
    final updatedFile = await _driveApi.files.get(
      uploadedFile.id!,
      $fields: 'webContentLink',
    ) as drive.File;

    // Print the uploaded file's link
    if (updatedFile.webContentLink != null) {
      IndividualUploadService.updateUrlLinkState(updatedFile.webContentLink!);
    } else {
      print('Upload link not available.');
    }
  } catch (e) {
    print('Error uploading to Google Drive: $e');
    exit(0);
  }
}