gpt4 book ai didi

flutter - 如何在Flutter的 future 中使用 future ?

转载 作者:行者123 更新时间:2023-12-03 04:44:27 28 4
gpt4 key购买 nike

如此,标题可能有点令人困惑,但现在让我澄清一下。
我有一个名为UserController的类,该类具有一个名为updateUserData的方法。它获取Map 并使用 map 值中给出的内容更新用户的给定属性。
我想要做的是:向服务器发送补丁请求,等待服务器返回已更改的用户对象,将其写入局部变量,然后将值或错误返回给调用该方法的人(在我的情况下是这样)是一个GUI类)。
当前的方法是:

Future<User> updateUserData(Map<String, dynamic> changes) async {
return await http.patch(
"url",
headers: {HttpHeaders.authorizationHeader: "token"},
body: changesMap
).then((newUserObject) => {
currentUser = newUserObject;
//return new user object for display

}); //error from server gets forwarded to GUI.
}
不幸的是,这根本不起作用。似乎Flutter / dart不知道该返回什么(它给了我return_of_invalid_type_from_closure错误)。
我希望我的目标很明确。我想在此方法中使用“then”子句,但仍返回一个future,其中包含从服务器获取的用户或出现的错误。
我怎么做?到目前为止,我查找了很多Future教程,但没有一个使用类似的东西。

最佳答案

您无需将async/awaitthen一起使用。对于您而言,最简单的方法是等待请求的响应,然后将其放入本地变量。
然后,您只需要返回值。

Future<User> updateUserData(Map<String, dynamic> changes) async {
final response = await http.patch(
"url",
headers: {HttpHeaders.authorizationHeader: "token"},
body: changesMap,
);

// You need to parse the response to get your User object.
final responseJson = json.decode(response.body);
newUserObject = User.fromJson(responseJson);
currentUser = newUserObject;

return newUserObject;
}
如果您需要将Map解码为Class,则 you can see the answer given here

关于flutter - 如何在Flutter的 future 中使用 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62539148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com