如何解决使用流的Flutter API请求-太多元素
有些棘手。 :slight_smile:我们选择不使用std::ostringstream buf;
for(auto const &v : bd)
buf << " " << v;
library,而是直接使用http
class,因为它使我们对客户端和标头等有了更多控制。 {1}}仍然包装该类。该类返回流。
使用
HttpClient
在我们的服务中调用的用于从后端api获取数据的函数(名称有些不同):
http package
底层私有API请求功能:
Flutter 1.20.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 216dee60c0 (6 days ago) • 2020-09-01 12:24:47 -0700
Engine • revision d1bc06f032
Tools • Dart 2.9.2
在大多数情况下,使用这种方法效果很好,但是现在我们最近遇到了很多 static Future<String> APIRequest(
{@required String relativeURL,@required String method,@required EnvironmentConfig config,dynamic data,HttpClient httpClient,Map<String,String> queryParameters}) async {
final stream = await _APIRequest(
method: method,relativeURL: relativeURL,httpClient: httpClient,data: data,queryParameters: queryParameters,config: config);
return stream.singleWhere((obj) => obj != null,orElse: () => '');
}
,这是否与流或类似内容有关?
这是堆栈跟踪:
static Future<Stream<String>> _APIRequest(
{@required String method,@required String relativeURL,String> queryParameters,String token}) async {
final client = httpClient == null ? HttpClient() : httpClient;
final url =
UriService.getUri(config,relativeURL,queryParameters);
final request = await client.openUrl(method,url);
// Add headers
request.headers.add(
"X-MOBILE-APP",'test'); // The value is ignore by the backend
if (token != null) {
request.headers.add(HttpHeaders.authorizationHeader,'Token $token');
}
if (data != null) {
final encodedData = json.encode(data,toEncodable: _toEncodable);
request.headers.contentType = ContentType.json;
request.headers.contentLength = utf8.encode(encodedData).length;
request.write(encodedData);
}
final response = await request.close();
await _rejectIfBadStatusCode(response);
return utf8.decoder.bind(response);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。