Flutter使用file_picker 4.2.1出现lengthSync、openRead未定义错误如何解决
Flutter file_picker 4.x版本谷歌云盘上传报错修复方案
不需要更换依赖包,只需要适配file_picker 4.x的API调整修改代码即可。报错的核心原因是file_picker 4.0之后pickFiles方法返回值从旧版的File对象改为FilePickerResult对象,API结构发生了变化,对应三个报错的修复逻辑如下:
- 第一个报错:你直接取
FilePickerResult.paths得到的是所有选中文件的路径数组,而path.basename方法需要传入单个路径字符串,因此出现类型不匹配 - 第二个、第三个报错:
openRead和lengthSync是dart:io中File类的实例方法,你调用的是FilePickerResult实例,自然不存在这两个方法
单文件上传场景修改后的完整代码
import 'dart:io'; import 'package:path/path.dart' as path; // 其他原有逻辑保持不变 var client = GoogleHttpClient(await googleSignInAccount!.authHeaders); var drive = ga.DriveApi(client); ga.File fileToUpload = ga.File(); var pickerResult = await FilePicker.platform.pickFiles( type: _pickingType, allowMultiple: _multiPick, onFileLoading: (FilePickerStatus status) => print(status), allowedExtensions: (_extension?.isNotEmpty ?? false) ? _extension?.replaceAll(' ', '').split(',') : null, ); // 新增空校验,处理用户取消选文件的场景 if (pickerResult == null || pickerResult.files.isEmpty) { return; } // 取出选中的文件构造本地File实例 PlatformFile pickedPlatformFile = pickerResult.files.first; File localFile = File(pickedPlatformFile.path!); fileToUpload.parents = ["appDataFolder"]; fileToUpload.name = path.basename(localFile.path); var response = await drive.files.create( fileToUpload, uploadMedia: ga.Media(localFile.openRead(), localFile.lengthSync()), ); print(response); _listGoogleDriveFiles();
多文件上传场景适配代码
如果开启了多选配置,遍历选中的文件列表逐个上传即可:
if (pickerResult == null || pickerResult.files.isEmpty) { return; } for (var platformFile in pickerResult.files) { File localFile = File(platformFile.path!); ga.File fileToUpload = ga.File(); fileToUpload.parents = ["appDataFolder"]; fileToUpload.name = path.basename(localFile.path); var response = await drive.files.create( fileToUpload, uploadMedia: ga.Media(localFile.openRead(), localFile.lengthSync()), ); print('文件${fileToUpload.name}上传完成,资源ID:${response.id}'); } _listGoogleDriveFiles();
可选替代包说明
如果仅需要上传图片/视频类资源,可以使用官方维护的image_picker包;但file_picker支持全类型文件选择,适配后完全可以正常使用,无需更换。
内容的提问来源于stack exchange,提问作者Tanu Kushwaha
相关产品推荐
相关产品推荐

