Flutter中如何将File类型图片设为可选参数避免空值报错
问题解决:Dio提交FormData时未选图片的空值报错
问题出在构建FormData的代码里——不管photoImg是否为null,你都用photoImg!强制解包获取路径,这直接导致未选图片时触发空指针异常。
修改后的提交接口代码
Future postUpdateDataAdmin( String id, String fullName, String telp, String email, String address, File? photoImg, ) async { // 初始化FormData基础字段 Map<String, dynamic> formDataMap = { 'full_name': fullName, 'telp': telp, 'email': email, 'address': address, }; // 仅当photoImg不为null时,添加图片字段 if (photoImg != null) { String fileName = photoImg.path.split('/').last; formDataMap['photo'] = await MultipartFile.fromFile( photoImg.path, filename: fileName, contentType: MediaType('image', 'png'), ); } FormData data = FormData.fromMap(formDataMap); try { var response = await Dio().post( "${Api.baseUrl}/user/admin/updateData/$id", options: Options( followRedirects: false, validateStatus: (status) => true, ), data: data, ); if (response.data["status"] == true) { print('test posttt asdasd as ${response.data['status']}'); return response.data['data']; } else { throw Exception("Tidak Dapat Mengambil Data"); } } catch (error) { print('kenapa ?$error'); } }
改动说明
- 先创建基础的表单字段Map,避免直接操作可能为null的图片变量
- 通过
if (photoImg != null)判断,仅在用户选择图片时才生成MultipartFile并添加到表单中 - 移除了原代码中
photoImg!.path的强制解包操作,彻底规避空指针风险
其他代码无需修改
你的图片选择逻辑和按钮调用逻辑是正常的,只要确保未选图片时controller.fileImage为null即可。
内容的提问来源于stack exchange,提问作者Ahmad Miqdad
相关产品推荐
相关产品推荐

