第二百零四回

2024-02-03 16:28
文章标签 第二百 零四回

本文主要是介绍第二百零四回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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的初始值,但是它显示完初始化值后马上又变成了0stream: 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.chinasem.cn/article/674729

相关文章

第二百零九节 Java格式 - Java数字格式类

Java格式 - Java数字格式类 以下两个类可用于格式化和解析数字: java.text.NumberFormatjava.text.DecimalFormat NumberFormat 类可以格式化一个数字特定地区的预定义格式。 DecimalFormat 类可以格式化数字以特定区域设置的自定义格式。 NumberFormat类的 getXXXInstance()方法返回格式化

第二百零四节 Java正则表达式教程 - Java正则表达式量词

Java正则表达式教程 - Java正则表达式量词 我们可以指定正则表达式中的字符的次数可以匹配字符序列。 为了使用正则表达式表达一个数字或更多的模式,我们可以使用量词。 下表列出了量词及其含义。 量词含义*零次或更多次+一次或多次?一次或根本不{m}正好m次{m,}至少m次{m,n}至少m,但不超过n次 量词必须遵循字符或字符类。 例子 import java.util.reg

一起Talk Android吧(第二百三十七回:Android中的Intent)

各位看官们大家好,上一回中咱们说的是Android中四大组件的例子,这一回咱们说的例子是Intent。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在本章回中将介绍Intent,它也是常用的知识,四大组件中有三大组件都使用它,比如打开Activity,绑定服务,发送广播。我们在代码中都看到过Intent的身影。 Intent可以显式和隐式两种; 显式Intent中包含

一起Talk Android吧(第二百三十六回:Android中的四大组件概述)

各位看官们大家好,上一回中咱们说的是Android中数据存储大结局的例子,这一回咱们说的例子是四大组件。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在这一回中介绍一下Android中的四大组件,它们是 ActivityServiceBroadcastContentProvider。 其实这些内容我们都介绍过,接下来我们一起回顾一下这些知识. Activity是程

一起Talk Android吧(第二百三十四回:Android中的数据存储之ContentProvider二)

各位看官们大家好,上一回中咱们说的是Android中数据存储之ContentProvider的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中介绍了如何通过ContentProvider读取联系人模块中的数据,下面是完整的代码,请大家参考: package com.example.talk8.blogappall;import a

一起Talk Android吧(第二百三十二回:Android中的数据存储之ContentProvider概述)

各位看官们大家好,上一回中咱们说的是Android中数据存储之数据库的例子,这一回咱们说的例子是ContentProvider。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,contentProvider也叫内容提供器,它主要用来在应用程序之间共享数据,因此,我们把它当作一种数据存储方式。它通常有两种使用场景: 使用它访问其它应用中的数据;定义它并且提供接口让其它程序来访

第二百零五回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容,本章回中将介绍如何在在输入框中提示错误.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回介绍的内容还与输入框有关,输入框仍然使用TextField组件实现。我们主要介绍如何在输入框中提示

第二百九十八回

文章目录 1. 概念介绍2. 方法与原理2.1 实现方法2.2 实现原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"再谈showMenu的用法",本章回中将介绍如何实现每隔一段时间执行某项任务.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在实际项目中会有定时执行任务的需求,比如每隔1秒去发送网络心跳包,对于这样的需求,可以通过Stream

第二百九十六回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线",本章回中将介绍如何如何处理ListView中的事件冲突.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容,它主要用来显示移动PopupMenu在页面中的位置。如果大家忘记的话,可以

第二百九十五回

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 内容总结 我们在上一章回中分享了一个好用的Json工具,本章回中将介绍如何处理ListView中的事件冲突.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在Flutter应用开发中,ListView组件是实现滚动列表展示内容的基石。当我们在ListView的item项上添加点击跳转功能时,通常会