在 Flutter 应用程序中处理异步 wifi 检查
Posted
技术标签:
【中文标题】在 Flutter 应用程序中处理异步 wifi 检查【英文标题】:Handling asynchronous wifi check in Flutter application 【发布时间】:2019-03-05 14:12:49 【问题描述】:我正在制作一个 Flutter 应用程序,我想在执行其他操作之前检查用户是否启用了 wifi。
if (wifiEnabled)
//Do stuff
else
//Tell the user to turn on wifi
我有一个代码 sn-p,它允许我通过这篇文章检查用户是否有互联网连接。 Check whether there is an Internet connection available on Flutter app
void _checkWifi() async
try
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty)
print('connected');
_wifiEnabled = true;
on SocketException catch (_)
print('not connected');
_wifiEnabled = false;
我遇到的问题是因为 checkWifi 函数是异步的。如果用户从没有 wifi 变为有 wifi,则在检查 if(wifiEnabled) 代码时布尔值不会更新,因此根据逻辑 wifiEnabled 将为 false,尽管用户有 wifi。
如果用户再次尝试,他们将拥有 wifi,因为 wifiEnabled 将更新为 true。我尝试过使用 Timer 和 Future.delayed,但到目前为止我还没有解决我的问题。
任何有关处理问题或一般异步调用的建议都会非常有帮助。谢谢
【问题讨论】:
你想用_wifiEnabled
做什么?在 UI 中显示一些东西?
差不多。如果用户没有启用 wifi,我只会向他们显示一个对话框,通知他们打开 wifi,然后退出应用程序。否则我会允许需要互联网的功能。经过反思,如果我无法以这种方式工作,我可能会尝试检查互联网请求中的套接字异常。
【参考方案1】:
希望下面的代码能帮助你理解这个想法。
class YourWidget extends StatelessWidget
@override
Widget build(BuildContext context)
showWifiAlert();
return ...
void showWifiAlert() async
var wifiEnabled = await getWifiStatus();
if (wifiEnabled)
//Do stuff
else
//Ask user to enable internet
Future<bool> getWifiStatus() async
try
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty)
print('connected');
return true;
on SocketException catch (_)
print('not connected');
return false;
【讨论】:
最欢迎 :-) 这不是一个解决方案,因为如果您使用移动数据连接到互联网,结果将是相同的......不管是否连接到互联网,是否有检查 WiFi 是否打开/关闭?以上是关于在 Flutter 应用程序中处理异步 wifi 检查的主要内容,如果未能解决你的问题,请参考以下文章
FlutterFuture 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )