直到两次按下按钮,状态才会更新

时间:2020-07-03 05:12:32

标签: flutter dart tiingo

我正在尝试学习和使用API​​,我正在使用Tiingo Stock API来获取库存信息。我当前的应用是:

def clock_timer():
    clock = pyautogui.locateCenterOnScreen('assets/clock2.png', grayscale=True, confidence=0.5, region=(920,10, 90, 90))
    print(Style.RESET_ALL + "[" + Fore.RED + "zVal" + Style.RESET_ALL + "]" + Fore.RED + " Waiting for clock...")
    while clock == None:
        clock1 = pyautogui.locateCenterOnScreen('assets/clock2.png', grayscale=True, confidence=0.5, region=(920,10, 90, 90))
        pix = pyautogui.pixelMatchesColor(959, 83, (169, 0, 0), tolerance=61) #PART THAT DOESNT WORK
        if clock1 != None and pix == True:
            clock = "Stop loop"

因此,基本上,当您输入报价器并按Submit时,应用程序将更改“ out”字符串var以显示股票价格。但是要更新应用程序,我必须按两次提交。

有人可以帮忙吗?

P.S .:出于安全原因,我已删除了API密钥。

1 个答案:

答案 0 :(得分:1)

这是因为您的setState方法中有一个异步方法。 setState方法将被同步调用。

所以这里的问题是,当执行setState并刷新帧时,来自api的数据尚未到达,并且它向您显示旧数据。再次单击该按钮时,您的out变量具有新数据(从第一次单击开始),该数据将显示在屏幕上,并且API将再次被调用。

要解决您的问题

       FlatButton(
          onPressed: () async {
            FocusScope.of(context).unfocus();
            await getPrice(ticker.text);
            setState(() {
              
            });
          },
          child: Text('Submit')
        ),

因此在API调用完成后调用setState方法。

要了解有关异步/等待的更多信息,请观看此视频:https://www.youtube.com/watch?v=SmTCmDMi4BY