Flutter 网络工具类
  pldY3AmarceX 2023年11月19日 58 0

当你在使用Flutter进行移动应用开发中需要管理网络连接状态并采取相应措施时,使用connectivity_plus库是一个不错的选择。这个库提供了一种简单而强大的方式来检测设备的网络连接状态,包括Wi-Fi、移动数据、以及没有网络连接的情况,在本文中,将创建一个使用connectivity_plus库的网络工具类,并将其设计为单例模式,以便在整个应用程序中轻松管理网络连接状态。


1.安装 connectivity_plus 库

首先,确保你的Flutter项目中已经添加了 connectivity_plus 库。你可以在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  #https://pub.dev/packages/connectivity_plus 网络监听
  connectivity_plus: ^5.0.1

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


2.创建单例网络工具类

为了管理网络连接状态,要创建一个单例网络工具类,以确保只有一个实例在应用程序中运行。以下是该类的代码:

import 'package:connectivity_plus/connectivity_plus.dart';

class NetworkUtil {
  static final NetworkUtil _singleton = NetworkUtil._internal();
  final Connectivity _connectivity = Connectivity();

  Stream<ConnectivityResult> get onConnectivityChanged =>
      _connectivity.onConnectivityChanged;

  NetworkUtil._internal() {
    startMonitoring();
  }

  static NetworkUtil instance() {
    return _singleton;
  }

  factory NetworkUtil() {
    return _singleton;
  }

  ///检查网络连接状态
  ///返回一个Future<ConnectivityResult>,表示当前的网络连接状态,
  ///可以是ConnectivityResult.none、ConnectivityResult.wifi或ConnectivityResult.mobile。
  Future<ConnectivityResult> checkConnectivity2() async {
    return await _connectivity.checkConnectivity();
  }

  ///判断是否在线
  Future<bool> isOnline() async {
    var result = await _connectivity.checkConnectivity();
    return result != ConnectivityResult.none;
  }

  ///判断是否连接到Wi-Fi
  Future<bool> isWifi() async {
    var result = await _connectivity.checkConnectivity();
    return result == ConnectivityResult.wifi;
  }

  ///判断是否连接到移动数据网络
  Future<bool> isMobile() async {
    var result = await _connectivity.checkConnectivity();
    return result == ConnectivityResult.mobile;
  }

  ///检查网络是否可用
  Future<bool> checkConnectivity() async {
    var connectivityResult = await _connectivity.checkConnectivity();
    return _convertConnectivityResult(connectivityResult);
  }

  bool _convertConnectivityResult(ConnectivityResult result) {
    return result == ConnectivityResult.mobile ||
        result == ConnectivityResult.wifi;
  }

  ///监听网络状态变化
  void startMonitoring() {
    _connectivity.onConnectivityChanged.listen((result) {
      if (_convertConnectivityResult(result)) {
        print('网络连接正常');
      } else {
        print('没有网络连接');
      }
    });
  }
}


3.使用
NetworkManager networkManager = NetworkManager();

// 获取连接状态
ConnectivityResult connectivityResult = await networkManager.checkConnectivity();

///写法一

// 检查是否在线
bool isOnline = await networkManager.isOnline();

// 检查是否连接到Wi-Fi
bool isWifi = await networkManager.isWifi();

// 检查是否连接到移动数据
bool isMobile = await networkManager.isMobile();

// 监听连接状态变化
networkManager.startMonitoring();

// 在连接状态变化时,可以通过订阅 `onConnectivityChanged` 流来获取通知
networkManager.onConnectivityChanged.listen((result) {
  // 处理连接状态变化
});

///写法二

// 检查网络连接状态
networkManager.checkConnectivity().then((result) {
  print('当前网络状态: $result');
});

// 判断是否在线
networkManager.isOnline().then((isOnline) {
  print('是否在线: $isOnline');
});

// 判断是否连接到Wi-Fi
networkManager.isWifi().then((isWifi) {
  print('是否连接到Wi-Fi: $isWifi');
});

// 判断是否连接到移动数据网络
networkManager.isMobile().then((isMobile) {
  print('是否连接到移动数据网络: $isMobile');
});


结束!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
pldY3AmarceX