我正在尝试学习和使用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密钥。
答案 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