我想从http请求中提取未来对象,以便我可以将其用作小部件中的常规对象。我怎样才能做到这一点呢?(抽象代码示例如下)
class _SomePageState extends State<SomePage> {
Data? _data;
@override
void initState() {
_loadData();
super.initState();
}
void _loadData() async {
await Service.getData().then((value) {
setState(() {
_data = value;
});
});
}
@override
Widget build(BuildContext context) {
//further use of the _data variable
}
}
在这种情况下,我将有lateInitialization Error。总的来说,我希望听到关于使用未来对象的简短建议和解释。由于
通常在build
方法中使用Future
时,我们使用FutureBuilder
。以下是谷歌团队如何使用它的视频。
在你的例子中:
_loadData()
函数中:
Future _loadData() async {
await data = Service.getData();
return data;
}
在build
方法
@override
Widget build(BuildContext context) {
return DefaultTextStyle(
style: Theme.of(context).textTheme.headline2!,
textAlign: TextAlign.center,
child: FutureBuilder<String>(
future: _loadData(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.hasData) {
return Text("data exists");
} else if (snapshot.hasError) {
return Text(snapshot.error as String);
} else {
return CircularProgressIndicator();
}
},
),
);
}