未处理的异常:"XFile"的实例失败



#这是我调用api 的类

static Future<void> postHomework(String classId,String sectionId,String homeWorkTitle,String link,String homeworkDetail, List<XFile> homeworkImage,String submissionDate,BuildContext context) async{
String userData;
String token;
SharedPreferences prefs = await SharedPreferences.getInstance();
userData = prefs.getString("userData");
if(userData!=null){
token = json.decode(userData)['token'];
}else{
return;
}
const url = "my api goes here";

Map<String,dynamic> jsonData = {
"classid":classId,
"sectionid":sectionId,
"title":homeWorkTitle,
"content":homeworkDetail,
"submission_date":submissionDate,
"filename":homeworkImage,
"link":link
};
print(homeworkImage);
try{
EasyLoading.show(status: "posting homework");
final jsonString = json.encode(jsonData);
final response = await http.post(Uri.parse(url),body: jsonString,headers: {'Content-Type': 'multipart/form-data','Authorization': 'Bearer $token',},);
final responseData = json.decode(response.body);
if(response.statusCode==200){
print(responseData);
Navigator.of(context).pushNamed("Homework-section-subject-list");
EasyLoading.dismiss();
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Padding(
padding: EdgeInsets.only(right: 100.w),
child: Text(
'Homework posted successfully',
maxLines: 2,
style: TextStyle(fontSize: 14.sp),),
),
duration: const Duration(seconds: 2),
backgroundColor: Colors.grey.shade700,
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.r)
),
));
}
}catch(e){
rethrow;
}
}

#通过这种方式,我从图库中提取图像,并将其存储在List-imageFileList=[]中;

final ImagePicker imagePicker = ImagePicker();
List<XFile> imageFileList = [];
void selectImages() async {
final XFile selectedImages = await imagePicker.pickImage(source: ImageSource.gallery);
if (selectedImages.path.isNotEmpty) {
imageFileList.add(selectedImages);
}
print("Image List Length:" + imageFileList.length.toString());
setState((){});
}

#这是我的作业后控制器

class HomeworkPostController extends GetxController{
var isLoading = true.obs;
Future<void> postHomework(String classId,String sectionId,String homeWorkTitle,String link,String homeworkDetail, List<XFile> homeworkImage,String submissionDate,BuildContext context) async{
try{
isLoading(true);
EasyLoading.show(status: "posting homework");
return await Services.postHomework(classId, sectionId, homeWorkTitle, link, homeworkDetail, homeworkImage, submissionDate, context);
}finally{
isLoading(false);
EasyLoading.dismiss();
}
}
}

#我在botton press 上传递数据

onPressed: (){
if(_form.currentState.validate()) {
hP.postHomework(
classId,
sectionId,
titleController.text,
linkController.text,
detailController.text,
imageFileList,
submissionDateController.text,
context);
}
}

一切都很好所有数据都通过了接受图像部分需要帮助我在说E/flutter(7064(:[错误:flutter/lib/ui_dart_state.cc(209(]未处理的异常:将对象转换为可编码对象失败:"XFile"的实例

无法通过json.encodeimage转换为json。您在jsonData中传递了List<XFile> homeworkImage"filename"。它不起作用。

最新更新