我有一个名为getData的有状态小部件的方法
void getData() async{
var bitCoinPrice1 = (await coinData.getPriceData('BTC$selectedCurrency')).toStringAsFixed(2);
bitCoinPrice = bitCoinPrice1;
}
我在下拉更改事件中调用此方法
onChanged: (String newValue) {
setState(
() {
selectedCurrency = newValue;
print("Selected currency changed to $selectedCurrency");
getData();
},
);
}
除非我将内容包含在另一个setState()中的getData中,否则bitcoinPrice的值不会反映在小部件中。我的问题是:如果对getData()的调用已经在setState()内,那么为什么需要在getData()内进行另一个setState()调用来更新小部件?
答案 0 :(得分:2)
getData
为async
,因此setState
的主体执行立即终止,在传递async
结果之前更新状态。
由于setState
不允许async
主体,因此您必须做不同的事情。
鉴于您提供的代码,您可以执行以下操作:
onChanged: (String newValue) {
selectedCurrency = newValue;
print("Selected currency changed to $selectedCurrency");
getData();
}
并像这样更新getData
代码:
void getData() async{
var bitCoinPrice1 = (await coinData.getPriceData('BTC$selectedCurrency')).toStringAsFixed(2);
setState({
bitCoinPrice = bitCoinPrice1;
});
}
这样,在完成setState
版操作之后将调用await
。
答案 1 :(得分:0)
是的,您需要在getData()函数内使用另一个setState(),因为完成getPriceData函数(异步方法)可能需要更多时间。
之后bitCoinPrice = bitCoinPrice1;
您需要调用setState刷新小部件。