getLocalIp function

Future<String> getLocalIp()

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
}