如何修复Flutter中swagger_dart_code_generator生成List<int>而非MultipartFile的问题
Flutter swagger_dart_code_generator生成multipart/form-data上传代码错误问题
在Flutter项目中,使用swagger_dart_code_generator从Swagger 2.0 JSON文件生成基于Chopper的API客户端代码时,针对multipart/form-data文件上传端点,生成的代码错误地将文件参数定义为List<int>?而非MultipartFile,这完全不适合处理文件上传场景,在Flutter Web上问题尤为突出——Web环境下dart:io不可用,使用cross_file包的XFile时会直接破坏multipart/form-data请求。
问题根源在于Swagger 2.0 JSON中使用了consumes: ["multipart/form-data"]和formData参数,但swagger_dart_code_generator对其产生了误解析,从而生成了List<int>类型的参数,导致同时面向Web和移动端的Flutter应用在文件上传时出现错误。
生成的错误代码
lib/gen/swagger/rest_api.swagger.dart:
/// uploadBannerForNotice /// @param file file /// @param id id Future<chopper.Response<String>> restNoticeBannerIdPost({ required List<int>? file, required String? id, }) { return _restNoticeBannerIdPost(file: file, id: id); } /// uploadBannerForNotice /// @param file file /// @param id id @Post( path: '/rest/notice/banner/{id}', optionalBody: true, ) Future<chopper.Response<String>> _restNoticeBannerIdPost({ @Field('file') required List<int>? file, @Path('id') required String? id, });
lib/gen/swagger/rest_api.swagger.chopper.dart:
@override Future<Response<String>> _restNoticeBannerIdPost({ required List<int>? file, required String? id, }) { final Uri $url = Uri.parse('/rest/notice/banner/${id}'); final $body = <String, dynamic>{'file': file}; final Request $request = Request( 'POST', $url, client.baseUrl, body: $body, ); return client.send<String, String>($request); }
已尝试的方法
- 使用swagger_dart_code_generator从Swagger 2.0 JSON生成API客户端代码,期望为multipart/form-data端点生成
MultipartFile类型参数以支持XFile文件上传 - 发现生成代码使用
List<int>?作为文件参数,无法处理文件上传,尤其在Flutter Web环境下 - 尝试在业务代码中手动将XFile转换为
List<int>,但此方式对multipart/form-data请求无效 - 怀疑Swagger 2.0 JSON存在兼容性问题,编写脚本将其转换为OpenAPI 3.0并更新构建流程
预期结果
- 生成的代码应为文件参数使用
MultipartFile类型,以支持正确的multipart/form-data上传 - API客户端应能在Web和移动端无缝处理文件上传
- 构建流程无需手动调整即可生成正确代码
预期代码
Future<chopper.Response<String>> restNoticeBannerIdPost({ required MultipartFile? file, required String? id, });
内容的提问来源于stack exchange,提问作者vikas poute
相关产品推荐
相关产品推荐

