How can I return the POST response object in flutter?

Issue

I am new to flutter and am trying to get a response that is returned when I do a post request.
This is what I have tried,but instead of returning the ReservationResponse Object, it returns this message "Instance of ReservationResponse" . What could I be doing wrong and how can I correct this?

Future < dynamic > priceReservation(priceReservation) async {
  var content = jsonEncode(priceReservation.toJson());
  const baseUrl = ApiEndPoint.baseUrl;
  searchUrl = '$baseUrl/reservation/price';
  var response = await http.post(
    Uri.parse(searchUrl),
    body: content,
    headers: {
      "Content-Type": "application/json"
    },
  );
  final data = json.decode(response.body);
  ReservationResponse responseObject;
  if (response.statusCode == 200) {
    responseObject = ReservationResponse.fromJson(data);
    // print(data);
    print(responseObject); // it returns an "Instance of the ReservationResponse" object instead of the actual response
    return responseObject;
  } else
    return null;
}
// My Class looks like this
@JsonSerializable()
class ReservationResponse {
  String ? id;
  String ? email;
  int ? quantity;
  int ? nights;
  double ? totalPricePerRoomPerNight;
  TotalPrice ? totalPrice;
  Room ? room;
  DateTime ? checkInDate;
  DateTime ? checkOutDate;
  List ? taxes = [];
  List ? discounts = [];

  ReservationResponse({
    this.id,
    this.email,
    this.quantity,
    this.nights,
    this.totalPricePerRoomPerNight,
    this.totalPrice,
    this.room,
    this.checkInDate,
    this.checkOutDate,
    this.taxes,
    this.discounts,
  });
  factory ReservationResponse.fromJson(Map < String, dynamic > json) =>
    _$ReservationResponseFromJson(json);
  Map < String, dynamic > toJson() => _$ReservationResponseToJson(this);
}

Solution

You should probably use the toString() method when printing a class. Did you override the .toString() method in your custom class? If not, do this


@overide
toString(){
   return 'This is a string of my class. $someData'; //then implement what data the should be returned like this 
}

In the ReservationResponse class that you created, include the code above and input the data you want to show. Like this:

@JsonSerializable()
class ReservationResponse {
  String ? id;
  String ? email;
  int ? quantity;
  int ? nights;
  double ? totalPricePerRoomPerNight;
  TotalPrice ? totalPrice;
  Room ? room;
  DateTime ? checkInDate;
  DateTime ? checkOutDate;
  List ? taxes = [];
  List ? discounts = [];

  ReservationResponse({
    this.id,
    this.email,
    this.quantity,
    this.nights,
    this.totalPricePerRoomPerNight,
    this.totalPrice,
    this.room,
    this.checkInDate,
    this.checkOutDate,
    this.taxes,
    this.discounts,
  });
  factory ReservationResponse.fromJson(Map < String, dynamic > json) =>
    _$ReservationResponseFromJson(json);
  Map < String, dynamic > toJson() => _$ReservationResponseToJson(this);

  @override
  toString(){
    String output = 'ReservationResponse: id: ${this.id}, email: 
    ${this.email}'; //and so on for the info you want to return
    return output;
  }
}

Answered By – Intellect

Answer Checked By – Timothy Miller (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *