Search code examples
flutterdartnetwork-programmingip-address

Flutter: Get local IP address on Android


How do I get the local IP address of my (Android) device in Flutter? This should be

  • the local IP address I get assigned via DHCP by my router when connected to WIFI
  • the local IP address in the VPN network assigned by my VPN server (not the global IP address by the VPN server itself) if connected to VPN
  • the global IP when connected via cellular

Solution

  • I solved it like this for now, but if you have a better solution, that would be deligthful:

    import 'dart:io';
    
    static Future<String> getLocalIpAddress() async {
        final interfaces = await NetworkInterface.list(type: InternetAddressType.IPv4, includeLinkLocal: true);
    
        try {
          // Try VPN connection first
          NetworkInterface vpnInterface = interfaces.firstWhere((element) => element.name == "tun0");
          return vpnInterface.addresses.first.address;
        } on StateError {
          // Try wlan connection next
          try {
            NetworkInterface interface = interfaces.firstWhere((element) => element.name == "wlan0");
            return interface.addresses.first.address;
          } catch (ex) {
            // Try any other connection next
            try {
              NetworkInterface interface = interfaces.firstWhere((element) => !(element.name == "tun0" || element.name == "wlan0"));
              return interface.addresses.first.address;
            } catch (ex) {
              return null;
            }
          }
        }
      }