Flutter使用Dio上传二进制图片列表时遇类型转换错误求助
解决Dio上传Multipart文件时的Null转String异常问题
问题根源
你直接将Stream<List<int>>列表传给FormData的Documents字段,不符合Dio处理文件上传的规范——Dio需要用MultipartFile类型包装文件数据,而非原始Stream。另外,documents参数未指定泛型类型,也可能引发类型推断错误。
修正方案
- 将
File列表转换为MultipartFile列表,Dio会自动处理文件二进制上传; - 给
documents参数指定明确泛型List<File>,消除类型歧义; - 确保所有传入的字符串/数字参数不为null(后端允许空值则忽略)。
修正后的代码:
@override Future createVisaFirstStep( String departureDate, String returnDate, int visaType, int destinationCountryId, int entryCountry, List<File> documents) async { List<MultipartFile> files = []; for (File file in documents) { // 用MultipartFile.fromFile包装文件,可自定义文件名 files.add(await MultipartFile.fromFile( file.path, filename: file.path.split('/').last, )); } final formData = FormData.fromMap({ 'DepartureDate': departureDate, 'ReturnDate': returnDate, 'VisaType': visaType, 'DestinationCountryId': destinationCountryId, 'EntryCountry': entryCountry, 'Documents': files, }); Response response = await refDio.post( EndPoints.visaFirstStep, data: formData, ); if (response.statusCode != null && response.statusCode! >= 200 && response.statusCode! <= 299) { return response.data['data']; } else { return Future.error('Error ${response.statusCode}'); } }
额外说明
如果需要读取文件二进制后再上传,也可使用MultipartFile.fromBytes:
files.add(MultipartFile.fromBytes( await file.readAsBytes(), filename: 'custom_image.jpg', ));
若后端要求Documents为单个文件而非列表,直接传单个MultipartFile即可,无需包装成列表。
内容的提问来源于stack exchange,提问作者Bear
相关产品推荐
相关产品推荐

