当前位置: 首页 > news >正文

记录一下flutter项目自己封窗的弹窗

在评委项目开发中我使用到的弹窗dialog与modal sheet底部弹出组件,我对其进行了基础的封装,以适用于本项目,代码如下:
 

class JudgeDialog {// 内容边距static EdgeInsetsGeometry _contentPadding(String? content) {return content != null? EdgeInsets.only(left: 30.rpx,right: 30.rpx,top: 32.rpx,bottom: 26.rpx,): EdgeInsets.all(0.rpx);}// 内容样式static TextStyle _contentStyle() {return TextStyle(fontSize: 31.rpx,height: 1.5,fontFamily: AppTextFamily.appleMiddle,color: AppColors.t3,);}// X关闭按钮static Widget closeBtn(BuildContext context, {Function? closeCall,}) {return Positioned(right: 36.rpx,top: 30.rpx,child: SizedBox(height: 36.rpx,width: 36.rpx,child: IconButton(onPressed: () {if (closeCall != null) {closeCall();} else {Navigator.pop(context);}},padding: EdgeInsets.all(0.rpx),icon: Transform.rotate(angle: pi / 4,child: Icon(AppIcon.plusAdd,size: 36.rpx,color: AppColors.t9,),),),),);}static Future<bool?> tipDialog(BuildContext context, {bool? dismissible = false, // 背景与滑动是否可关bool? close = false, // 是否有X的关闭Function? closeCall, // 关闭X时调用Color? bgColor, // 背景色double? opacity,String? title,String? content,Widget? contentChild,EdgeInsetsGeometry? contentPadding,TextAlign? textAlign,double? btnWidth,String? confirmText = '我知道了',Function? confirm,String? cancelText = '取消',Function? cancel,}) async {return showDialog(context: context,barrierDismissible: dismissible!,barrierColor: bgColor ?? Colors.black.withOpacity(opacity ?? 0.55),builder: (dialogContext) {return WillPopScope(onWillPop: () async {return dismissible;},child: Container(width: HYSizeFit.screenWidth,padding: EdgeInsets.only(left: HYSizeFit.screenWidth * 0.1,right: HYSizeFit.screenWidth * 0.1,bottom: HYSizeFit.screenHeight * 0.1,),child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: [AlertDialog(insetPadding: EdgeInsets.all(0.rpx),backgroundColor: Colors.white,titlePadding: EdgeInsets.all(0.rpx),buttonPadding: EdgeInsets.all(0.rpx),alignment: Alignment.center,elevation: 0.rpx,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.rpx), // 设置圆角大小),title: Stack(children: [Container(alignment: Alignment.center,padding: EdgeInsets.only(top: 52.rpx),child: AppTextTitle.titleH34(title ?? '提示',fontFamily: AppTextFamily.appleBold,),),if (close!)closeBtn(dialogContext,closeCall: closeCall,),],),contentPadding: contentPadding ?? _contentPadding(content),contentTextStyle: _contentStyle(),content: content != null? Text(content, textAlign: textAlign ?? TextAlign.center): contentChild ?? const SizedBox.shrink(),actionsAlignment: MainAxisAlignment.spaceAround,actionsPadding: EdgeInsets.only(top: content != null ? 26.rpx : 0.rpx,left: 30.rpx,right: 30.rpx,bottom: 52.rpx,),actions: [if (cancel != null)GlobalButton.customButton('$cancelText',bgColor1: AppColors.page,bgColor2: AppColors.page,color: AppColors.t3,width: btnWidth ?? 210.rpx,height: 70.rpx,radius: 35.rpx,size: 30.rpx,ripple: false,onPressed: () => cancel(),),GlobalButton.customButton('$confirmText',bgColor1: AppColors.primary,bgColor2: AppColors.primary,width: btnWidth ?? 210.rpx,height: 70.rpx,radius: 35.rpx,size: 30.rpx,ripple: false,onPressed: () {if (confirm == null) {Navigator.pop(context, true);} else {confirm();}},),],),],),),);},);}// 自定义弹窗static Future<bool?> markDialog(BuildContext context, {bool? dismissible = false,double? opacity,Color? bgColor, // 背景色required Widget child,}) async {return showDialog(context: context,barrierDismissible: dismissible!,barrierColor: bgColor ?? Colors.black.withOpacity(opacity ?? 0.55),builder: (BuildContext context) {return WillPopScope(onWillPop: () async {return dismissible;},child: SizedBox(width: HYSizeFit.screenWidth,height: double.maxFinite,child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [child],),),);},);}/// 底部弹窗static Future<bool?> modalSheet(BuildContext context, {bool? dismissible = true,double? opacity,Color? barrierColor, // 弹窗背景色Color? bgColor, // 弹出背景double? elevation,BoxConstraints? constraints,required Widget child,}) async {return showModalBottomSheet(context: context,elevation: elevation,constraints: constraints,backgroundColor: bgColor ?? Colors.transparent,barrierColor: barrierColor ?? Colors.black.withOpacity(opacity ?? 0.6),builder: (BuildContext context) {return child;},);}
}

在此基础上还增加了底部支付选择的弹窗:
 

// 支付方式
enum PayMethodType {/// 支付宝alipay,/// 评贝pingBei
}/// 全局支付方式选择
class AppPayModalSheet extends StatefulWidget {const AppPayModalSheet({super.key,required this.title,this.amount,this.beiAmount,this.balance,this.enough,this.unit,required this.methods,this.onPressed,});final String title; // 弹窗标题final String? amount; // 金额final String? beiAmount; // 评贝金额final String? balance; // 本人评贝余额final bool? enough; // 评贝余额是否不足final String? unit; // 单位final Set<PayMethodType> methods; // 支付方式final ValueChanged? onPressed;@overrideState<AppPayModalSheet> createState() => _AppPayModalSheetState();
}class _AppPayModalSheetState extends State<AppPayModalSheet> {late Set<PayMethodType> methods;late PayMethodType group;@overridevoid initState() {super.initState();methods = widget.methods;group = methods.first;setState(() {});}@overrideWidget build(BuildContext context) {return IntrinsicHeight(child: Container(width: HYSizeFit.screenWidth,padding: EdgeInsets.only(bottom: HYSizeFit.bottomHeight + 10.rpx),decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.only(topLeft: Radius.circular(30.rpx),topRight: Radius.circular(30.rpx),),),child: Column(mainAxisAlignment: MainAxisAlignment.end,mainAxisSize: MainAxisSize.min,children: [PayModalTitle(title: widget.title),Column(mainAxisSize: MainAxisSize.min,children: methods.map((e) {return PayByModalMethod(value: e,group: group,balance: widget.balance,enough: widget.enough,changed: (val) {group = val;if (mounted) setState(() {});},);}).toList(),),PayBottomBtn(leftChild: group == PayMethodType.pingBei ? beiBy() : priceBy(),onPressed: () {widget.onPressed!(group);},),],),),);}// 金额Widget priceBy() {return RichText(text: TextSpan(text: '¥',style: AppTextTitle.customStyle(height: 1.2, size: 32.rpx),children: [TextSpan(text: '${widget.amount}',style: AppTextTitle.customStyle(height: 1.2,size: 40.rpx,fontFamily: AppTextFamily.pingFangHeavy,),),],),);}// 评贝Widget beiBy() {return RichText(text: TextSpan(text: '${widget.beiAmount}',style: AppTextTitle.customStyle(height: 1.2,size: 40.rpx,fontFamily: AppTextFamily.pingFangHeavy,),children: [TextSpan(text: widget.unit ?? '评贝',style: AppTextTitle.customStyle(height: 1.2, size: 32.rpx, letterSpacing: -2.rpx),),],),);}
}/// 支付弹窗标题
class PayModalTitle extends StatelessWidget {const PayModalTitle({super.key, required this.title});final String title;@overrideWidget build(BuildContext context) {return Container(width: double.maxFinite,padding: EdgeInsets.only(top: 42.rpx, bottom: 50.rpx),alignment: Alignment.center,decoration: BoxDecoration(borderRadius: BorderRadius.only(topLeft: Radius.circular(30.rpx),topRight: Radius.circular(30.rpx),),gradient: AppColors.multicolor(['#FFEFCD', '#FFEFCD', '#FFFFFF']),),child: Text(title,style: AppTextTitle.customStyle(height: 1.2,size: 38.rpx,color: ColorUtil.stringColor('#A07313'),fontFamily: AppTextFamily.appleBold,),),);}
}/// 支付底部按钮区
class PayBottomBtn extends StatelessWidget {const PayBottomBtn({super.key,this.leftChild,this.mainAxisAlignment,this.btnText,this.onPressed,});final Widget? leftChild;final MainAxisAlignment? mainAxisAlignment;final String? btnText;final VoidCallback? onPressed;@overrideWidget build(BuildContext context) {return Container(height: 112.rpx,width: double.maxFinite,padding: EdgeInsets.only(left: 56.rpx, right: 30.rpx),margin: EdgeInsets.only(top: 30.rpx),decoration: BoxDecoration(border: Border(top: BorderSide(width: 1.rpx, color: AppColors.line),),),child: Row(mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.spaceBetween,crossAxisAlignment: CrossAxisAlignment.center,children: [leftChild ?? const SizedBox.shrink(),GlobalButton.elevatedButton(btnText ?? '支付',width: 216.rpx,height: 80.rpx,size: 32.rpx,ripple: false,radius: 6.rpx,bgColor: ColorUtil.stringColor('#EDA830'),onPressed: onPressed,),],),);}
}/// 支付方法选项
class PayByModalMethod extends StatelessWidget {const PayByModalMethod({super.key,this.balance,this.enough,this.value,this.group,this.changed,});final PayMethodType? value;final PayMethodType? group;final String? balance; // 本人评贝余额final bool? enough; // 评贝余额是否不足final ValueChanged? changed;@overrideWidget build(BuildContext context) {bool isEnough = value == PayMethodType.pingBei && enough != null && enough!;String payText() {switch (value) {case PayMethodType.alipay:return AdaptStr.strHansen();case PayMethodType.pingBei:return '评贝${AdaptStr.sef()}';default:return '';}}return Container(width: HYSizeFit.screenWidth,height: 100.rpx,padding: EdgeInsets.only(left: 46.rpx, right: 40.rpx),child: InkWell(onTap: () {if (!isEnough) {changed!(value);}},child: Row(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [Row(children: [payIcon(),AppTextTitle.titleH2(payText(), letterSpacing: -2.rpx),if (value == PayMethodType.pingBei && balance != null)AppTextTitle.titleH2('(余额:$balance评贝)',letterSpacing: -1.5.rpx,),],),isEnough? AppTextTitle.titleH3('评贝余额不足', color: AppColors.primary): SizedBox(width: 100.rpx,child: value == group? Icon(JudgesIcon.radioYes,size: 34.rpx,color: ColorUtil.stringColor('#4FCD3E'),): Icon(JudgesIcon.radioNot,size: 34.rpx,color: ColorUtil.stringColor('#CCCCCC'),),),],),),);}// 支付方式iconWidget payIcon() {if (value == PayMethodType.alipay) {return Padding(padding: EdgeInsets.only(right: 20.rpx),child: Icon(JudgesIcon.payAli,size: 48.rpx,color: ColorUtil.stringColor('00a0ea'),),);} else {return Padding(padding: EdgeInsets.only(right: 20.rpx),child: Image.asset('${AppGlobal.imgUrl}beiby.png',height: 48.rpx,fit: BoxFit.fitHeight,),);}}
}

相关文章:

记录一下flutter项目自己封窗的弹窗

在评委项目开发中我使用到的弹窗dialog与modal sheet底部弹出组件&#xff0c;我对其进行了基础的封装&#xff0c;以适用于本项目&#xff0c;代码如下&#xff1a; class JudgeDialog {// 内容边距static EdgeInsetsGeometry _contentPadding(String? content) {return c…...

计算机网络基础概念

网络通信的本质就是进程间通信。我们日常使用的聊天软件、在线视频软件等&#xff0c;事实上都是本机客户端进程与远地服务端进程之间进行网络通信所实现的。我们与朋友进行远程聊天&#xff0c;本质上是从本地客户端将聊天内容发送给服务端&#xff0c;再由服务端转发给目标客…...

【原创】ubuntu22.04下载编译AOSP 15

repo init -u http://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b master source build/envsetup.sh lunch aosp_cf_x86_64_phone-trunk_staging-userdebug find ./ -name “index.lock” -exec rm -f {} ; find ./ -name “index.lock” -exec rm -i {} ;…...

鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局

华为在5月19日发布会上推出的两款鸿蒙电脑新品——华为MateBook Pro和HUAWEI MateBook Fold 非凡大师&#xff0c;标志着其在PC领域的深度布局和技术突破。结合发布会信息和行业背景&#xff0c;以下为分析及影响预测&#xff1a; 一、产品核心亮点及创新 华为MateBook Pro&…...

数据要素如何重构人力资本升级

一、数字经济时代 在传统工厂车间&#xff0c;老师傅的经验智慧曾是企业最宝贵的资产。而在现代的数字化办公室&#xff0c;每天产生的千万条数据流正在重塑企业创新规则。这个变革的核心密码锁定在两个关键维度&#xff1a;人力资本结构的质变与创新资源的智配。 数据要素与…...

【爬虫】12306自动化购票

上文&#xff1a; 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票&#xff0c;只写到预定票&#xff0c;没有写完登陆&#xff0c; 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单&#xff0c;复制粘贴&#xff1a; 还有很多写法&#xff1a; 官网地址&#…...

保密行业工作沟通安全:吱吱软件的“四重防泄露”设计

“工作沟通安全威胁是指在金融、科技、医疗等保密行业中&#xff0c;错发、泄露、窃取一条消息或者一份文件&#xff0c;都有可能引发数据安全灾难性失控。以往的即时通讯软件仅依赖单一的加密手段&#xff0c;无法满足保密行业从发送、传输到接受全链路加密的更高规格的数据安…...

2001-2023年上市公司管理讨论与分析文本数据(MDA文本数据)

2001-2023年上市公司管理讨论与分析文本数据&#xff08;MD&A文本数据&#xff09; 1、时间&#xff1a;2001-2023年 2、来源&#xff1a;上市公司年报 3、格式&#xff1a;txt 4、样本量&#xff1a;6W 5、说明&#xff1a;“管理层讨论与分析”&#xff08;MANAGEME…...

Unity3D仿星露谷物语开发46之种植/砍伐橡树

1、目标 种植一棵橡树&#xff0c;从种子变成大树。 然后可以使用斧头砍伐橡树。 2、删除totalGrowthDays字段 修改growthDays的含义&#xff0c;定义每个值为到达当前阶段的累加天数。此时最后一个阶段就是totalGrowthDays的含义。所以就可以删除totalGrowthDays字段。 &…...

9-社区动态(Stack布局)

涉及知识点: stack布局 video组件 3.组件状态控制&#xff1a; State、Prop以及Link装饰器 组件状态控制&#xff1a;Observed&ObjectLink装饰器 课时: 2 1 任务 1.1 需求 完成社区动态功能&#xff0c;社区动态显示用户发布的跟游戏相关的短视频&#xff0c;自动循环…...

如何使用MATLAB NLP工具箱进行文本聚类

文章目录 前言一、核心流程与代码实现二、高级聚类技术三、评估聚类质量四、实战案例&#xff1a;新闻聚类五、优化技巧与注意事项 前言 在 MATLAB 中使用 NLP 工具箱进行文本聚类主要分为数据预处理、特征提取、相似度计算、聚类算法应用和结果分析五个核心步骤。以下是详细教…...

deepseek梳理java高级开发工程师es面试题

Elasticsearch 面试题及答案&#xff08;高级 Java 开发工程师版&#xff09; 基础概念 1. 解释 Elasticsearch 中的倒排索引是什么&#xff1f;为什么它比传统数据库更适合全文搜索&#xff1f; 答案&#xff1a; 倒排索引是一种将文档中的词项(token)映射到包含该词项的文…...

查看mysql配置文件my.cnf的位置

3.删除mysql相关文件 想要完全卸载mysql&#xff0c;不仅要卸载应用&#xff0c;配置文件及相关文件也需要一一清除&#xff0c;还原环境配置&#xff0c;减少一些麻烦。 sudo rm -rf /usr/local/mysql sudo rm -rf /etc/my.cnf sudo rm -rf /var/db/mysql sudo rm -rf /var/…...

PyTorch进阶实战指南:01自定义神经网络组件开发

PyTorch进阶实战指南&#xff1a;01自定义神经网络组件开发 前言 在深度学习领域&#xff0c;PyTorch凭借其动态计算图和灵活的模块化设计&#xff0c;已成为学术研究和技术落地的首选框架之一。本文聚焦于神经网络组件的自定义开发&#xff0c;旨在帮助开发者突破现成模型的限…...

【MySQL】04.数据类型

首先我们来看一下数据类型分类&#xff1a; 我们接下来对红色标识的进行介绍&#xff0c;其他的自行了解即可。 1. 数值类型 1.1 bit 我们以bit为例来介绍整型。 mysql> create table test_bit(-> sex bit(1)-> ); mysql> desc test_bit; -----------------…...

MCP专题 | 探索MCP服务器世界:增强AI能力的精选推荐

在人工智能快速发展的今天&#xff0c;模型上下文协议&#xff08;MCP&#xff0c;Model Context Protocol&#xff09;已成为一项重要的技术标准&#xff0c;它使AI模型能够安全地与外部资源交互。MCP服务器作为AI与工具、数据库和API之间的桥梁&#xff0c;极大地扩展了AI的功…...

深入解析OrientDB:多模型数据库的技术优势与实际应用

OrientDB 是一款开源的多模型 NoSQL 数据库&#xff0c;融合了文档数据库、图数据库和对象数据库的特性。它不仅支持灵活的数据建模&#xff0c;还提供了高性能的查询能力&#xff0c;适用于社交网络、物联网、内容管理等场景。本文详细探讨 OrientDB 的核心特性、应用场景&…...

芯片分享之AD976性能介绍

产品特征&#xff1a; D976和AD976A均为高速、低功耗、16位模数转换器(ADC)&#xff0c;采用5 V单电源供电。AD976A的吞吐速率为200 ksps&#xff0c;而AD976的吞吐速率为100 ksps。各器件均内置一个逐次逼近型开关电容ADC、一个2.5 V内部基准电压源和一个高速并行接口。最大功…...

Flutter - 集成三方库:数据库(sqflite)

数据库 $ flutter pub add sqlite $ flutter pub get$ flutter run运行失败&#xff0c;看是编译报错,打开Xcode工程 ⌘ B 编译 对比 GSYGithubAppFlutter 的Xcode工程Build Phases > [CP] Embed Pods Frameworks 有sqfite.framework。本地默认的Flutter工程默认未生成Pod…...

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(三)用yolov5-face算法实现人脸检测

环境直接使用第一篇中安装好的环境即可 先clone yolov5-face项目 git clone https://github.com/deepcam-cn/yolov5-face.git 并下载预训练权重文件yolov5n-face.pt 网盘链接: https://pan.baidu.com/s/1xsYns6cyB84aPDgXB7sNDQ 提取码: lw9j &#xff08;野火官方提供&am…...

基于matlabcd7.x的无网格近似方法

无网格近似方法&#xff08;Meshless Methods&#xff09;是一类数值计算方法&#xff0c;用于解决偏微分方程&#xff08;PDEs&#xff09;问题&#xff0c;特别是在几何形状复杂或需要动态网格更新的场景中。与传统的有限元方法&#xff08;FEM&#xff09;相比&#xff0c;无…...

塔式服务器都有哪些重要功能?

塔式服务器作为一种拥有着独特立式设计的服务器&#xff0c;能够帮助企业节省一定的放置空间&#xff0c;提供一系列的功能和优势&#xff0c;可以运用在多种应用场景当中&#xff0c;下面将探讨一下塔式服务器的主要功能都有哪些&#xff1f; 塔式服务器可以支持基本的应用程序…...

【基于SpringBoot的图书购买系统】深度讲解 分页查询用户信息,分析前后端交互的原理

引言&#x1f4da; 在企业级应用开发中&#xff0c;用户管理系统是几乎所有后台管理系统的核心模块之一。它不仅需要实现用户数据的增删改查&#xff0c;还需要考虑数据分页展示、状态管理、前后端交互效率等问题。本文将以一个实际的用户管理系统为例&#xff0c;详细讲解基于…...

机器学习算法-聚类K-Means

先来看看K-Means算法的核心流程吧 下面我们通过一个简单聚类来介绍K-Means算法迭代过程 如图(a)所示&#xff1a;表示初始化数据集。 如图(b)所示&#xff1a;假设K2&#xff0c;随机选择两个点作为类别质心&#xff0c;分别为图中的红色和蓝色质心。 如图©所示&#xff…...

初识Linux 进程:进程创建、终止与进程地址空间

目录 0.写在前面 1.进程创建 fork()&#xff1a; exec()&#xff1a; 2.进程地址空间 3.进程终止 正常终止&#xff08;主动退出&#xff09; 异常终止&#xff08;被动终止&#xff09; 0.写在前面 本文将对Linux环境下的进程&#xff1a;包括进程创建、终止与进程等待…...

2025年PMP 学习二十二 15章 项目绩效域

2025年PMP 学习二十二 15章 项目绩效域 文章目录 2025年PMP 学习二十二 15章 项目绩效域项目绩效域1.项目绩效域2.项目持续效域3.项目管理中的干系人管理 1.干系人持续效域促进干系人参与的步骤&#xff1a; 2 团队持续效域1 团队持续效域及项目团队人员有关系的活动和职能&…...

顶级流媒体服务商 Spotify 2025.04 故障复盘报告,吃他人的堑长自己的智

2025 年 4 月 16 日&#xff0c;Spotify 经历了一次影响全球用户的中断。以下就是发生了什么以及我们将如何解决它。 背景 我们使用 Envoy Proxy 作为我们的网络外围系统。外围是我们的软件接收用户&#xff08;您&#xff01;&#xff09;网络流量的第一部分。然后&#xff…...

服装收银系统哪个好?服装店进销存管理软件全面评测

在服装批发零售行业&#xff0c;选择一款合适的收银系统和进销存管理软件至关重要。好的系统不仅能提高工作效率&#xff0c;还能帮助商家精准掌握库存、优化销售策略。 本文将全面分析服装收银系统的选择标准&#xff0c;并重点介绍秦丝进销存这一专业解决方案。 一、服装收…...

Java程序员从0学AI(二)

一、前言 在上一篇文章中&#xff0c;我们初步认识了 AI 领域的核心基础概念&#xff0c;如大语言模型&#xff08;LLM&#xff09;的参数量特征、提示词&#xff08;Prompt&#xff09;对交互效果的关键作用、文本处理单元 Token 的独特定义&#xff0c;以及通过向量转换实现…...

进阶知识:无参的函数装饰器之深入理解@wraps()

进阶知识&#xff1a;无参的函数装饰器之深入理解wraps(func) 一、wraps(func)的本质解析 1.1 核心作用 wraps(func)是functools模块提供的装饰器工具&#xff0c;用于保留被装饰函数的元信息。它通过将被装饰函数的名称&#xff08;__name__&#xff09;、文档字符串&#…...

《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》

目录 一. sizeof 和 strlen 的对比 1.1 sizeof 1.2 strlen 1.3 对比表格 二. 数组和指针笔试题解析 2.1 一维数组 2.2 字符数组 2.2.1 代码练习一 2.2.2 代码练习二 2.2.3 代码练习三 2.2.4 代码练习四 2.2.5 代码练习五 2.2.6 代码练习六 2.3 二维数组 …...

C++ 初阶 | 类和对象易错知识点(上)

目录 0.引言 1.访问限定符 2.域 3.类的实例化和声明 4.this指针 5.构造函数&#xff08;自动执行&#xff09; 6.拷贝构造 7.运算符重载 8.日期类的实现 9.总结 0.引言 今天&#xff0c;小邓儿和大家分享一下&#xff0c;C在类和对象中的易错知识点&#x1f92d;&am…...

USB转TTL

USB转TTL模块是实现计算机USB接口与TTL电平串口设备&#xff08;如单片机、嵌入式系统&#xff09;通信的核心组件&#xff0c;其原理涉及协议转换和电平适配两大关键技术 一、核心功能与应用场景 功能&#xff1a;将计算机的USB信号&#xff08;高速差分信号、USB协议&#…...

汽车生产中的测试台连接 – EtherCAT 转CANopen高效的网关通信

使用 EtherCAT 和 CANopen协议&#xff0c;实现对汽车零部件的高效生产线末端测试 某电动机、电桥和变速箱制造商之一&#xff0c;正在其生产线上使用ETHERCAT转canopen网关WL-ECAT-COP的解决方案。集成到测试线中的下线测试必须映射众多待测设备的测试应用。该制造商已指定 Et…...

汽车充电过程中--各个电压的关系(DeepSeek)

在电动汽车的充电过程中&#xff0c;电池的充电机制涉及多个电压参数的协调控制&#xff0c;以下从原理到实际应用逐步分析&#xff1a; 1. 充电基础原理 电动汽车电池&#xff08;通常为锂离子电池组&#xff09;的充电本质是通过外部电源向电池注入电能&#xff0c;使锂离子…...

基于HTML的Word风格编辑器实现:从零打造功能完备的富文本编辑器

引言 在Web开发中&#xff0c;实现一个功能完备的富文本编辑器是一个常见需求。本文将基于HTML5和JavaScript&#xff0c;结合第三方库&#xff0c;打造一个具有Word风格界面的富文本编辑器&#xff0c;支持格式设置、图片插入、表格创建、文件导入导出等核心功能。 完整代码…...

亚远景-汽车软件开发的“升级之路”:ASPICE各等级说明

ASPICE&#xff08;Automotive SPICE&#xff09;将汽车软件开发过程的成熟度划分为六个等级&#xff0c;从0级到5级&#xff0c;每个等级代表了组织在软件开发过程中的不同能力水平。以下是各等级的详细说明&#xff1a; 等级0&#xff1a;不完整&#xff08;Incomplete&#…...

Unity Display 1 No cameras rendering

一个相机不能同时输出到屏幕和RenderTexture​​。 Output Texture&#xff0c;要么是 None &#xff08;屏幕&#xff09;&#xff0c;要么是RenderTexture。 如果此时相机已经输出到RenderTexture&#xff0c;场景中又没有别的相机在渲染&#xff0c;屏幕将变黑并显示No cam…...

Python Selenium 使用指南

Selenium 是一个用于自动化 Web 浏览器交互的强大工具&#xff0c;常用于网页测试、数据抓取和自动化任务。以下是 Python 中 Selenium 的详细使用说明。 安装 Selenium 首先需要安装 Selenium 库和浏览器驱动&#xff1a; pip install selenium 然后下载对应浏览器的驱动&…...

Cribl 对数据源进行过滤-01

先说一个项目中实际的例子: Cribl 利用filter expression 来过滤 data, 举个例子: source1: sourcerouter=A, source 2: sourcerouter=B, 这个时候,可以要把他们合并起来: sourcerouter=A || sourcerouter=B 来进行过滤想要的数据。 最后可以使用一个pipeline 来对数据进行…...

python 通过 pymysql 获取 select count(*) xxx 的数量

在使用 pymysql 库来获取 SELECT COUNT(*) 语句的结果时&#xff0c;你可以通过以下步骤实现&#xff1a; 安装 pymysql&#xff1a;如果你还没有安装 pymysql&#xff0c;可以通过 pip 安装它。 pip install pymysql连接到数据库&#xff1a;使用 pymysql.connect() 方法连接…...

定时任务延迟任务

二者的区别&#xff1a; 定时任务&#xff1a;有固定周期的&#xff0c;有明确的触发时间。 延迟任务&#xff1a;没有固定的开始时间&#xff0c;它常常是由一个事件触发的&#xff0c;而在这个事件触发之后的一段时间内触发另一个事件&#xff0c;任务可以立即执行&#xff0…...

【动手学深度学习】1.1~1.2 机器学习及其关键组件

目录 一、引言1.1. 日常生活中的机器学习1.2. 机器学习中的关键组件1&#xff09;数据2&#xff09;模型3&#xff09;目标函数4&#xff09;优化算法 一、引言 1.1. 日常生活中的机器学习 应用场景&#xff1a; 以智能语音助手&#xff08;如Siri、Alexa&#xff09;的唤醒…...

LLaVA-MoD:基于MoE结构和蒸馏训练方法,训练轻量化多模态大模型!!

摘要&#xff1a;我们介绍了LLaVA-MoD&#xff0c;这是一个旨在高效训练小型多模态语言模型&#xff08;s-MLLM&#xff09;的创新框架&#xff0c;通过从大规模多模态语言模型&#xff08;l-MLLM&#xff09;中提取知识来实现。我们的方法解决了多模态语言模型&#xff08;MLL…...

YOLOv8 的双 Backbone 架构:解锁目标检测新性能

一、开篇&#xff1a;为何踏上双 Backbone 探索之路 在目标检测的领域中&#xff0c;YOLOv8 凭借其高效与精准脱颖而出&#xff0c;成为众多开发者和研究者的得力工具。然而&#xff0c;传统的单 Backbone 架构&#xff0c;尽管已经在诸多场景中表现出色&#xff0c;但仍存在一…...

SSRF(服务器端请求伪造)基本原理靶场实现

1、漏洞原理 攻击者通过构造恶意请求&#xff0c;诱使服务器向内部系统或第三方服务发起非预期的网络请求。其核心在于 服务器信任了不可信的用户输入&#xff0c;并基于该输入发起网络操作。 2、攻击场景与利用方式 1. 基础利用 攻击类型示例Payload目标读取本地文件file://…...

自动化测试脚本点击运行后,打开Chrome很久??

亲爱的小伙伴们大家好。 小编最近刚换了电脑&#xff0c;这几天做自动化测试发现打开Chrome浏览器需要等待好长时间&#xff0c;起初还以为代码有问题&#xff0c;或者Chromedriver与Chrome不匹配造成的&#xff0c;但排查后发现并不是&#xff01;&#xff01; 在driver.py中…...

Oracle中如何解决FREE BUFFER WAITS

基于性能上的考虑&#xff0c;服务器进程在扫描LRU主列的同时&#xff0c;会将脏块移至LRU-W列&#xff0c;如果发现没有足够可用&#xff08;可替换&#xff09;的BUFFER CACHE&#xff0c;进程并不会无止尽地扫描整条LRU主列&#xff0c;而是在扫描到某个阀值&#xff08;该阀…...

OpenHarmony开源鸿蒙兼容性测试常见问题解答分享

OpenHarmony 兼容性测评主要是验证合作伙伴的设备和业务应用满足 OpenHarmony 开源兼容性定义的技术要求&#xff0c;确保运行在 OpenHarmony 上的设备和业务应用能稳定、正常运行&#xff0c;同时使用 OpenHarmony 的设备和业务应用有一致性的接口和业务体验。 一、兼容性测评…...

Android trace presentFence屏幕显示的帧

Android trace presentFence屏幕显示的帧 presentFence &#xff1a;当帧成功显示到屏幕时&#xff0c;present fence就会signal。 FrameMissed/GpuFrameMissed/HwcFrameMissed表示上一次合成的结果&#xff0c;当SurfaceFlinger合成后显示到屏幕上&#xff0c;present fence就…...