gpt4 book ai didi

flutter - 在if语句条件下如何使用Future

转载 作者:行者123 更新时间:2023-12-03 04:59:10 41 4
gpt4 key购买 nike

在Flutter中,我使用的是“url_launcher”软件包,该软件包使用Future<bool>检查该应用程序是否可以启动其他应用程序。在我的代码中,我列出了电话号码,并且仅当它安装在用户设备上时,我才想放置WhatsApp的图标。

bool hasWhatsApp() {
var whatsExists;
canLaunch('https://api.whatsapp.com/').then((val) => whatsExists = val);
return whatsExists;
}

我正在使用此函数在if语句中检查是否在屏幕上显示图标,但是,它始终返回“null”。
if (phoneNumber.substring(0, 1) != '2' && hasWhatsApp())
IconButton(
icon: Image.asset('assets/icons/whatsapp.png'),
iconSize: Theme.of(context).iconTheme.size,
onPressed: () async {
await launch(whatsUrl);
},
),

我该如何解决?

最佳答案

您尝试做的事情行不通。

您的函数hasWhatsApp是同步的,因此在您调用它时会立即返回一个值。
在该函数内部,您将启动异步计算,并且该计算完成时(稍后),它将覆盖局部变量。到那时该函数早已返回。

您无法立即返回直到以后才可用的值。根本不在那里。

因此,您需要等待 future ,以便可以延迟做出决定,直到该值可用为止。
例如,将if更改为:

if (phoneNumber.substring(0, 1) != '2' && 
await canLaunch('https://api.whatsapp.com/')) {
...
}

那确实意味着您必须使包含该 if的函数异步。
我不是Flutter专家,我想您可能需要使用 FutureBuilder

没有异步的解决方法。

关于flutter - 在if语句条件下如何使用Future <bool>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59927581/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com