浙江网站建设推广/seo对网络推广的作用是什么?

浙江网站建设推广,seo对网络推广的作用是什么?,二手车网站开发,建设建网站Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听) 目录 Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听) 一、简单介绍 二、conne…

Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听)

目录

Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听)

一、简单介绍

二、connectivity_plus

1、connectivity_plus 实现断网和网络连接状态的事件监听原理

2、使用 connectivity_plus 的注意事项

三、安装 connectivity_plus

四、简单效果

五、简单案例实现

六、关键代码


一、简单介绍

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。

Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。Flutter 提供了一个丰富的预置小部件库,开发者可以根据自己的需求灵活地控制每个像素,从而创建自定义的、适应性强的设计,这些设计在任何屏幕上都能呈现出色的外观和感觉。

 

二、connectivity_plus

网址:connectivity_plus | Flutter package

connectivity_plus 是一个 Flutter 插件,用于监听设备的网络状态变化,包括 Wi-Fi、移动网络和无网络连接等状态。它通过提供一个简单的 API,允许开发者实时获取网络连接状态,并在状态发生变化时接收通知。通过订阅网络状态变化的流,开发者可以在应用中实现动态响应网络变化的功能,例如提示用户网络连接问题或调整应用的行为。

1、connectivity_plus 实现断网和网络连接状态的事件监听原理

connectivity_plus 插件通过监听设备的网络连接变化事件来实现网络状态的监听。它利用了底层平台(如 Android 和 iOS)提供的网络状态检测能力,并通过 Dart 的 Stream 提供实时更新。

  • Android:在 Android 上,connectivity_plus 使用 ConnectivityManager 来监听网络状态变化。当网络连接类型发生变化时(如从 Wi-Fi 切换到移动网络,或网络断开),系统会触发事件,插件捕获这些事件并通过 Dart 的 Stream 传递给 Flutter 应用。

  • iOS:在 iOS 上,插件通过 Network 框架的 NWPathMonitor 来监听网络路径的变化。当网络状态发生变化时,插件会收到通知,并将这些变化通过 Stream 传递给 Flutter 应用。

2、使用 connectivity_plus 的注意事项

  • 网络状态的不确定性
    • 即使插件报告了网络连接类型(如 Wi-Fi 或移动网络),也不能保证该网络一定可以访问互联网。例如,某些 Wi-Fi 网络可能需要用户登录才能访问互联网。

    • 开发者应始终准备处理网络请求的超时和错误,而不是完全依赖当前的网络状态。

  • 权限要求

    • 在某些平台上(如 Android 和 iOS),需要在应用的配置文件中声明网络状态监听权限。例如,在 Android 上需要在 AndroidManifest.xml 中添加 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  • 资源管理

    • 监听网络状态变化时,需要使用 StreamSubscription 订阅 onConnectivityChanged 流。在不再需要监听时,必须调用 cancel() 方法取消订阅,以避免资源泄漏。

  • 初始化检查

    • 在应用启动时,建议调用 checkConnectivity() 方法获取当前的网络状态,以确保应用在启动时就能正确处理网络状态。

  • 用户体验

    • 在某些场景下(如用户未授权网络访问权限),应用可能会出现短暂的无网络状态。开发者可以通过在开屏页提示用户授权网络访问,来改善用户体验。

通过合理使用 connectivity_plus 插件并注意上述事项,开发者可以在 Flutter 应用中有效地管理网络状态,提升应用的健壮性和用户体验。

三、安装 connectivity_plus

1、直接运行命令

使用 Flutter:flutter pub add connectivity_plus

2、或者在 pubspec.yaml 添加

dependencies:connectivity_plus: ^6.1.3

四、简单效果

五、简单案例实现

1、这里使用 Android Studio 进行创建 Flutter 项目

2、创建一个 application 的 Flutter 项目

3、项目结构如下

4、实现一个 NetworkStatusManager 类,监听网络断开和恢复的事件

5、在 main 测试 网络网络断开和恢复的事件监听功能

6、连接设备,运行简单效果如下

六、关键代码

1、NetworkStatusManager

import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';// 定义回调函数类型
// 网络状态变化时的回调函数,参数为当前的网络状态列表
typedef NetworkStatusCallback = void Function(List<ConnectivityResult> result);// 网络连接时的回调函数,无参数
typedef NetworkConnectedCallback = void Function();// 网络断开时的回调函数,无参数
typedef NetworkDisconnectedCallback = void Function();class NetworkStatusManager {// 使用 Connectivity 插件实例来监听网络状态变化final Connectivity _connectivity = Connectivity();// StreamSubscription 用于订阅网络状态变化事件late StreamSubscription<List<ConnectivityResult>> _connectivitySubscription;// 定义回调函数// 网络状态变化时的回调函数late NetworkStatusCallback _onNetworkChanged;// 网络连接时的回调函数late NetworkConnectedCallback _onNetworkConnected;// 网络断开时的回调函数late NetworkDisconnectedCallback _onNetworkDisconnected;// 初始化网络状态管理器// 参数:// - onNetworkChanged:网络状态变化时的回调函数// - onNetworkConnected:网络连接时的回调函数// - onNetworkDisconnected:网络断开时的回调函数void initNetworkStatusManager({required NetworkStatusCallback onNetworkChanged,required NetworkConnectedCallback onNetworkConnected,required NetworkDisconnectedCallback onNetworkDisconnected,}) {// 保存回调函数_onNetworkChanged = onNetworkChanged;_onNetworkConnected = onNetworkConnected;_onNetworkDisconnected = onNetworkDisconnected;// 监听网络状态变化// 使用 _connectivity.onConnectivityChanged 获取网络状态变化的流// 并订阅该流,当网络状态变化时调用 _handleConnectivityChange 方法_connectivitySubscription =_connectivity.onConnectivityChanged.listen(_handleConnectivityChange);}// 处理网络状态变化// 参数:// - result:当前的网络状态列表void _handleConnectivityChange(List<ConnectivityResult> result) {// 调用网络状态变化的回调函数_onNetworkChanged?.call(result);// 检查网络状态// 如果 result 中包含 ConnectivityResult.none,则认为网络断开if (result.contains(ConnectivityResult.none)) {// 调用网络断开的回调函数_onNetworkDisconnected?.call();} else {// 否则认为网络连接// 调用网络连接的回调函数_onNetworkConnected?.call();}}// 取消监听// 释放资源,取消对网络状态变化事件的订阅void dispose() {_connectivitySubscription.cancel();}
}

代码说明

  1. 回调函数类型定义

    • NetworkStatusCallback:当网络状态发生变化时调用,参数为当前的网络状态列表。

    • NetworkConnectedCallback:当网络连接时调用,无参数。

    • NetworkDisconnectedCallback:当网络断开时调用,无参数。

  2. 类成员变量

    • _connectivityConnectivity 插件实例,用于监听网络状态变化。

    • _connectivitySubscription:用于订阅网络状态变化事件的 StreamSubscription

    • _onNetworkChanged_onNetworkConnected_onNetworkDisconnected:分别用于处理网络状态变化、网络连接和网络断开的回调函数。

  3. initNetworkStatusManager 方法

    • 初始化网络状态管理器,接收三个回调函数作为参数。

    • 订阅网络状态变化事件,当网络状态变化时调用 _handleConnectivityChange 方法。

  4. _handleConnectivityChange 方法

    • 处理网络状态变化事件。

    • 调用 _onNetworkChanged 回调函数,通知调用者网络状态已变化。

    • 根据网络状态调用 _onNetworkConnected_onNetworkDisconnected 回调函数。

  5. dispose 方法

    • 取消对网络状态变化事件的订阅,释放资源。

2、main

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'network_status_manager.dart'; // 假设你将上述代码保存为 network_status_manager.dartvoid main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {// 创建一个 MaterialApp,这是 Flutter 应用的根组件return MaterialApp(title: 'Flutter Demo', // 应用的标题theme: ThemeData(// 定义应用的主题useMaterial3: true, // 使用 Material Design 3colorSchemeSeed: const Color(0x9f4376f8), // 主题颜色种子),home: const MyHomePage(title: 'Flutter Demo Home Page'), // 应用的首页);}
}class MyHomePage extends StatefulWidget {const MyHomePage({Key? key, required this.title}) : super(key: key);// 页面的标题final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {// 当前的网络状态列表,默认为 [ConnectivityResult.none],表示没有网络连接List<ConnectivityResult> _connectionStatus = [ConnectivityResult.none];// 网络状态管理器实例late NetworkStatusManager _networkStatusManager;@overridevoid initState() {super.initState();// 创建一个 NetworkStatusManager 实例_networkStatusManager = NetworkStatusManager();// 初始化网络状态管理器,并设置回调函数_networkStatusManager.initNetworkStatusManager(onNetworkChanged: (result) {// 当网络状态发生变化时,更新 _connectionStatus 并刷新 UIsetState(() {_connectionStatus = result;});// 打印网络状态变化print('Network status changed: $_connectionStatus');},onNetworkConnected: () {// 当网络连接时,打印日志print('Network connected');},onNetworkDisconnected: () {// 当网络断开时,打印日志print('Network disconnected');},);}@overridevoid dispose() {// 释放资源,取消对网络状态变化事件的订阅_networkStatusManager.dispose();super.dispose();}@overrideWidget build(BuildContext context) {// 构建页面的 UIreturn Scaffold(appBar: AppBar(// 页面的标题栏title: const Text('Network Status Example'),elevation: 4, // 标题栏的阴影高度),body: Column(// 页面的主体内容,使用 Column 布局mainAxisSize: MainAxisSize.min, // 设置 Column 的最小高度children: [const Spacer(flex: 2), // 添加一个占位符,用于间距Text(// 显示当前的网络状态标题'Active connection types:',style: Theme.of(context).textTheme.headlineMedium, // 使用主题的标题样式),const Spacer(), // 添加一个占位符,用于间距ListView(// 使用 ListView 显示当前的网络状态列表shrinkWrap: true, // 允许 ListView 自动调整大小children: _connectionStatus.map((status) {// 遍历 _connectionStatus 列表,生成每个网络状态的文本return Center(child: Text(status.toString(), // 显示网络状态的字符串表示style: Theme.of(context).textTheme.headlineSmall, // 使用主题的小标题样式),);}).toList(),),const Spacer(flex: 2), // 添加一个占位符,用于间距],),);}
}

代码说明

  1. MyApp

    • 这是 Flutter 应用的根组件,负责创建 MaterialApp,配置应用的主题和首页。

    • MaterialApp 是 Flutter 中用于创建 Material Design 风格应用的组件。

  2. MyHomePage

    • 这是一个 StatefulWidget,表示应用的首页。

    • 它包含一个 title 属性,用于显示页面的标题。

  3. _MyHomePageState

    • 这是 MyHomePage 的状态类,用于管理页面的状态和逻辑。

    • _connectionStatus:用于存储当前的网络状态列表。

    • _networkStatusManager:用于管理网络状态监听的实例。

  4. initState 方法

    • 在页面初始化时调用。

    • 创建 NetworkStatusManager 实例,并初始化网络状态管理器。

    • 设置三个回调函数:

      • onNetworkChanged:当网络状态发生变化时调用,更新 _connectionStatus 并刷新 UI。

      • onNetworkConnected:当网络连接时调用,打印日志。

      • onNetworkDisconnected:当网络断开时调用,打印日志。

  5. dispose 方法

    • 在页面销毁时调用。

    • 释放资源,取消对网络状态变化事件的订阅。

  6. build 方法

    • 构建页面的 UI。

    • 使用 Scaffold 创建一个带标题栏的页面。

    • 使用 Column 布局,显示当前的网络状态标题和网络状态列表。

    • 使用 ListView 遍历 _connectionStatus 列表,生成每个网络状态的文本。

测试结果

运行上述代码后,应用将正确监听网络状态的变化:

  • 当网络连接时,会调用 onNetworkConnected 回调函数,并打印 "Network connected"。

  • 当网络断开时,会调用 onNetworkDisconnected 回调函数,并打印 "Network disconnected"。

  • 同时,onNetworkChanged 回调函数会更新 _connectionStatus,并在 UI 中显示当前的网络连接类型。

希望这些注释和代码对你有帮助!如果有任何问题,请随时告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解

文章目录 HTTP 请求报文HttpRequest 类实现 Init() 函数实现 ParseRequestLine() 函数实现 ParseHeader() 函数实现 ParsePath() 函数实现 ParseBody() 函数实现 ParsePost() 函数实现 ParseFromUrlEncoded() 函数实现 UserVerify() 函数实现 Parse() 函数HttpRequest 代码Http…

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…

LLM之RAG理论(十四)| RAG 最佳实践

RAG 的过程很复杂&#xff0c;包含许多组成部分。我们如何确定现有的 RAG 方法及其最佳组合&#xff0c;以确定最佳 RAG 实践&#xff1f; 论文 《Searching for Best Practices in Retrieval-Augmented Generation》给出了回答。 本文将从以下三方面进行介绍&#xff1a; 首先…

利用knn算法实现手写数字分类

利用knn算法实现手写数字分类 1.作者介绍2.KNN算法2.1KNN&#xff08;K-Nearest Neighbors&#xff09;算法核心思想2.2KNN算法的工作流程2.3优缺点2.4 KNN算法图示介绍 3.实验过程3.1安装所需库3.2 MNIST数据集3.3 导入手写数字图像进行分类3.4 完整代码3.5 实验结果 1.作者介…

好吧好吧,看一下达梦的模式与用户的关系

单凭个人感觉&#xff0c;模式在达梦中属于逻辑对象合集&#xff0c;回头再看资料 应该是一个用户可以对应多个模式 问题来了&#xff0c;模式的ID和用户的ID一样吗&#xff1f; 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…

python socket模块学习记录

python黑马程序员 通过python内置socket模块&#xff0c;在电脑本地开发一个服务器&#xff0c;一个客户端&#xff0c;连接后进行连续的聊天。服务器和客户端均可输入exit&#xff0c;主动退出连接。 服务器开发.py import socket# 创建Socket对象 socket_server socket.s…

chap1:统计学习方法概论

第1章 统计学习方法概论 文章目录 第1章 统计学习方法概论前言章节目录导读 实现统计学习方法的步骤统计学习分类基本分类监督学习无监督学习强化学习 按模型分类概率模型与非概率模型 按算法分类按技巧分类贝叶斯学习核方法 统计学习方法三要素模型模型是什么? 策略损失函数与…

爬虫案例-爬取某站视频

文章目录 1、下载FFmpeg2、爬取代码3、效果图 1、下载FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 点击下载: ffmpeg 安装并配置 FFmpeg 步骤&#xff1a; 1.下载 FFmpeg&#xff1a; 2.访问 FFmpeg 官网。 3.选择 Wi…

车载以太网网络测试-22【传输层-DOIP协议-5】

目录 1 摘要2 DoIP时间参数2.1 ISO 13400定义的时间参数2.2 参数示例 3 DoIP节点内部状态机4 UDSonIP概述5 总结 1 摘要 本文继续对DOIP协议进行介绍&#xff0c;主要是DOIP相关的时间参数、时间参数定义以及流程示例。推荐大家对上文专题进行回顾&#xff0c;有利于系统性学习…

(论文总结)思维链激发LLM推理能力

研究背景&动机 背景:扩大模型规模已被证实具有提升模型性能和模型效率的功效&#xff0c;但是LLM对于完成推理、算术任务仍有较大不足。 动机:从之前的应用和研究中得知&#xff0c;可以用生成自然语言解释、使用神经符号等形式语言的方法来提高大模型的算术推理能力&…

anythingLLM结合searXNG实现联网搜索

1、docker-compose 部署searXNG GitHub - searxng/searxng-docker: The docker-compose files for setting up a SearXNG instance with docker. cd /usr/local git clone https://github.com/searxng/searxng-docker.git cd searxng-docker 2、修改 .env文件 # By default…

ArkUI-List组件

列表是一个复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;使得列表内容超出其范围的时候&#xff0c;就会自动变为可以滚动。列表适合用来展现同类数据类型。 List的基本使用方法 List组件的构建声明是这个样子的 List(value?: {space?:number | string, initial…

Ubuntu实时读取音乐软件的音频流

文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的&#xff0c;我需要在Ubuntu中&#xff0c;实时读取正在播放音乐的音频流&#xff0c;然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现&#xff0c;好处是可以直接利用Helvum…

【TI MSPM0】Timer学习

一、计数器 加法计数器&#xff1a;每进入一个脉冲&#xff0c;就加一减法计算器&#xff1a;每进入一个脉冲&#xff0c;就减一 当计数器减到0&#xff0c;触发中断 1.最短计时时间 当时钟周期为1khz时&#xff0c;最短计时时间为1ms&#xff0c;最长计时时间为65535ms 当时…

从WebRTC到嵌入式:EasyRTC如何借助大模型提升音视频通信体验

随着人工智能技术的快速发展&#xff0c;WebRTC与大模型的结合正在为音视频通信领域带来革命性的变革。WebRTC作为一种开源实时通信技术&#xff0c;以其低延迟、跨平台兼容性和强大的音视频处理能力&#xff0c;成为智能硬件和物联网设备的重要技术支撑。 而EasyRTC作为基于W…

自由学习记录(45)

顶点片元着色器&#xff08;important&#xff09; 1.需要在Pass渲染通道中编写着色器逻辑 2.可以使用cG或HLSL两种shader语言去编写Shader逻辑 3.代码量较多&#xff0c;灵活性较强&#xff0c;性能消耗更可控&#xff0c;可以实现更多渲染细节 4.适用于光照处理较少&#xf…

Quartus + VScode 实现模块化流水灯

文章目录 一、通过VScode编写Verilog代码二、模块化编程三、代码示例 一、通过VScode编写Verilog代码 1、下载Vscode 2、下载相关插件 搜索Verilog就会弹出有如图所示的插件&#xff0c;下载并安装 3、创建Quartus项目 4、创建完成后点击Tools&#xff0c;选择Options 然后在…

tryhackme——The Lay of the Land

文章目录 一、网络基础设施1.1 内网1.2 DMZ区1.3 网络枚举&#xff08;Network Enumeration&#xff09; 二、域环境三、用户和组管理四、安全解决方案4.1 基于主机的安全解决方案4.1.1 防病毒软件4.1.2 Microsoft Windows Defender4.1.3 主机防火墙4.1.4 安全事件记录与监控4.…

STM32---FreeRTOS消息队列

一、简介 1、队列简介&#xff1a; 队列&#xff1a;是任务到任务&#xff0c;任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09;。 FreeRTOS基于队列&#xff0c;实现了多种功能&#xff0c;其中包括队列集、互斥信号量、计数型信号量、二值信号量…

2025年了,5G还有三个新变化

最近舆论开始讨论5G为什么不火了&#xff1f;5G是不是停滞发展了。 实际上&#xff0c;5G不仅在发展&#xff0c;还迎来了它的升级版5G-A。 在今年西班牙举行的世界移动通信大会上&#xff0c;5G-A就是焦点之一。 被誉为全球通信领域风向标的MWC&#xff0c;汇聚了华为、中兴通…