Flutter读取Google Drive文件时drive.FileList返回null如何解决
问题排查与解决步骤
核心问题定位
你当前readFile方法中没有实际调用Google Drive的文件列表查询接口,仅手动实例化了一个空的drive.FileList对象,因此获取不到任何文件数据。
修复方案
1. 替换错误的列表查询逻辑
将readFile方法中手动初始化FileList的代码,替换为调用Drive API的files.list接口发起实际查询,修正后的代码示例:
Future<void> readFile() async { print('read file'); final googleSignIn = signIn.GoogleSignIn.standard(scopes: [ drive.DriveApi.driveFileScope, // 若使用应用专属目录则替换为 drive.DriveApi.driveAppdataScope ]); final signIn.GoogleSignInAccount? account = await googleSignIn.signIn(); print("User account $account"); final authHeaders = await account!.authHeaders; final authenticateClient = GoogleAuthClient(authHeaders); final driveApi = drive.DriveApi(authenticateClient); // 核心修改:调用实际的列表查询接口,添加await等待返回结果 // 若使用应用专属目录,需要新增参数 spaces: 'appDataFolder' drive.FileList fileList = await driveApi.files.list( q: 'trashed = false', // 过滤已删除文件 // $fields参数可指定需要返回的文件属性,按需配置 $fields: 'files(id,name,size,createdTime,mimeType)', ); List<drive.File>? allFiles = fileList.files; if (allFiles == null || allFiles.isEmpty) { print('allFiles is empty'); return; } // 遍历打印文件信息 for (var file in allFiles) { print('文件名称:${file.name},文件ID:${file.id}'); } }
2. 权限校验
- 你当前使用的
driveFileScope权限仅允许访问当前应用创建的文件,其他应用上传的文件无法被查询到,符合你写入正常、查询自己上传文件的场景 - 若需要查询用户网盘所有文件,需替换为
drive.DriveApi.driveScope,该权限需要在Google Cloud控制台提交应用审核后才可正式上线使用 - 切换权限后必须让用户重新登录授权,旧的授权缓存会保留之前的权限配置,不会自动更新
3. 特殊场景适配
如果你使用driveAppdataScope存储应用专属数据,需要在list方法中添加spaces: 'appDataFolder'参数,否则无法查询到专属目录下的文件。
内容的提问来源于stack exchange,提问作者puzzled
相关产品推荐
相关产品推荐

