Flutter获取WiFi信息插件wifi_info_plugin的使用

Flutter获取WiFi信息插件wifi_info_plugin的使用

wifi_info_plugin 是一个用于获取 Android 设备 WiFi 信息的插件。目前该插件仅支持 Android 平台,iOS 版本正在开发中。

使用步骤

以下代码展示了如何在 Flutter 应用程序中使用 wifi_info_plugin 插件来获取网络信息。

示例代码

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:wifi_info_plugin/wifi_info_plugin.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  WifiInfoWrapper _wifiObject;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 异步方法初始化平台状态
  Future<void> initPlatformState() async {
    WifiInfoWrapper wifiObject;
    try {
      // 获取 WiFi 详细信息
      wifiObject = await WifiInfoPlugin.wifiDetails;
    } on PlatformException {
      // 处理异常
    }
    if (!mounted) return;

    setState(() {
      _wifiObject = wifiObject;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 获取 IP 地址
    String ipAddress = _wifiObject != null ? _wifiObject.ipAddress.toString() : "ip";

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('WiFi 信息插件示例'),
        ),
        body: Center(
          child: Text('运行于: $ipAddress'),
        ),
      ),
    );
  }
}

支持的 Getter 方法

WifiInfoWrapper 类提供了以下有效的 getter 方法来获取网络信息:

  • ipAddress: 获取设备的 IP 地址。
  • routerIp: 获取路由器的 IP 地址。
  • dns1: 获取 DNS 服务器 1 的地址。
  • dns2: 获取 DNS 服务器 2 的地址。
  • bssId: 获取基本服务集标识符(BSSID)。
  • ssid: 获取当前连接的 SSID。
  • macAddress: 获取设备的 MAC 地址。
  • linkSpeed: 获取链路速度。
  • signalStrength: 获取信号强度。
  • frequency: 获取频率。
  • networkId: 获取网络 ID。
  • connectionType: 获取连接类型。
  • isHiddenSsid: 判断 SSID 是否隐藏。

完整示例 Demo

以下是一个完整的示例代码,展示如何在 Flutter 中使用 wifi_info_plugin 插件来获取 WiFi 信息。

示例代码

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('WiFi 信息插件示例'),
        ),
        body: Center(
          child: FutureBuilder<WifiInfoWrapper>(
            future: WifiInfoPlugin.wifiDetails,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                final wifiInfo = snapshot.data;
                return Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text('IP 地址: ${wifiInfo.ipAddress}'),
                    Text('路由器 IP: ${wifiInfo.routerIp}'),
                    Text('DNS 1: ${wifiInfo.dns1}'),
                    Text('DNS 2: ${wifiInfo.dns2}'),
                    Text('BSSID: ${wifiInfo.bssId}'),
                    Text('SSID: ${wifiInfo.ssid}'),
                    Text('MAC 地址: ${wifiInfo.macAddress}'),
                    Text('链路速度: ${wifiInfo.linkSpeed} Mbps'),
                    Text('信号强度: ${wifiInfo.signalStrength} dBm'),
                    Text('频率: ${wifiInfo.frequency} MHz'),
                    Text('网络 ID: ${wifiInfo.networkId}'),
                    Text('连接类型: ${wifiInfo.connectionType}'),
                    Text('SSID 隐藏: ${wifiInfo.isHiddenSsid ? '是' : '否'}'),
                  ],
                );
              } else if (snapshot.hasError) {
                return Text('加载失败: ${snapshot.error}');
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }
}

更多关于Flutter获取WiFi信息插件wifi_info_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter获取WiFi信息插件wifi_info_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,如果你想获取设备的WiFi信息,可以使用 wifi_info_plugin 插件。这个插件可以帮助你获取当前连接的WiFi网络的SSID、BSSID、IP地址等信息。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 wifi_info_plugin 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  wifi_info_plugin: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的Dart文件中导入 wifi_info_plugin

import 'package:wifi_info_plugin/wifi_info_plugin.dart';

3. 获取WiFi信息

你可以使用 WifiInfoPlugin 类来获取WiFi信息。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WiFiInfoScreen(),
    );
  }
}

class WiFiInfoScreen extends StatefulWidget {
  @override
  _WiFiInfoScreenState createState() => _WiFiInfoScreenState();
}

class _WiFiInfoScreenState extends State<WiFiInfoScreen> {
  String _wifiSSID = 'Unknown';
  String _wifiBSSID = 'Unknown';
  String _wifiIP = 'Unknown';

  @override
  void initState() {
    super.initState();
    _getWiFiInfo();
  }

  Future<void> _getWiFiInfo() async {
    try {
      WifiInfo wifiInfo = await WifiInfoPlugin.wifiDetails;
      setState(() {
        _wifiSSID = wifiInfo.ssid ?? 'Unknown';
        _wifiBSSID = wifiInfo.bssid ?? 'Unknown';
        _wifiIP = wifiInfo.ipAddress ?? 'Unknown';
      });
    } catch (e) {
      print('Failed to get WiFi info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WiFi Info'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('SSID: $_wifiSSID'),
            Text('BSSID: $_wifiBSSID'),
            Text('IP Address: $_wifiIP'),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

运行你的Flutter应用,你应该能够看到当前连接的WiFi网络的SSID、BSSID和IP地址。

5. 注意事项

  • 权限:在Android上,获取WiFi信息需要 ACCESS_WIFI_STATEACCESS_FINE_LOCATION 权限。确保在 AndroidManifest.xml 中添加这些权限:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    
  • iOS:在iOS上,获取WiFi信息需要 Location 权限。你需要在 Info.plist 中添加以下键值对:

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>We need your location to get WiFi information</string>
回到顶部