窗口小部件没有更新

时间:2019-11-06 14:59:15

标签: flutter dart

我有一个名为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()调用来更新小部件?

2 个答案:

答案 0 :(得分:2)

getDataasync,因此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刷新小部件。