Patrick Obafemi
Patrick Obafemi

Reputation: 1066

How To deal with Response after post request dart httpClient

So I was having issues with flutter http package when it came to making a post request so I used dart HttpClient. I made a post request according to what was described somewhere but I am having issues getting response. Here is my code

 Future<HttpClientResponse> submit() async {
 print('start');
  Map<String, dynamic> data = { 'title' : 'My first post' };
  String jsonString = json.encode(data); // encode map to json
  String paramName = 'param'; // give the post param a name
  String formBody = paramName + '=' + Uri.encodeQueryComponent(jsonString);
  List<int> bodyBytes = utf8.encode(formBody); // utf8 encode
  HttpClientRequest request =
      await HttpClient().postUrl(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
  // it's polite to send the body length to the server
  request.headers.set('Content-Length', bodyBytes.length.toString());
  request.headers.set('Content-Type', 'application/json');
  request.add(bodyBytes);
  print('done');
  return await (request.close());
}

How do I get the response from this request?

Upvotes: 0

Views: 1948

Answers (2)

Ravinder Kumar
Ravinder Kumar

Reputation: 8010

I have found this from the docs

new HttpClient().get('localhost', 80, '/file.txt')
     .then((HttpClientRequest request) => request.close())
     .then((HttpClientResponse response) {
       response.transform(utf8.decoder).listen((contents) {
         // handle data
       });
     });

Or Use http library I have create a common method which can handle all get Request,

  Future<String> getRequest([var endpoints, var queryParameters]) async {
    var uri = Uri.https(NetworkUrl.BASE_URL_1, endpoints, queryParameters);
    uri.replace(queryParameters: queryParameters);
    var response =
        await http.get(Uri.encodeFull(uri.toString()));
//Retrun reponse here 
    if (response.statusCode == 200) return response.body;
  }

To get a response from the above method,

  Future<String> deletePostApi() async {
    await NetworkRepository()
        .getRequest(NetworkUrl.deletePost + '${widget.mFeedData.post_id}')
        .then((value) {// <=value is json respone
      var dataConvertedToJSON = json.decode(value);
      print("checkEmailResp" + dataConvertedToJSON.toString());
    });
  }

Upvotes: 1

Adelina
Adelina

Reputation: 11931

      HttpClientResponse response = await request.close();
      response.transform(utf8.decoder).listen((contents) {
        print(data); // <- response content is here
      });

This will return HttpCLientResponse, more info https://api.dartlang.org/stable/2.6.1/dart-io/HttpClient-class.html

Upvotes: 1

Related Questions