Flutter Web使用Dio上传文件遇类型转换错误求助
解决方案
问题出在Flutter Web环境下,file_picker返回的文件字节是JSArray<int>(属于List<int>的子类),但Dio的MultipartFile.fromBytes要求传入Uint8List类型,直接传递会触发类型不匹配错误。
解决方法很简单,显式把List<int>转换成Uint8List即可,用Uint8List.fromList()方法完成转换:
修改你的代码中MultipartFile.fromBytes的参数部分:
final body = <String, dynamic>{}; if (fields != null) { body.addAll(fields); } body.addAll({ "files": files .map((file) => MultipartFile.fromBytes( // 显式转换为Uint8List Uint8List.fromList(file.bytes), filename: file.fileName, )) .toList() }); final formData = FormData.fromMap(body); Response<Map<String, dynamic>> response = await dio.postUri<Map<String, dynamic>>(url, data: formData, options: options);
原理是Uint8List.fromList()会把任意List<int>转换成符合要求的无符号8位整数列表,完美适配Dio在Web环境下的文件上传需求。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

