這個問題在這里已經有了答案: 什么是 Future 以及如何使用它? (5 個回答) 昨天關門。
我想從 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
}
}
在這種情況下,我會出現延遲初始化錯誤。一般來說,我想聽聽有關使用帶有解釋的未來物件的簡短建議。謝謝
uj5u.com熱心網友回復:
通常在方法中使用Future's時build,我們使用FutureBuilder.
這是 Google 團隊關于如何使用它的視頻。
在您的示例中:
在_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();
}
},
),
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497692.html
