Flutter Retrofit报错:Null不是String子类型,如何解决?能否同File传Null?
问题解决方案
一、解决‘null is not subtype of type 'string'’错误
这个错误的核心是你声明的字段为非空String类型,但实际传入了null,Dart的类型系统不允许这种赋值。解决方法有三种:
- 将字段类型改为可空字符串类型:
String?,这样该字段既可以接收String值,也能接收null。 - 直接使用
dynamic类型作为字段类型:不过后续使用该字段时,建议先做类型判断(比如if (field is String)),避免其他类型错误。 - 给字段设置默认空字符串:如果业务上不允许传
null,可以在定义时给字段赋值默认值'',避免null传入。
二、发送File时传递null数据
完全可以,只要后端接口对应的参数允许接收null值即可。以Dart中常用的dio包上传FormData为例,直接在Map中传入null字段即可:
var formData = FormData.fromMap({ 'upload_file': await MultipartFile.fromFile('/path/to/file'), 'nullable_param': null, // 这里直接传递null }); await dio.post('/upload', data: formData);
如果使用原生http包,同样可以在请求体(或FormData)中包含null值的字段,只要后端能正确解析即可。
内容的提问来源于stack exchange,提问作者datasturucedboy
相关产品推荐
相关产品推荐

