flutter如何实现ping网络检测

在Flutter中如何实现网络连接的ping检测?我需要在应用中检查某个IP地址或域名是否可达,类似于命令行中的ping功能。目前尝试了dart:io的Process.run调用系统ping命令,但在iOS上遇到权限问题。有没有跨平台的解决方案?最好能获取到具体的延迟毫秒数,并支持Android和iOS。求推荐可靠的第三方库或实现方案!

2 回复

Flutter中实现Ping网络检测,可使用dart_ping库。安装后,创建Ping实例,监听响应流,获取延迟和状态。也可用connectivity_plus检测网络连接,但无法测延迟。

更多关于flutter如何实现ping网络检测的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现网络连通性检测(类似ping功能),可以使用以下几种方法:

1. 使用 http/dio 包发送请求

import 'package:http/http.dart' as http;

Future<bool> pingNetwork(String url) async {
  try {
    final response = await http.get(Uri.parse(url))
        .timeout(Duration(seconds: 5));
    return response.statusCode == 200;
  } catch (e) {
    return false;
  }
}

// 使用示例
bool isConnected = await pingNetwork('https://www.google.com');

2. 使用 connectivity_plus 包(推荐)

首先添加依赖:

dependencies:
  connectivity_plus: ^5.0.2

实现代码:

import 'package:connectivity_plus/connectivity_plus.dart';

class NetworkUtils {
  static final Connectivity _connectivity = Connectivity();
  
  // 检查网络连接状态
  static Future<bool> checkConnectivity() async {
    final result = await _connectivity.checkConnectivity();
    return result != ConnectivityResult.none;
  }
  
  // 监听网络状态变化
  static Stream<ConnectivityResult> get connectivityStream {
    return _connectivity.onConnectivityChanged;
  }
}

3. 完整的网络检测工具类

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:http/http.dart' as http;

class NetworkChecker {
  static Future<NetworkStatus> checkNetwork() async {
    // 先检查设备网络连接
    final connectivity = await Connectivity().checkConnectivity();
    
    if (connectivity == ConnectivityResult.none) {
      return NetworkStatus.disconnected;
    }
    
    // 再测试实际网络可达性
    try {
      final response = await http
          .get(Uri.parse('https://www.google.com'))
          .timeout(Duration(seconds: 5));
      
      return response.statusCode == 200 
          ? NetworkStatus.connected 
          : NetworkStatus.connectedButNoInternet;
    } catch (e) {
      return NetworkStatus.connectedButNoInternet;
    }
  }
}

enum NetworkStatus {
  connected,
  disconnected,
  connectedButNoInternet
}

使用建议

  1. connectivity_plus 用于检测设备网络连接状态
  2. http请求 用于验证实际网络可达性
  3. 结合两者可以获得更准确的网络状态

这种方法比传统ping更适用于移动应用场景,且符合各平台规范。

回到顶部