http Dart包示例已过时,如何使用client.get

问题描述

这是http软件包给出的第二个示例:https://pub.dev/packages/http

var client = http.Client();
try {
  var uriResponse = await client.post('https://example.com/whatsit/create',body: {'name': 'doodle','color': 'blue'});
  print(await client.get(uriResponse.bodyFields['uri']));
} finally {
  client.close();
}

我收到错误消息:uriResponse.bodyFields['uri'] no such method.

我可以看到在类Response:https://pub.dev/documentation/http/latest/http/Response-class.html

中没有名为bodyFields的属性

那我应该如何使用client.get()

我在文档中检查了功能https://pub.dev/documentation/http/latest/http/get.html,并写了这样的文字

print(await client.get(uriResponse.request.url,{
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.121 Safari/537.36',}));

但这也会失败,并显示错误

Class 'IOClient' has no instance method 'get' with matching arguments.
E/Flutter (19613): Receiver: Instance of 'IOClient'
E/Flutter (19613): Tried calling: get(Instance of '_SimpleUri',Instance of '_CompactLinkedHashSet<Map<String,String>>')
E/Flutter (19613): Found: get(dynamic,{Map<String,String> headers}) => Future<Response>

解决方法

按如下所示编写post,然后分别打印响应。

final response = await client.post(
    '*endPoint url*',headers: *headers if you have any*,body: jsonEncode({'name': 'doodle','color': 'blue'}
    ));

print(json.decode((response.body)));

,并且对get方法也采用相同的结构。

,
filter: brightness(0.5);