getUserIPAddress method

Future<String?> getUserIPAddress()

Returns a validated public IPv4 or IPv6 address.

Providers are tried in order. Returns null if they all fail, time out, or return invalid data.

Implementation

Future<String?> getUserIPAddress() async {
  for (final Uri provider in _ipProviders) {
    try {
      final Object? data = await _request(provider);
      final String? candidate =
          _asMap(data)?['ip']?.toString().trim() ?? data?.toString().trim();
      if (candidate != null && _isValidIp(candidate)) {
        return candidate;
      }
    } on Object {
      // A failed provider is expected; continue with the next fallback.
    }
  }
  return null;
}