我正在尝试弄清楚如何使用 future 来通过互联网获取数据。我试图编写一个简单的代码,将 Future 转换为“平均”数据,但它不起作用,我不明白为什么会这样。
这是我的代码
class Fetch {
Data getData () {
Data data;
data = fetch().then((value) {data = value;}); //here's I'm getting error
}
Future<Data> fetch() async {
int number = await Future.delayed(Duration(seconds: 1), () => 3);
return(Data.fromIt(number));
}
}
class Data{
int date;
Data({this.date});
factory Data.fromIt(int num) {
return Data(
date: num,
);
}
}
在我更正这部分代码后,错误消失了,但现在 getData()
返回 null 而不是值:
Data getData () {
Data data;
fetch().then((value) {data = value;});
return data; //null
}
谢谢
答案 0 :(得分:0)
您可以将 getData
设为异步函数,并使用 await
关键字。如果您不熟悉异步编程并且 Futures
Future<Data> getData () async {
final data = await fetch();
// Whatever you want to do with data
return data; // Dont forget to return it back to the caller
}
答案 1 :(得分:0)
data
被定义为 Data
对象,而 fetch()
返回 Future<Data>
,导致错误。
Data data;
data = fetch().then((value) {
data = value;
});
您不能在不等待的情况下将 Future
对象转换为同步对象。您可以在 UI 中执行此操作以获取 Future
值:
FutureBuilder<Data>(
future: Fetch().fetch(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Container();
Data data = snapshot.data;
return Text(data);
},
)