第二百九十九回

news2024/12/26 9:17:41

文章目录

  • 1. 概念介绍
  • 2. 实现方法
    • 2.1 使用Steam实现
    • 2.2 使用Timer实现
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"如何实现每隔一段时间执行某项目任务"相关的内容,本章回中将介绍如何实现倒计时功能.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

倒计时功能估计大家都熟悉,经常用在一些节目开始或者开奖活动中。程序中也会用到倒计时,比如在网上支付时会有一个支付成功的倒计时,显示多少秒后支付成功。本
章回中将详细介绍如何实现倒计时功能。

2. 实现方法

我们将介绍两种实现方法,一种通过Stream实现,另外一种通过Timer实现,接下来的小节中,我们将详细介绍这两种方法的实现过程。

2.1 使用Steam实现

  • 创建一个倒计时可用的时间,这个时间与项目需求有关;
  • 创建Stream并且调用periodic方法来启动计时功能;
  • 使用StreamBuilder组件监听Stream中数值的变化;
  • 在StreamBuilder中显示倒计时数值,结束时停止显示倒计时数值;

2.2 使用Timer实现

  • 创建一个倒计时可用的时间,这个时间与项目需求有关;
  • 创建Timer对象并且调用它的periodic方法来启动计时功能;
  • 使用Text组件显示时间值,并且通过setState()方法更新时间值;

3. 示例代码

///使用Stream实现倒计时功能
int countdownClock = 10;

StreamBuilder(
  ///InitiData是event的初始值,但是它显示完初始化值后马上又变成了0
  stream: Stream.periodic(const Duration(seconds: 1),(event)=>(countdownClock-event)).take(countdownClock+1),
  initialData: 0,
  builder: (context,data){
    if(data.data != null && data.data == 0) {
      return Text("starting",style: const TextStyle(color: Colors.black),);
    }
    return Text("${data.data.toString()} s",style: const TextStyle(color: Colors.black),
);


///自己实现的计时器,和Stream.periodic()方法的原理相同,不同之处在于可以控制事件的逻辑,Stream中只能是做加法
TextButton(
  onPressed: () {
    Timer.periodic(const Duration(seconds: 1,), (timer) {
      setState(() {
        countdownTime++;
        if(countdownTime == 5) {
          timer.cancel();
        }
      });
    });
  },
  child: countdownTime == 0 ? const Text("Start") : Text(countdownTime.toString()),
),
///模拟上一个内容,做成倒计时,不过需要先启动上一个按钮,加到5以后才能启动下一个按钮
TextButton(
  onPressed: () {
    Timer.periodic(const Duration(seconds: 1,), (timer) {
      setState(() {
        countdownTime--;
        if(countdownTime == 0) {
          timer.cancel();
        }
      });
    });
  },
  child: countdownTime != 0 ? const Text("Start") : Text(countdownTime.toString()),
),

上面的示例代码中演示了两种创建倒计时的方法,它们在原理上是相同的,都是使用了Timer的periodic方法来实现计时功能。相比较而言,Timer更加灵活一些,它可
以对数值进行加法或者减法等灵活操作。Stream则只能进行了加法操作,为此我们在代码中通过作差来实现减法功能。我在这里就不演示程序的运行结果了,建议大家
自己动手去实践,这样可以看到数值在变化,直到0才停止计时。

4. 内容总结

最后,我们对本章回的内容做一个全面总结:

  • 使用Stream的periodic方法可以实现倒计时功能;
  • 使用Timer的periodic方法也可以实现倒计时功能;
  • 两种方法相比较后就会发现使用Timer实现倒计时功能更加灵活一些;
    看官们,与"如何实现倒计时功能"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

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

相关文章

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。 geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档,并使用指定的空间关系:相交(intersect)、包含(con…

【百度Apollo】本地调试仿真:加速自动驾驶系统开发的利器

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

【C++干货基地】C++引用与指针的区别:深入理解两者特性及选择正确应用场景

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

go并发编程-runtime、Channel与Goroutine

1. runtime包 1.1.1. runtime.Gosched() 让出CPU时间片,重新等待安排任务(大概意思就是本来计划的好好的周末出去烧烤,但是你妈让你去相亲,两种情况第一就是你相亲速度非常快,见面就黄不耽误你继续烧烤,第二种情况就是你相亲速度…

C#,入门教程(36)——尝试(try)捕捉(catch)不同异常(Exception)的点滴知识与源代码

上一篇: C#,入门教程(35)——哈希表(Hashtable)的基础知识与用法https://blog.csdn.net/beijinghorn/article/details/124236243 1、try catch 错误机制 Try-catch 语句包含一个后接一个或多个 catch 子句的 try 块,这…

项目:博客

1. 运行环境: 主机 主机名 系统 服务 192.168.223.129 Server_Web Linux Web 192.168.48.131 Server-NFS-DNS Linux NFS/DNS 2. 基础配置 配置主机名,静态IP地址 开启防火墙并配置 部分开启SElinux并配置 服务器之间使用同ntp.aliyun.com进行…

prometheus和alertmanager inhibit_rules抑制的使用

172.16.10.21 prometheus 172.16.10.33 altermanager 172.16.10.59 mysql服务,node探针以及mysql的探针 [rootk8s-node02 ~]# docker ps -a CONTAINER ID IMAGE …

SpringBoot+BCrypt算法加密

BCrypt是一种密码哈希函数,BCrypt算法使用“盐”来加密密码,这是一种随机生成的字符串,可以在密码加密过程中使用,以确保每次加密结果都不同。盐的使用增强了安全性,因为攻击者需要花费更多的时间来破解密码。 下图为…

深度剖析Sentinel热点规则

欢迎来到我的博客,代码的世界里,每一行都是一个故事 深度剖析Sentinel热点规则 前言核心概念解析:数字守护者的起源核心概念解析:简单示例演示: 参数索引:规则的基石参数索引的作用:不同场景下选…

数学建模-灰色预测模型

灰色预测练习解答 x(0){183,189,207,234,220,256,270,285}; X(1){183,372,579,813,1033,1289,1559,1844}; Matlab操作程序: x0[183,189,207,234,220,256,270,285];>> format long; %(表示设计精度)>> nlength(x0); %(输入数据长度)>&g…

在 python 中调用 C/C++

Python 是一种很好用的胶水语言,利用Python的简洁和C的高效,基本可以解决99%的问题了,剩下那 1% 的问题也就不是问题了,毕竟不是所有问题都可解。 一般的,Python和C的交互分为这两种情况: 用C扩展Python&…

标准化编程系列(常用模式状态介绍)

任何事情任何编程都是有方法可循的,我们所要做的工作就是在看似没有规律的运行中,发现规律总结一般性的方法。这篇博客主要介绍标准化编程相关的基础知识,编程化编程离不开大家扎实的编程基本功,所以在学习标准化的同时,大家需要提升对于子程序,模块FB 、FC等的应用知识,…

Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发

这边需要在win11上建立vm来部署docker(这边不能用windows版本的docker destop),学习了下,记录。 下载系统镜像 首先下载系统镜像:https://releases.ubuntu.com/focal/ 这边使用的是ubuntu20.04.6 LTS (Focal Fossa) ,Server inst…

D4800——AB类立体声耳机放大芯片, 输出电压振幅大,电源抑制比好且低功耗, 工作温度范围宽 无开关噪声

D4800是一块AB类立体声耳机音频功率放大器电路。D480在5V电源时输出功率最高可290mW(89负裁失真度1090.适合在便携式数字音响设备中作功率放大用。 主要特点: ● 电源电压:单电源: 2V to 7V 双电源:1.0V to3.5V ● 高信噪比: 100dB DIP8. ● 转速快: 5V/us ● 失…

【乳腺肿瘤诊断分类及预测】基于PNN概率神经网络

课题名称:基于PNN的乳腺肿瘤诊断分类及预测 版本日期:2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院经过多年的收集和整理,建…

关于Spring框架的 @Configuration 与@Service 加载顺序哪个先后(某些环境加载是随机的)

很多资料都说Configuration 优先加载,Service后加载,如下图: 本来也是以为 Configuration 优先加载于 Service ,那参数处理放在Configuration注入完后,service构建时就可以拿来用的,在我在IDEA的调试时下断…

【蓝桥杯日记】复盘篇三——循环结构

前言 本篇内容是对循环结构进行复盘的,循环可谓是在基础阶段特别重要的东西,是三大结构(顺序结构、选择结构、循环结构)中最重要的结构之一。 目录 🍑1.找最小值 分析: 知识点: 代码如下 &…

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中,Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型,用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例,该示例创建了一个列表,并在图形界面中显示: …

PostGIS教程学习二十二:使用触发器追踪历史编辑操作

PostGIS教程学习二十二:使用触发器追踪历史编辑操作 生产环境下数据库的一个常见要求是能够跟踪用户编辑数据的历史:数据在两个日期之间是如何变化的,是谁操作的,以及它们哪些内容变化了?一些GIS系统通过在客户端接口…

单片机学习笔记--- 定时器/计数器(简述版!)

目录 定时器的介绍 定时计数器的定时原理 定时计数器的内部结构 两种控制寄存器 (1)工作方式寄存器TMOD (2)控制寄存器TCON 定时计数器的工作方式 方式0 方式1 方式2 方式3 定时器的配置步骤 第一步,对…