Como llegar IP del dispositivo en Dart / aleteo

votos
1

Actualmente estoy escribiendo una aplicación donde el usuario necesita saber la dirección IP de su teléfono / tableta. ¿Dónde puedo encontrar esta información?

Yo sólo quiero saber cuál es la dirección IP local es, por ejemplo, 192.168.x.xxx y no la dirección IP pública del router.

Hasta ahora, lo único que puedo encontrar InternetAddress.anyIPv4y InternetAddress.loopbackIPv4. La dirección de bucle de retorno no es lo que yo quiero, ya que es 127.0.0.1.

Publicado el 19/09/2018 a las 17:19
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
3

Yo estaba buscando obtener la dirección IP en el flúter tanto para las plataformas iOS y Android.

Como respondida por Feu y Günter Zöchbauer siguientes obras en la única plataforma iOS

NetworkInterface.list(....);

esta lista de interfaces de red no es compatible con la plataforma Android.

Después de mucho tiempo de búsqueda y luchando con las posibles soluciones, para conseguir IP también en el dispositivo androide, me encontré con un paquete llamado aleteo wifi , con este paquete podemos obtener la dirección IP del dispositivo en ambos iOS y plataformas Android. Función de ejemplo sencillo de obtener la dirección IP del dispositivo

Future<InternetAddress> get selfIP async {
    String ip = await Wifi.ip;
    return InternetAddress(ip);
}

He probado esto en android usando wifi y también de la red móvil. Y también probado en el dispositivo iOS.

A pesar del nombre que se ve sólo para la red Wi-Fi, pero también me ha dado la dirección IP correcta en la red de datos móviles [probado en la red 4G].

#finally_this_works : Casi me han renunciado a la búsqueda de obtener la dirección IP en android y estaba pensando en la implementación de canal de la plataforma en busca de IP nativa del código de Java para la plataforma Android [como lista de interfaces estaba trabajando para iOS]. Este paquete wifi salvó el día y un montón de dolor de cabeza.

Respondida el 04/11/2018 a las 08:49
fuente por usuario

votos
3

Supongo que te refieres a la IP local de la red Wifi conectado en ese momento, ¿verdad?

Compruebe NetworkInterface en 'dardo: io' .

EDIT: NetworkInterface.list no es compatible con Android, como más adelante señalado por Mahesh . Aparte del paquete wifi sugiere en su respuesta , hay un PR de llevar que al plugin conectividad.

También es posible que desee comprobar si Wi-Fi está disponible utilizando la conectividad plug-in en el aleteo / plugins .

Justo debajo hay un ejemplo simple del uso de NetworkInferface. Por cierto, aquí está un ejemplo de cómo comprobar si wifi está disponible .

import 'dart:io';
import 'package:flutter/material.dart';

main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: "Network Interface example",
      home: new NetworkInterfaceWidget(),
    );
  }
}

class NetworkInterfaceWidget extends StatefulWidget {
  @override
  _NetworkInterfaceState createState() => new _NetworkInterfaceState();
}

class _NetworkInterfaceState extends State<NetworkInterfaceWidget> {
  String _networkInterface;
  @override
  initState() {
    super.initState();

    NetworkInterface.list(includeLoopback: false, type: InternetAddressType.any)
    .then((List<NetworkInterface> interfaces) {
      setState( () {
        _networkInterface = "";
        interfaces.forEach((interface) {
          _networkInterface += "### name: ${interface.name}\n";
          int i = 0;
          interface.addresses.forEach((address) {
            _networkInterface += "${i++}) ${address.address}\n";
          });
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {    
    return Scaffold(
      appBar: AppBar(
        title: Text("NetworkInterface"),
      ),
      body: Container(
        padding: EdgeInsets.all(10.0),
        child: Text("Only in iOS.. :(\n\nNetworkInterface:\n $_networkInterface"),
      ),
    );
  }
}
Respondida el 19/09/2018 a las 17:55
fuente por usuario

votos
0

¿Has probado el paquete device_info?

Hay un ejemplo en la consulta de información del dispositivo en https://pub.dartlang.org/packages/device_info#-example-tab-

Respondida el 19/09/2018 a las 18:37
fuente por usuario

votos
0

Esto debería proporcionar la información que solicitó

import 'dart:io';

...

  Future printIps() async {
    for (var interface in await NetworkInterface.list()) {
      print('== Interface: ${interface.name} ==');
      for (var addr in interface.addresses) {
        print(
            '${addr.address} ${addr.host} ${addr.isLoopback} ${addr.rawAddress} ${addr.type.name}');
      }
    }
  }

Ver también https://api.dartlang.org/stable/2.0.0/dart-io/NetworkInterface-class.html

Respondida el 19/09/2018 a las 17:44
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more