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 包(推荐)
- 添加依赖
 
dependencies:
  network_info_plus: ^5.0.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;
}
注意事项
- 权限要求:在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" />
- iOS配置:在iOS的 
ios/Runner/Info.plist中添加: 
<key>NSLocalNetworkUsageDescription</key>
<string>需要访问网络信息以获取IP地址</string>
推荐使用 network_info_plus 包,它提供了跨平台的统一API,使用更简单可靠。
        
      
            
            
            
