flutter如何获取设备的ip地址

在Flutter开发中,我需要获取当前设备的IP地址(包括IPv4和IPv6),但发现dart:io的NetworkInterface只在部分平台有效。请问有什么跨平台的解决方案吗?最好能兼容Android、iOS和Web端,并区分WIFI和蜂窝网络的不同IP。官方是否有推荐的方式?如果要用第三方插件,哪些是稳定且维护良好的?

2 回复

在Flutter中,可以使用dart:io库的NetworkInterface类获取设备IP地址。示例代码:

import 'dart:io';

Future<String> getIpAddress() async {
  final interfaces = await NetworkInterface.list();
  for (var interface in interfaces) {
    for (var addr in interface.addresses) {
      if (!addr.isLoopback && addr.type == InternetAddressType.IPv4) {
        return addr.address;
      }
    }
  }
  return '0.0.0.0';
}

注意:需要联网权限,且返回的是设备在局域网中的IP。

更多关于flutter如何获取设备的ip地址的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中获取设备IP地址,可以使用以下方法:

方法一:使用 network_info_plus 包(推荐)

  1. 添加依赖
dependencies:
  network_info_plus: ^5.0.1
  1. 获取IP地址代码
import 'package:network_info_plus/network_info_plus.dart';

Future<String?> getDeviceIP() async {
  final NetworkInfo networkInfo = NetworkInfo();
  
  try {
    // 获取WiFi IP地址
    String? wifiIP = await networkInfo.getWifiIP();
    
    // 或者获取移动数据IP地址
    // String? cellularIP = await networkInfo.getWifiIP();
    
    return wifiIP;
  } catch (e) {
    print('获取IP地址失败: $e');
    return null;
  }
}

// 使用示例
void getIPAddress() async {
  String? ipAddress = await getDeviceIP();
  if (ipAddress != null) {
    print('设备IP地址: $ipAddress');
  } else {
    print('无法获取IP地址');
  }
}

方法二:使用 dart:io 获取本地IP

import 'dart:io';

Future<List<NetworkInterface>> getNetworkInterfaces() async {
  try {
    return await NetworkInterface.list(
      includeLoopback: false,
      type: InternetAddressType.IPv4
    );
  } catch (e) {
    print('获取网络接口失败: $e');
    return [];
  }
}

// 获取第一个可用的IPv4地址
Future<String?> getLocalIP() async {
  var interfaces = await getNetworkInterfaces();
  
  for (var interface in interfaces) {
    for (var addr in interface.addresses) {
      if (!addr.isLoopback && addr.type == InternetAddressType.IPv4) {
        return addr.address;
      }
    }
  }
  return null;
}

注意事项

  1. 权限要求:在Android中需要在 android/app/src/main/AndroidManifest.xml 添加网络权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  1. iOS配置:在iOS的 ios/Runner/Info.plist 中添加:
<key>NSLocalNetworkUsageDescription</key>
<string>需要访问网络信息以获取IP地址</string>

推荐使用 network_info_plus 包,它提供了跨平台的统一API,使用更简单可靠。

回到顶部