#json #flutter #api #http #flutter-dependencies
#json #трепетать #API #http #флаттер-зависимости
Вопрос:
я пытаюсь отправить вложенные данные в API, используя метод HTTP post. но я не могу отправить данные из-за ошибки сопоставления. ниже приведен мой класс модели, который я создал для получения данных из API-
class Assessment { Assessment({ this.id, this.subId, this.question, this.assessment, }); String id; String subId; String question; Listlt;Assessmentgt; assessment; factory AssessmentQuestionList.fromJson(Maplt;String, dynamicgt; json) =gt; AssessmentQuestionList( id: json["id"], subCategoryId: json["subId"], question: json["question"], assessment: Listlt;Assessmentgt;.from( json["assessment"] .map((x) =gt; Assessment.fromJson(x))), ); Maplt;String, dynamicgt; toJson() =gt; { "id": id, "assessmentId": assessmentId, "subCategoryId": subCategoryId, "question": question, "assessment": Listlt;dynamicgt;.from(assessment.map((x) =gt; x.toJson())), }; } class Assessment { Assessment({ this.id, this.assessmentQuestionId, this.option, this.isChecked, }); String id; String assessmentQuestionId; dynamic option; bool isChecked; factory AssessmentAnswerList.fromJson(Maplt;String, dynamicgt; json) =gt; AssessmentAnswerList( id: json["id"], assessmentQuestionId: json["assessmentQuestionId"], option: json["option"], //optionValues.map[json["option"]], isChecked: json["isChecked"], ); Maplt;String, dynamicgt; toJson() =gt; { "id": id, "assessmentQuestionId": assessmentQuestionId, "option": option, //optionValues.reverse[option], "isChecked": isChecked, }; }
после составления списка и динамического добавления данных в него я отправляю данные в свой будущий метод, который будет использоваться для вызовов api, как показано ниже —
Futurelt;http.Responsegt; saveassess(String authToken, String id, String assessmentId, var QuestionList, String childUserId, String notes) async { String uriparts =apiEndPoint.getUriParts('assess/Assess'); Uri Url = apiEndPoint.getHTTPUri(uriparts); final response = await http.post( Url, headers: lt;String, Stringgt;{ 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': authToken }, body: jsonEncode(lt;String, dynamicgt;{ "id": id, "assessmentId": assessmentId, "assessmentQuestionAnswerList": QuestionList, "childUserId": childUserId, "notes": notes, }), ); print(response.body); handleAssesmentsResponse(response); }
может ли кто-нибудь сказать мне, что я делаю неправильно, так как я впервые работаю с вложенными вызовами API? Спасибо
Ответ №1:
вы также должны закодировать каждый отдельный список, как показано ниже,
jsonEncode(lt;String, dynamicgt;{ "id": id, "assessmentId": assessmentId, "assessmentQuestionAnswerList": jsonEncode(QuestionList), "assessmentQuestionAnswerList.assessmentAnswerList": jsonEncode(AnswerList), "childUserId": childUserId, "notes": notes, }),
Комментарии:
1. я сделал это, но я получаю ошибку — I/flutter ( 2723): не удалось подробно Преобразовать объект в кодируемый объект не удалось: LinkedHashSet len:8
2. возможно, вам потребуется указать тип данных для кодирования списка вопросов, поскольку это не тип данных, который не предопределен в dart