getLocalIp function
Implementation
Future<String> getLocalIp() async {
final interfaces = await NetworkInterface.list(
includeLoopback: false,
type: InternetAddressType.IPv4,
);
// Priority order for network interfaces
// 1. WiFi interfaces (usually work best for mobile access)
// 2. Ethernet interfaces
// 3. Other interfaces
// First, try to find WiFi interfaces
for (var iface in interfaces) {
// Look for common WiFi interface names
if (iface.name.toLowerCase().contains('wifi') ||
iface.name.toLowerCase().contains('wireless') ||
iface.name.toLowerCase().contains('wi-fi') ||
iface.name.toLowerCase().contains('802.11') ||
iface.name.toLowerCase().contains('wlan')) {
for (var addr in iface.addresses) {
if (!addr.isLoopback && addr.type == InternetAddressType.IPv4) {
print('📡 Found WiFi interface: ${iface.name} - ${addr.address}');
return addr.address;
}
}
}
}
// If no WiFi found, try Ethernet interfaces
for (var iface in interfaces) {
if (iface.name.toLowerCase().contains('ethernet') ||
iface.name.toLowerCase().contains('lan') ||
iface.name.toLowerCase().contains('local area connection')) {
for (var addr in iface.addresses) {
if (!addr.isLoopback && addr.type == InternetAddressType.IPv4) {
print('📡 Found Ethernet interface: ${iface.name} - ${addr.address}');
return addr.address;
}
}
}
}
// Fallback to any non-loopback IPv4 address
for (var iface in interfaces) {
for (var addr in iface.addresses) {
if (!addr.isLoopback && addr.type == InternetAddressType.IPv4) {
print('📡 Found interface: ${iface.name} - ${addr.address}');
return addr.address;
}
}
}
return '127.0.0.1'; // fallback
}