将对象转换为可编码对象失败:上传文件时出现“FormData”错误实例

时间:2021-04-09 12:58:17

标签: flutter

我尝试将图片上传到服务器,但出现错误 Converting object to an encodable object failed: Instance of 'FormData'

我的发帖方式

 void _upload(File file) async {
        String fileName = file.path.split('/').last;
    
        FormData data = FormData.fromMap({
          "file": await MultipartFile.fromFile(
            file.path,
            filename: fileName,
          ),
        });
    
        Dio dio = new Dio();
        await dio.post(apiEndpoint + "users/avatar",
            options: Options(headers: {
              "Authorization":
                  apiToken
            }),
            data: {
              "image": data,
            });
      }

我应该对代码进行哪些更改?

1 个答案:

答案 0 :(得分:0)

您不能只是将任意类实例转换为 JSON。

一种选择是为 JsonEncoder() 构造函数提供自定义函数(通过 toEncodable 参数)。这个自定义函数应该将您的自定义对象映射到 JsonEncoder 已经知道如何处理的类型(即数字、字符串、布尔值、null、列表和带有字符串键的映射)。

https://api.dartlang.org/stable/1.24.3/dart-convert/JsonEncoder-class.html

https://pub.dartlang.org/packages/json_serializable 是一个为此生成代码的包,因此您无需手动编写。

另见https://flutter.io/json/