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,使用更简单可靠。

