【问题标题】:Flutter check internet Connection using InternetAddress.lookup not workingFlutter使用InternetAddress.lookup检查互联网连接不起作用
【发布时间】:2021-11-16 06:49:53
【问题描述】:

我有一个类正在使用 connectivity 包检查网络连接,然后如果有网络连接,它正在使用 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();

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    这是我使用的代码

    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()。我用它来满足确切的需求。你可以相应地调整它。

    【讨论】:

    • 对我不起作用,它仍然返回 True ! ...输出是:I/flutter ( 5113): [InternetAddress('172.217.20.14', IPv4)] 如果有互联网 ...如果不是:[InternetAddress('142.250.185.174', IPv4)] 两个 thiam 都在重新调整 true!
    • 我需要的是,只要连接到 Wi-Fi 或网络,它就有互联网连接!
    • 尝试将地址保留为example.com。该代码已部署在生产环境中,对我来说效果很好。还要使用物理设备进行测试,而不是模拟器。
    • 在模拟器中更改为在真实设备(三星 S10+)+ 中测试的 example.com 后仍然相同 > 完整代码:在问题中编辑
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 2023-04-03
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多