Как получить IP устройства в Dart / Flutter - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я пишу приложение, в котором пользователю необходимо знать IP-адрес своего телефона / планшета.Где я могу найти эту информацию?

Я хочу знать только, какой локальный IP-адрес, например, 192.168.x.xxx, а НЕ общедоступный IP-адрес маршрутизатора.

Итакпока я могу только найти InternetAddress.anyIPv4 и InternetAddress.loopbackIPv4.Адрес обратной связи не тот, который я хочу, так как это 127.0.0.1.

Ответы [ 5 ]

0 голосов
/ 02 августа 2019

В моем недавнем приложении у меня есть требование получить IP-адрес пользователя, а затем я нашел этот пакет полезным.https://pub.dev/packages/get_ip

Вот как я это использую.

_onLoginButtonPressed() async {
String ipAddress = await GetIp.ipAddress;
print(ipAddress); //192.168.232.2
}
0 голосов
/ 04 ноября 2018

Я искал получение флаттера IP-адреса для платформ iOS и Android.

В ответе Feu и Günter Zöchbauer после работтолько на платформе iOS

NetworkInterface.list(....);

этот список сетевых интерфейсов не поддерживается для платформы Android.

После слишком долгого поиска и поиска возможных решений,для получения IP-адреса также на устройстве Android, я натолкнулся на пакет флаттера wifi , с помощью которого мы можем получить IP-адрес устройства на платформах iOS и Android.Простая функция примера, чтобы получить IP-адрес устройства

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

Я проверил это на Android с помощью Wi-Fi, а также из мобильной сети.А также протестировано на устройстве iOS.

Хотя от имени он ищет только сеть Wi-Fi, но он также дал мне правильный IP-адрес в мобильной сети передачи данных [протестировано в сети 4G].

# finally_this_works Я почти отказался от поиска для получения IP-адреса на Android и думал о реализации канал платформы для извлечения IP-кода из Java-кода для платформы Android [так как список интерфейсов работал для iOS].Этот пакет Wi-Fi спас день и много головной боли.

0 голосов
/ 19 сентября 2018

Полагаю, вы имеете в виду локальный IP-адрес текущей подключенной сети Wi-Fi, верно?

Проверьте NetworkInterface в 'dart: io' .

РЕДАКТИРОВАТЬ: NetworkInterface.list не поддерживается в Android, как указывалось позже Mahesh .Помимо wifi пакета , предложенного в его ответа , есть PR , чтобы донести это до подключаемого модуля.

Вы можететакже хотите проверить, доступен ли Wifi, используя плагин подключаемость в флаттер / плагины .

Ниже приведен простой пример использования NetworkInferface.Кстати, вот пример того, как проверить, доступен ли wifi .

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"),
      ),
    );
  }
}
0 голосов
/ 19 сентября 2018

Вы пробовали пакет device_info?

Пример запроса информации об устройстве приведен в https://pub.dartlang.org/packages/device_info#-example-tab-

0 голосов
/ 19 сентября 2018

Это должно предоставить информацию, которую вы запрашивали

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}');
      }
    }
  }

См. Также https://api.dartlang.org/stable/2.0.0/dart-io/NetworkInterface-class.html

...