我如何在 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/awaitthen 一起使用。在您的情况下,最简单的做法是等待请求的响应,然后将其放入局部变量。

那么你只需要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,