在 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 检查的主要内容,如果未能解决你的问题,请参考以下文章

Flutter——dart 异步

FlutterFuture 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )

异步/等待/然后在 Dart/Flutter 中

好或坏:在 Dart/Flutter 中声明主方法异步

Flutter:异步任务在“initState()”中无法按预期工作

Flutter 的异步机制Future