在Flutter中的实例'Future'

15 浏览
0 Comments

在Flutter中的实例'Future'

我从Flutter中的HTTP请求中的服务器获取一个整数Id,一切都正常,我想将这个值保存在一个变量中,但是当我调用返回的值时,我得到了一个"Instance of 'Future'"的错误,有什么建议吗?

以下是代码:

child: RaisedButton(onPressed:() {

CurrentPrjId = SaveProject();

print("当前的CurrentPrjId已保存为:");

print(CurrentPrjId);

Navigator.of(context).pushReplacementNamed('/AllUSerStories');

}

//保存项目

Future SaveProject() async {

//SaveProjectResult保存了当前创建项目的id,我需要用它来获取项目的用户故事

var SaveProjectResult = await GetPostProjects().createProject(_ProjectnameController.text, _CustomernameController.text, _dropNewItem, _dropNewItem2, _StartDateController.text, _EndDateController.text);

print(":::::::::::::::::::::::::::::::项目已创建,这是SaveProject中的ID:::::::::");

print(SaveProjectResult);

return SaveProjectResult;

}

0
0 Comments

问题原因:

在Flutter中,当我们使用异步调用时,可能会遇到'Instance of 'Future'的问题。这是因为我们直接使用了Future对象,而没有使用FutureBuilder来获取异步调用的结果。

解决方法:

要解决这个问题,我们需要使用FutureBuilder小部件来获取异步调用的结果。FutureBuilder小部件接受一个Future对象,并根据异步调用的不同状态来构建不同的小部件。

下面是解决问题的代码示例:

CurrentPrjId = FutureBuilder(

future: SaveProject(),

builder: (context, snapshot) {

if (snapshot.hasData) return Text(snapshot.data);

else if (snapshot.hasError) return Text(snapshot.error);

return Text("Await for data");

},

);

在上面的代码中,我们使用FutureBuilder小部件来获取SaveProject()异步调用的结果。在builder属性中,我们根据不同的异步调用状态来构建不同的小部件。

如果异步调用已经完成并且返回数据,我们将显示数据的文本。如果异步调用发生错误,我们将显示错误的文本。如果异步调用还没有完成,我们将显示"Await for data"文本。

通过使用FutureBuilder小部件,我们可以正确地获取异步调用的结果,并避免出现'Instance of 'Future'的问题。

0
0 Comments

问题原因:在代码中使用了异步操作await的位置不正确。

解决方法:将await关键字放置在正确的位置,确保其后的方法调用返回的是一个Future对象。

0
0 Comments

问题的出现原因:

根据给出的信息很难确定具体发生了什么,但你可以尝试等待未来的完成。可以通过以下方式解决该问题:

methOdThatLoadsId().then((id) => print("Id that was loaded: $id"));

或者

var id = await methodThatLoadsId();

祝好运 🙂

我使用了你的第一种解决方案,但仍然遇到了相同的问题:Instance of 'Future'。

我们如何在initState函数中使用await?谢谢。

据我所知,在initState函数中根本不可能这样做。然而,有几种方法可以在initState中处理异步任务。查看stackoverflow.com/a/51901192/11266880获取一种解决方案。

0