невозможно получить объект внутри объекта

#flutter #dart #flutter-layout

#флаттер #dart #флаттер-макет

Вопрос:

Я новичок в flutter. я пытаюсь получить ответ из api. я получаю ответ как 200, но не могу восстановить конкретный объект внутри него.

пожалуйста, посмотрите на класс модели ниже и подскажите мне, что я делаю неправильно

 class Response {
  bool success;
  List<dynamic> errors;
  List<CourseParent> courses;
  Batches coursedetail;

  Response({this.success,this.errors,this.courses,this.coursedetail});

  factory Response.fromJson(Map<String, dynamic> map) {
return Response(
    errors: map['errors'],
    success: map['success'],
  courses: map['courses'] != null
      ? map['courses'].map<CourseParent>((json) => CourseParent.fromJson(json)).toList()
      : null,
  coursedetail: map['courseDetails'] != null
      ? map['courseDetails'].map<Batches>((json) => Batches.fromJson(json))
      : null,
);
 

}

   Map<String, dynamic> toJson() {
    return {"success": success, "errors": errors,  "courses": courses, "courseDetails" : coursedetail};
  }



  @override
  String toString() {
    return 'Response{ success: $success, errors: $errors , courses: $courses, courseDetails: $coursedetail }';
  }

}

List<Response> profileFromJson(String jsonData) {
  final data = json.decode(jsonData);
  return List<Response>.from(data.map((item) => Response.fromJson(item)));
}



Response responseFromJson(String str) {
  final jsonData = json.decode(str);
  print("##-response" jsonData.toString());
  return Response.fromJson(jsonData);
}


String responseToJson(Response data) {
  final jsonData = data.toJson();
  print("##--encoding" json.encode(jsonData));
  return json.encode(jsonData);
}
 

я получаю сообщение об ошибке, как показано ниже

Ошибка NoSuchMethodError: класс ‘_InternalLinkedHashMap<String, dynamic>’ не имеет метода экземпляра ‘map’ с соответствующими аргументами.

Ниже приведен весь ожидаемый json

 {
    "success": true,
    "courseDetails": {
        "courseId": 34,
        "title": "Taxi Drivers Qualification Program",
        "code": "TX001",
        "image": "uploads\9e5dba0e-0e25-4247-a3fa-a2a404aadacd.jpg",
        "target": 0,
        "batches": [
            {
                "batchId": 41,
                "courseId": 34,
                "instructorId": 22,
                "venueId": 1,
                "startDate": "2021-01-03T00:00:00",
                "endDate": "2021-01-17T00:00:00",
                "startTime": "2021-01-03T09:17:00",
                "endTime": "2021-01-03T12:17:00",
                "capacity": 25,
                "gender": 2,
                "instructor": [
                    {
                        "instructorId": 22,
                        "civilId": "931285",
                        "forceId": "123",
                        "title": 15,
                        "fullname": "Mansoor Abdulrahim Al Rasbi",
                        "email": "steve.jobs@apple.com",
                        "mobile": "99699633",
                        "type": 1
                    }
                ],
                "venue": [
                    {
                        "venueId": 1,
                        "name": "B22",
                        "branchId": 1,
                        "branch": [
                            {
                                "branchId": 1,
                                "name": "Head Quarters - Muscat",
                                "capacityTheoretical": 175,
                                "capacityPractical": 125
                            }
                        ],
                        "bookingFees": 25
                    },
                    {
                        "venueId": 21,
                        "name": "Meetings Hall",
                        "branchId": 1,
                        "branch": [
                            {
                                "branchId": 1,
                                "name": "Head Quarters - Muscat",
                                "capacityTheoretical": 175,
                                "capacityPractical": 125
                            }
                        ],
                        "bookingFees": 20
                    },
                    {
                        "venueId": 41,
                        "name": "Store Muscat Branch",
                        "branchId": 1,
                        "branch": [
                            {
                                "branchId": 1,
                                "name": "Head Quarters - Muscat",
                                "capacityTheoretical": 175,
                                "capacityPractical": 125
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
 

Комментарии:

1. Вы пытаетесь проанализировать значение из Map класса, который не поддерживает map метод в вашей реализации ( map in List дает 1 параметр, map in Map — 2 параметра). Можете ли вы добавить courses значение из JSON?

2. пожалуйста, проверьте.. я добавил его

Ответ №1:

Вам нужно проанализировать courseDetails напрямую, это объект, а не Map или List :

 coursedetail: map['courseDetails'] != null ? Batches.fromJson(map['courseDetails']) : null;