Flutter:从for循环向API成功响应API后,逐个发送数据



我有一个for循环,它从列表中返回数据。

for (ClientModel data in clientData) {

并且如果数据具有密钥,则它必须作为主体进入API(POST请求(请求。所以我检查的密钥

if (clientData.contains(data.key)) {

然后发送到像这样的提供者类内的函数

await Provider.of<ClientProvider>(context, listen: false)
.sendClients(context, client);

我的问题是,在这段代码中,所有API请求都在一次调用(到循环运行时,这是一个非常小的时间(。

我想调整此代码以等待第一个API请求完成,然后只运行下一个行中的API请求。

我怎样才能做到这一点?

编辑:

sendClientData(context, ClientNewModel data) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final authToken = prefs.getString('accessToken');
int id;
String editUrl = "";
if (data.id != null) {
// print(data.id);
id = data.id;
editUrl = "/$id/edit";
}
try {
print("Time stamp ${DateTime.now()}");
final response = await http.post(
Uri.https(BASE_URL, GET_CLIENTS + editUrl, {'q': '{http}'}),
headers: {
HttpHeaders.contentTypeHeader: "application/json",
HttpHeaders.acceptHeader:"application/json",
HttpHeaders.authorizationHeader: "$authToken"
},
body: json.encode(data.toJson()),
);
print(response.body);
debugPrint(response.statusCode.toString());
log(json.encode(data.toJson()));
if (response.statusCode == 201 || response.statusCode == 200) {
return true;
} else if (response.statusCode == 403 ||
response.statusCode == 404 ||
response.statusCode == 401 || response.statusCode == 402 || response.statusCode == 422) {
Toast.show("Sync failed n ${response.body}", context,backgroundColor: Colors.red, textColor: Colors.white,duration: 3);
} else if (response.statusCode == 500) {
Toast.show("Server error", context,
backgroundColor: Colors.red, textColor: Colors.white);
} else {
logLongString(data.toJson().toString());
Toast.show("Server error", context,
backgroundColor: Colors.red, textColor: Colors.white);
}
} catch (e) {
print(e);
Toast.show("Server error", context,
backgroundColor: Colors.red, textColor: Colors.white);
}
return false;
}

regular(for in(不会等待请求完成,因此您可以

await Future.forEach(clientData, (ClientModel data) async {
await Provider.of<ClientProvider>(context, listen: false).sendClients(context, client);
});

你可以试试这个第一个

for (var o in objects) {
await Future.delayed(const Duration(milliseconds: 500), () {
print("data");
});
}

如果工作正常,那么问题可能来自您的sendClients方法

相关内容

  • 没有找到相关文章

最新更新