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

Flutter中Get.snackbar和Get.dialog关闭冲突问题记录

背景:
在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。

冲突解释:
之所以会产生冲突,是因为Get.snackbar在关闭时会有一个动画,这个动画的默认持续时间为1s,这个动画的持续时间内,Get.snackbar并没有真正意义上的关闭,这时候我们调用Get.back()是无法关闭Get.dialog。

实现:

  1. 创建一个统一的SnackBarManager去管理提示框。
import 'package:get/get.dart';
import 'package:flutter/material.dart';class SnackBarManager {factory SnackBarManager() => instance;static final SnackBarManager instance = SnackBarManager._internal();SnackBarManager._internal();String _lastMessage = '';int _lastDuration = 0;int _lastTime = 0;void showSnackBar(String title, String message, {Color? backgroundColor, Duration? duration}) {var currentTime = DateTime.now().millisecondsSinceEpoch;// 相同消息持续时间内重复提交时,返回if (currentTime - _lastTime < _lastDuration * 1000 && _lastMessage == message) {return;}dismissSnackBar();Get.snackbar(title,message,backgroundColor: backgroundColor ?? Colors.black12,duration: duration ?? Duration(seconds: 2), // 提示框持续时间animationDuration: Duration(milliseconds: 0), // 过渡动画的时间,这里设置为0是为了在使用Get.dialog时避免关闭冲突);_lastDuration = duration?.inSeconds ?? 2;_lastTime = DateTime.now().millisecondsSinceEpoch;_lastMessage = message;}void dismissSnackBar() {Get.closeCurrentSnackbar();}
}

这是一个避免重复显示的显示的提示框,可参考博客:Flutter中Get.snackbar避免重复显示的实现
2. 创建一个LoadingDialog去实现加载框。

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';class LoadingDialog {static void show([String? msg]) {Get.dialog(PopScope(canPop: false,child: Center(child: Container(padding: EdgeInsets.symmetric(horizontal: 24, vertical: 16), // 减小内边距decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.circular(8),),child: Row(mainAxisSize: MainAxisSize.min, // 设置为最小宽度children: [SizedBox(width: 24, // 减小加载图标尺寸height: 24,child: CircularProgressIndicator(strokeWidth: 2.0, // 可以适当减小进度条宽度),),SizedBox(width: 12), // 减小间距Text(msg ?? "加载中...",style: TextStyle(fontSize: 14, color: Colors.black), // 可以适当调整字体大小),],),),),),barrierDismissible: false,);}static void hide() {if (Get.isDialogOpen ?? false) {// 先关闭 SnackbarGet.closeCurrentSnackbar();// 添加延迟以确保 Snackbar 已关闭Future.delayed(Duration(milliseconds: 100), () {if (Get.isDialogOpen ?? false) {Get.back();}});}}
}

在关闭加载框之前,会先关闭提示框,由于Get.snackbar动画时长已经设置为0,此时延迟100ms后再关闭加载框是没有问题的。

相关文章:

Flutter中Get.snackbar和Get.dialog关闭冲突问题记录

背景&#xff1a; 在使用GetX框架时&#xff0c;同时使用了Get.snackbar提示框和Get.dialog加载框&#xff0c;当这两个widget同时存在时&#xff0c;Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释&#xff1a; 之所以会产生冲突&#xff0c;是因为Get.snackbar在关…...

springcloudalibaba集成fegin报错ClassNotFoundException解决方案

集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性

圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...

力扣264. 丑数 II

给你一个整数 n &#xff0c;请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法&#xff1a;L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...

计算机网络之---TCP连接管理

TCP连接管理 TCP&#xff08;传输控制协议&#xff09;是面向连接的协议&#xff0c;在数据传输之前需要建立连接&#xff0c;在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则&#xff0c;分别称为三次握手&#xff08;Three-Way Handshake&#xff09;和四…...

《CPython Internals》阅读笔记:p118-p150

《CPython Internals》学习第 8 天&#xff0c;p118-p150 总结&#xff0c;总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码

常见7种排序算法 冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;归并排序&#xff08;Merge Sort&#xff09;快速排序&#xff08;…...

三只松鼠携手爱零食,社区零售新高峰拔地而起

合纵连横&#xff0c;这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改&#xff0c;到社区零售正在进行的渠道变革&#xff0c;竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此&#xff0c;有杀伐&#xff0c;有并购&#xff0c;刀光…...

Java聊天小程序

拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...

本文所用——MYSQL版本&#xff1a;8.0.25 baidu都是直接创建新用户并赋权&#xff0c;如下&#xff1a; GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行&#xff0c;会报错&#xff01; 经查阅资料发现——MY…...

动漫周边商城系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...

Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响

Vue 3 的 Diff 算法会受到 v-for 循环中的 key 属性的影响&#xff0c;key 的选择直接关系到 Diff 算法的效率和最终的 DOM 更新结果。 key 的作用 在 Vue 中&#xff0c;key 是一种标识&#xff0c;它用于唯一标记每个虚拟 DOM 节点。Diff 算法会根据 key 判断新旧节点是否是…...

江科大STM32入门——看门狗笔记整理

wx&#xff1a;嵌入式工程师成长日记 &#xff08;一&#xff09;简介 WDG(Watchdog)看门狗看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞&#xff08;无法预料&#xff09;、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及…...

【计算机网络】lab7 TCP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...

计算机视觉:解锁未来智能世界的钥匙

计算机视觉&#xff1a;解锁未来智能世界的钥匙 在信息技术飞速发展的今天&#xff0c;计算机视觉作为人工智能领域的一个重要分支&#xff0c;正以前所未有的速度改变着我们的生活与工作方式。它使机器能够“看”并理解图像和视频中的信息&#xff0c;为自动驾驶、医疗影像分…...

Java的Stream流和Option类

1. Stream 流 背景 Stream是Java 8引入的一个用于处理集合&#xff08;或其他数据源&#xff09;中的元素的API。它提供了一种声明式的方式来处理数据&#xff0c;并可以链式调用。Stream支持惰性求值&#xff0c;也支持并行流处理。 1.1 创建 Stream 创建一个Stream可以通…...

深入理解ASP.NET Core 管道的工作原理

在 .NET Core 中&#xff0c;管道&#xff08;Pipeline&#xff09;是处理 HTTP 请求和响应的中间件组件的有序集合。每个中间件组件都可以对请求进行处理&#xff0c;并将其传递给下一个中间件组件&#xff0c;直到请求到达最终的处理程序。管道的概念类似于流水线&#xff0c…...

多模态论文笔记——CLIP

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍这几年AIGC火爆的隐藏功臣&#xff0c;多模态模型&#xff1a;CLIP。 文章目录 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09…...

brpc之baidu_protocol

简介 是brpc默认使用的协议 初始化 Protocol baidu_protocol { ParseRpcMessage,SerializeRequestDefault, PackRpcRequest,ProcessRpcRequest, ProcessRpcResponse,VerifyRpcRequest, NULL, NULL,CONNECTION_TYPE_ALL, "baidu_std" };协议定义 定义在baidu_rpc…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

uni-app学习笔记二十七--设置底部菜单TabBar的样式

官方文档地址&#xff1a;uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容&#xff0c;通常写在项目的App.vue的onLaunch方法中&#xff0c;用于项目启动时立即执行 重要参数&#xff1a; indexnumber是tabBar 的哪一项&…...

Go 并发编程基础:select 多路复用

select 是 Go 并发编程中非常强大的语法结构&#xff0c;它允许程序同时等待多个通道操作的完成&#xff0c;从而实现多路复用机制&#xff0c;是协程调度、超时控制、通道竞争等场景的核心工具。 一、什么是 select select 类似于 switch 语句&#xff0c;但它用于监听多个通…...

Centos7.6图文安装mysql8.4详细步骤记录

1 前提条件 1.1 关闭数据库服务器的防火墙 # 关闭数据库服务器的防火墙 systemctl stop firewalld systemctl disable firewalld 1.2 关闭SELinux # 编辑 /etc/selinux/configvi /etc/selinux/config#内容更改为disabledSELINUXdisabled 1.3 卸载系统自身带的mysql&#…...