Обработка асинхронной проверки Wi-Fi в приложении Flutter - PullRequest
0 голосов
/ 30 сентября 2018

Я создаю приложение Flutter, в котором я хочу проверить, включен ли у пользователя Wi-Fi, прежде чем перейти к другому действию.

if (wifiEnabled) {
 //Do stuff
}
else {
//Tell the user to turn on wifi
}

У меня есть фрагмент кода, который позволяет мне проверить,у пользователя есть подключение к Интернету из этого поста. Проверьте, доступно ли подключение к Интернету в приложении Flutter

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 асинхронна.Если пользователь переходит от отсутствия Wi-Fi к Wi-Fi, логическое значение не обновляется к тому времени, когда проверяется код if (wifiEnabled), поэтому согласно логике wifiEnabled будет иметь значение false, несмотря на то, что у пользователя есть Wi-Fi.

Если пользователь попытается снова, однако у него будет Wi-Fi, так как wifiEnabled будет обновлен до true.Я пытался использовать Timer и Future.delayed, но до сих пор не смог решить свою проблему.

Любой совет для решения проблемы или асинхронных вызовов в целом был бы очень полезен.Спасибо

1 Ответ

0 голосов
/ 01 октября 2018

Надеюсь, приведенный ниже код поможет вам понять.

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...