一尘不染

如何在Dart / Flutter中获取设备IP

flutter

我目前正在编写一个应用,用户需要知道其手机/平板电脑的IP地址。我在哪里可以找到此信息?

我只想知道本地IP地址是什么,例如192.168.x.xxx,而不是路由器的公共IP地址。

到目前为止,我似乎只能找到InternetAddress.anyIPv4InternetAddress.loopbackIPv4。回送地址不是我想要的,因为它是127.0.0.1。


阅读 2836

收藏
2020-08-13

共1个答案

一尘不染

我想你是说当前连接的Wifi网络的本地IP,对不对?

检查‘dart:io’中的NetworkInterface

**编辑:Android不支持NetworkInterface.list,如稍后
Mahesh所
指出的。除了答案中建议的wifi包之外,还有一个PR可以将其带到连接插件中。
您可能还想使用flutter /plugins中连接插件检查Wifi是否可用。

在下面,有一个使用NetworkInferface的简单示例。

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"),
      ),
    );
  }
}
2020-08-13