繁体   English   中英

未处理的异常:将 object 转换为可编码的 object 失败:“XFile”实例

[英]Unhandled Exception: Converting object to an encodable object failed: Instance of 'XFile'

#这是我的 class 我叫 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((){});
  }

#这是我的帖子作业 controller

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();
    }
  }
}

#i 通过按键传递数据

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

一切都很好所有数据正在传递接受图像部分需要帮助我收到错误说 E/flutter (7064): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] 未处理的异常:将 object 转换为可编码 object 失败:“XFile”实例

您无法通过json.encodeimage转换为json 您将List<XFile> homeworkImage传递给jsonData中的"filename" 它不工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM