在Flutter应用程序中处理异步wifi检查

时间:2018-09-30 04:35:40

标签: asynchronous dart flutter

我正在制作Flutter应用程序,我想在此之前先检查用户是否已启用wifi。

index.php

我有一个代码段,可让我检查用户是否通过此帖子连接了互联网。 Check whether there is an Internet connection available on Flutter app

$_SERVER['DOCUMENT_ROOT']

我遇到的问题是因为checkWifi函数是异步的。如果用户从没有wifi变为拥有wifi,则在检查if(wifiEnabled)代码时布尔值不会更新,因此根据逻辑wifiEnabled将为false,尽管用户具有wifi。

但是,如果用户重试,则他们将拥有wifi,因为wifiEnabled将更新为true。我已经尝试使用Timer和Future.delayed,但是到目前为止我还无法解决我的问题。

任何有关处理问题或异步调用的建议通常都会很有帮助。谢谢

1 个答案:

答案 0 :(得分:0)

希望以下代码可以帮助您理解。

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;
   }
  }

}