如何在Flutter的期货中使用期货?

如何在Flutter的期货中使用期货?,flutter,asynchronous,dart,future,Flutter,Asynchronous,Dart,Future,苏,标题可能有点混乱,但现在让我澄清一下。 我有一个名为UserController的类,它有一个名为updateUserData的方法。它获取一个映射,并使用映射值中给定的任何内容更新用户的给定属性 我想做的是:向服务器发送一个补丁请求,等待服务器返回一个已更改的用户对象,将其写入某个局部变量,然后将值或错误返回给调用该方法的人(在我的例子中,该方法是一个GUI类) 当前的方法是: Future<User> updateUserData(Map<String, dynamic

苏,标题可能有点混乱,但现在让我澄清一下。 我有一个名为UserController的类,它有一个名为updateUserData的方法。它获取一个映射,并使用映射值中给定的任何内容更新用户的给定属性

我想做的是:向服务器发送一个补丁请求,等待服务器返回一个已更改的用户对象,将其写入某个局部变量,然后将值或错误返回给调用该方法的人(在我的例子中,该方法是一个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.
}
Future updateUserData(映射更改)异步{
返回等待http.patch(
“网址”,
标头:{HttpHeaders.authorizationHeader:“令牌”},
正文:changesMap
).然后((newUserObject)=>{
currentUser=newUserObject;
//返回要显示的新用户对象
});//来自服务器的错误被转发到GUI。
}
遗憾的是,这根本不起作用。看起来颤振/飞镖不知道返回什么(它给了我一个返回,返回类型为无效,来自闭合错误)。 我希望我的目标是明确的。我想在这个方法中使用一个“then”子句,但仍然返回一个future,其中包含我从服务器获得的用户或我得到的错误


我该怎么做?到目前为止,我查阅了很多以后的教程,没有一本使用了类似的东西。

您永远不需要将
async/wait
then
一起使用。在您的情况下,最简单的方法是等待请求的响应,然后将其放入局部变量

然后您只需要返回值

Future updateUserData(映射更改)异步{
最终响应=等待http.patch(
“网址”,
标头:{HttpHeaders.authorizationHeader:“令牌”},
正文:changesMap,
);
//您需要解析响应以获取用户对象。
final responseJson=json.decode(response.body);
newUserObject=User.fromJson(responseJson);
currentUser=newUserObject;
返回newUserObject;
}

如果您需要将映射解码为类,

我大体上理解这些更改,但现在我遇到了与我找到的文档相同的问题。我不知道返回类型是如何计算的。因为我的方法清楚地说明它将返回一个Future对象,但是newUserObject的类型是User,而不是Future。@Panossa在这里您可以获得处理第一个问题的这些错误的详细方法,您的方法返回Future,因为它是异步的。所以,每次你打电话,你都需要等待回复。另外,我想向你推荐Dio套餐。。它有一些很酷的特点。。看看错误处理部分:谢谢,这对我帮助很大!所有这些D(尽管我必须说我不喜欢Dio中的语法,所以我可能不会使用它)