首页 > 解决方案 > Flutter使用InternetAddress.lookup检查互联网连接不起作用

问题描述

我有一个类正在使用连接包检查网络连接,然后如果有网络连接,它正在检查互联网是否可用InternetAddress.lookup

问题是连接包正在工作!并且检测到 Wi-Fi 和移动连接但InternetAddress.lookup总是返回true!即使没有互联网!

完整课程代码:

import 'dart:io';
import 'dart:async';

import 'package:connectivity/connectivity.dart';

class ConnectionStatusSingleton {
  static Future<bool> checkConnection() async {
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult == ConnectivityResult.mobile) {
      try {
        final result = await InternetAddress.lookup('example.com');
        var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
        return res;
      } on SocketException catch (_) {
        return false;
      }
    } else if (connectivityResult == ConnectivityResult.wifi) {
      try {
        final result = await InternetAddress.lookup('example.com');
        var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
        return res;
      } on SocketException catch (_) {
        return false;
      }
    } else {
      return false;
    }
  }
}

我使用以下方法调用它:

 bool connectionState = await ConnectionStatusSingleton.checkConnection();

标签: flutterdart

解决方案


这是我使用的代码

Future<bool> isInternetConnected() async {
    try {
      final result = await InternetAddress.lookup('example.com');
      var res = result.isNotEmpty && result[0].rawAddress.isNotEmpty;
      setState(() {
        isInternet = res;
      });

      return res;
    } on SocketException catch (_) {

      setState(() {
        isInternet = false;
      });

      return false;
    }
  }

您似乎没有根据 wifi 和蜂窝数据执行任何特定操作,因此您可以使用它。您的问题似乎是您处理异常的方式。

对代码的一般理解是“尝试连接到互联网上的东西,如果设备有互联网,它会连接,否则它会抛出异常”

在上面的代码中我不推荐使用setState(). 我用它来满足确切的需求。您可以相应地对其进行调整。


推荐阅读