Flutter_学习记录_connectivity_plus 检测网络

news/2025/3/18 12:10:33
  1. 引入插件
    官方网址:https://pub.dev/packages/connectivity_plus
    在这里插入图片描述
  2. 导入头文件
import 'package:connectivity_plus/connectivity_plus.dart';
  1. StreamSubscription订阅网络监听
late StreamSubscription<List<ConnectivityResult>> _subscription;

 void initState() { 
    super.initState(); 

    // 必须要有订阅,如果没有订阅的话,那下次再进来,就检测不到网络的变化了
    _subscription =  Connectivity().onConnectivityChanged.listen((List<ConnectivityResult> result){
      print(result);
      if (result.contains(ConnectivityResult.wifi)) {
        setState(() {
          _stateText = "网络连接的Wifi";
        });
      } else if (result.contains(ConnectivityResult.none)) {
        setState(() {
          _stateText = "没有网络连接";
        });
      } else {
        setState(() {
          _stateText = "检测中";
        });
      }
    });
  }
  1. dispose时,取消订阅
 void dispose() { 
    _subscription.cancel();
    super.dispose(); 
  }
  1. 完整代码案例
import 'dart:async';

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

class ConnectivityDemo extends StatefulWidget {
  const ConnectivityDemo({super.key});

  
  State<ConnectivityDemo> createState() => _ConnectivityDemoState();
}

class _ConnectivityDemoState extends State<ConnectivityDemo> {
  late StreamSubscription<List<ConnectivityResult>> _subscription;
  String _stateText = "检测网络中";

   void initState() { 
    super.initState(); 

    // 必须要有订阅,如果没有订阅的话,那下次再进来,就检测不到网络的变化了
    _subscription =  Connectivity().onConnectivityChanged.listen((List<ConnectivityResult> result){
      print(result);
      if (result.contains(ConnectivityResult.wifi)) {
        setState(() {
          _stateText = "网络连接的Wifi";
        });
      } else if (result.contains(ConnectivityResult.none)) {
        setState(() {
          _stateText = "没有网络连接";
        });
      } else {
        setState(() {
          _stateText = "检测中";
        });
      }
    });
  }

         
   void dispose() { 
    _subscription.cancel();
    super.dispose(); 
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("网络监听"),
      ),
      body: Center(child: Text(_stateText)),
    );
  }
}
  1. 效果图如下:
    在这里插入图片描述

http://www.niftyadmin.cn/n/5890046.html

相关文章

【Node.js】--- win11安装 Node.js

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Node.js】--- win11安装 Node.js 开发环…

Mistral OCR:重新定义文档理解的下一代OCR技术

在数字化浪潮中,非结构化数据(如PDF、图像、手写文档)的处理一直是企业的痛点。据统计,全球约90%的组织数据以文档形式存储,但传统OCR工具在复杂文档的理解上存在明显短板。2025年3月,法国AI独角兽Mistral AI推出了Mistral OCR——一款号称“全球最强”的光学字符识别API…

cfi网络安全 网络安全hcip

目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1&#xff0c;周期更新计时器 2&#xff0c;失效计时器 3&#xff0c;垃圾回收计时器 RIP的核心思…

芯片研发不需要PPT

在芯片研发的实验室里&#xff0c;工程师的屏幕上跳动着波形图&#xff0c;仿真软件吞吐着海量数据&#xff0c;验证工程师盯着亚稳态问题看到眼睛干涩&#xff0c;而某个角落的会议室里&#xff0c;一群人正对着80页的PPT争论字体格式——这荒诞的场景&#xff0c;像极了芯片设…

2025年 Apache SeaTunnel 2月份社区月报速递

SeaTunnel 社区月报 2025-02期 “ 各位热爱 Apache SeaTunnel 的小伙伴们&#xff0c;SeaTunnel 社区月报来啦&#xff01;” SeaTunnel 正在迅猛发展&#xff0c;这将有利于提升数据同步的高可扩展性、高性能及高可靠性。 SeaTunnel Monthly Merge Stars 感谢以下小伙伴上…

多用户网页在线聊天室(测试报告)

文章目录 多用户网页在线聊天室一&#xff0c;项目概括1.1 项目名称1.2 测试时间1.3 项目背景1.3 编写目的 二&#xff0c;测试计划2.1 测试环境与配置2.2 测试用例2.3实际执行用例2.3.1登录2.3.2聊天消息列表展示2.3.3聊天消息详情页展示2.3.4联系人页展示2.3.5信息的编辑与发…

UI自动化:seldom框架和Selenium

以下是关于 seldom框架 和 Selenium 的对比解析及结合使用的详细说明&#xff0c;帮助理解二者的定位、功能差异和应用场景&#xff1a; 1. 核心定位 工具定位Selenium浏览器自动化工具库&#xff0c;提供直接操控浏览器的底层API&#xff08;如点击、输入、获取元素等&#x…

单片机字符串换行符使用说明

在单片机中&#xff0c;字符串的换行通常使用 \r\n 来表示。\r 是回车&#xff08;Carriage Return&#xff09;&#xff0c;\n 是换行&#xff08;Line Feed&#xff09;。这两个字符的组合 \r\n 是 Windows 系统中的标准换行符。 例如&#xff0c;如果你有一个字符串 QIOTEV…