我如何在 Flutter 中使用 Futures 中的 Futures?
How do I use Futures in Futures in Flutter?
Soo,标题可能有点混乱,但让我现在澄清一下。
我有一个名为 UserController 的 class,它有一个名为 updateUserData 的方法。它获取 Map 并使用地图值中给定的任何内容更新用户的给定属性。
我想做的是:向服务器发送补丁请求,等待服务器 return 更改的用户 object,将其写入某个局部变量并 return 调用该方法的人的值或错误(在我的例子中是 GUI class)。
当前的方法是:
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 什么(它给了我一个 return_of_invalid_type_from_closure 错误)。
我希望很清楚我的目标是什么。我想在此方法中使用“then”子句,但仍然 return 未来,其中包含我从服务器获得的用户或我得到的错误。
我该怎么做?到目前为止,我查阅了很多 Future 教程,none 使用了类似的东西。
您永远不需要将 async/await
与 then
一起使用。在您的情况下,最简单的做法是等待请求的响应,然后将其放入局部变量。
那么你只需要return这个值。
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;
}
如果您需要将地图解码为 Class,
Soo,标题可能有点混乱,但让我现在澄清一下。
我有一个名为 UserController 的 class,它有一个名为 updateUserData 的方法。它获取 Map
我想做的是:向服务器发送补丁请求,等待服务器 return 更改的用户 object,将其写入某个局部变量并 return 调用该方法的人的值或错误(在我的例子中是 GUI class)。
当前的方法是:
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 什么(它给了我一个 return_of_invalid_type_from_closure 错误)。 我希望很清楚我的目标是什么。我想在此方法中使用“then”子句,但仍然 return 未来,其中包含我从服务器获得的用户或我得到的错误。
我该怎么做?到目前为止,我查阅了很多 Future 教程,none 使用了类似的东西。
您永远不需要将 async/await
与 then
一起使用。在您的情况下,最简单的做法是等待请求的响应,然后将其放入局部变量。
那么你只需要return这个值。
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;
}
如果您需要将地图解码为 Class,