Flutter网络信息获取插件network_info_plus_ohos的使用

Flutter网络信息获取插件network_info_plus_ohos的使用

network_info_plus_ohos 是一个用于在 OpenHarmony 平台上获取网络信息(如WiFi详情)的Flutter插件。它是 network_info_plus 在 OpenHarmony 平台上的实现。

使用步骤

  1. 添加依赖

    在你的项目的 pubspec.yaml 文件中添加以下依赖项:

    dependencies:
      network_info_plus: any
      network_info_plus_ohos: any
    
  2. 请求权限

    在你的项目的 module.json5 文件中增加以下权限设置:

    requestPermissions: [
      {"name" :  "ohos.permission.INTERNET"},
      {"name" :  "ohos.permission.GET_WIFI_INFO"},
    ],
    
  3. 编写代码

    下面是一个完整的示例代码,展示了如何使用 network_info_plus_ohos 插件来获取WiFi相关信息。

    // Copyright 2017 The Chromium Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    
    // ignore_for_file: public_member_api_docs
    
    import 'dart:async';
    import 'dart:developer' as developer;
    
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:network_info_plus/network_info_plus.dart';
    // import 'package:permission_handler/permission_handler.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            useMaterial3: true,
            colorSchemeSeed: const Color(0x9f4376f8),
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, this.title});
    
      final String? title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      String _connectionStatus = 'Unknown';
      final NetworkInfo _networkInfo = NetworkInfo();
    
      @override
      void initState() {
        super.initState();
        _initNetworkInfo();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('NetworkInfoPlus example'),
            elevation: 4,
          ),
          body: Center(
              child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const Text(
                'Network info',
                style: TextStyle(
                  fontSize: 16,
                  fontWeight: FontWeight.bold,
                ),
              ),
              const SizedBox(height: 16),
              Text(_connectionStatus),
            ],
          )),
        );
      }
    
      Future<void> _initNetworkInfo() async {
        String? wifiName, wifiBSSID, wifiIPv4, wifiIPv6, wifiGatewayIP, wifiBroadcast, wifiSubmask;
    
        try {
          wifiBSSID = await _networkInfo.getWifiBSSID();
          wifiName = await _networkInfo.getWifiName();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi BSSID', error: e);
          wifiBSSID = 'Failed to get Wifi BSSID';
        }
    
        try {
          wifiIPv4 = await _networkInfo.getWifiIP();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi IPv4', error: e);
          wifiIPv4 = 'Failed to get Wifi IPv4';
        }
    
        try {
          wifiIPv6 = await _networkInfo.getWifiIPv6();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi IPv6', error: e);
          wifiIPv6 = 'Failed to get Wifi IPv6';
        }
    
        try {
          wifiSubmask = await _networkInfo.getWifiSubmask();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi submask address', error: e);
          wifiSubmask = 'Failed to get Wifi submask address';
        }
    
        try {
          wifiBroadcast = await _networkInfo.getWifiBroadcast();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi broadcast', error: e);
          wifiBroadcast = 'Failed to get Wifi broadcast';
        }
    
        try {
          wifiGatewayIP = await _networkInfo.getWifiGatewayIP();
        } on PlatformException catch (e) {
          developer.log('Failed to get Wifi gateway address', error: e);
          wifiGatewayIP = 'Failed to get Wifi gateway address';
        }
    
        setState(() {
          _connectionStatus = 'Wifi Name: $wifiName\n'
              'Wifi BSSID: $wifiBSSID\n'
              'Wifi IPv4: $wifiIPv4\n'
              'Wifi IPv6: $wifiIPv6\n'
              'Wifi Broadcast: $wifiBroadcast\n'
              'Wifi Gateway: $wifiGatewayIP\n'
              'Wifi Submask: $wifiSubmask\n';
        });
      }
    }
    

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

1 回复

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


network_info_plus_ohos 是一个用于在 Flutter 应用中获取网络信息的插件,特别针对 OpenHarmony(OHOS)平台进行了适配。它基于 network_info_plus 插件,并对其进行了扩展以支持 OHOS 平台。

主要功能

network_info_plus_ohos 提供了以下功能:

  1. 获取当前网络连接类型(如 WiFi、移动数据、无网络等)。
  2. 获取设备的 IP 地址(包括 IPv4 和 IPv6)。
  3. 获取 WiFi 的信息(如 SSID、BSSID 等)。
  4. 检查网络是否连接

安装

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

dependencies:
  flutter:
    sdk: flutter
  network_info_plus_ohos: ^1.0.0 # 请使用最新版本

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

基本用法

1. 获取网络连接类型

import 'package:network_info_plus_ohos/network_info_plus_ohos.dart';

final networkInfo = NetworkInfoOhos();

void checkNetworkType() async {
  final connectivityResult = await networkInfo.getNetworkType();
  print('Network type: $connectivityResult');
}

2. 获取 IP 地址

void getIpAddress() async {
  final ipv4 = await networkInfo.getWifiIP();
  final ipv6 = await networkInfo.getWifiIPv6();
  print('IPv4: $ipv4');
  print('IPv6: $ipv6');
}

3. 获取 WiFi 信息

void getWifiInfo() async {
  final wifiName = await networkInfo.getWifiName();
  final wifiBSSID = await networkInfo.getWifiBSSID();
  print('WiFi Name: $wifiName');
  print('WiFi BSSID: $wifiBSSID');
}

4. 检查网络是否连接

void checkNetworkConnection() async {
  final isConnected = await networkInfo.isNetworkConnected();
  print('Is Network Connected: $isConnected');
}

注意事项

  1. 权限:在 OHOS 平台上,获取网络信息可能需要特定的权限。请确保在 config.json 文件中声明了必要的权限。
  2. 平台差异:由于 network_info_plus_ohos 是针对 OHOS 平台的插件,因此在其他平台(如 Android、iOS)上可能无法正常工作。
  3. 错误处理:在实际使用中,建议添加错误处理逻辑,以应对可能的异常情况。

示例代码

以下是一个完整的示例,展示了如何使用 network_info_plus_ohos 插件获取网络信息:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: NetworkInfoScreen(),
    );
  }
}

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

class _NetworkInfoScreenState extends State<NetworkInfoScreen> {
  final networkInfo = NetworkInfoOhos();
  String networkType = 'Unknown';
  String ipv4 = 'Unknown';
  String ipv6 = 'Unknown';
  String wifiName = 'Unknown';
  String wifiBSSID = 'Unknown';
  bool isConnected = false;

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

  void fetchNetworkInfo() async {
    final connectivityResult = await networkInfo.getNetworkType();
    final ipv4Address = await networkInfo.getWifiIP();
    final ipv6Address = await networkInfo.getWifiIPv6();
    final wifiNameResult = await networkInfo.getWifiName();
    final wifiBSSIDResult = await networkInfo.getWifiBSSID();
    final isNetworkConnected = await networkInfo.isNetworkConnected();

    setState(() {
      networkType = connectivityResult.toString();
      ipv4 = ipv4Address ?? 'Unknown';
      ipv6 = ipv6Address ?? 'Unknown';
      wifiName = wifiNameResult ?? 'Unknown';
      wifiBSSID = wifiBSSIDResult ?? 'Unknown';
      isConnected = isNetworkConnected;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Network Info Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('Network Type: $networkType'),
            Text('IPv4: $ipv4'),
            Text('IPv6: $ipv6'),
            Text('WiFi Name: $wifiName'),
            Text('WiFi BSSID: $wifiBSSID'),
            Text('Is Network Connected: $isConnected'),
          ],
        ),
      ),
    );
  }
}
回到顶部