Kotlin:使用flow实现倒计时功能

这篇具有很好参考价值的文章主要介绍了Kotlin:使用flow实现倒计时功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、效果图

Kotlin:使用flow实现倒计时功能,# kotlin,kotlin,android

二、ExtendContext.kt 文件代码

注意:创建ExtendContext.kt选择file
使用kotlin扩展方法的特性创建countDown扩展方法,避免多个地方使用倒计时重复创建countDown方法
Kotlin:使用flow实现倒计时功能,# kotlin,kotlin,android文章来源地址https://www.toymoban.com/news/detail-827441.html

package com.example.baselib.extension

import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch

fun FragmentActivity.countDown(
    timeMillis: Long = 1000,//默认时间间隔 1 秒
    time: Int = 3,//默认时间为 3 秒
    start: (scop: CoroutineScope) -> Unit,
    end: () -> Unit,
    next: (time: Int) -> Unit,
    error: (msg: String?) -> Unit
) {
    lifecycleScope.launch {
        flow {
            (time downTo 1).forEach {
                delay(timeMillis)
                emit(it)
            }
        }.onStart {
            start(this@launch)
        }.onCompletion {
            end()
        }.catch {
            error(it.message ?: "countDown 出现未知错误")
        }.collect {
            next(it)
        }
    }
}

三、MainActivity.kt代码

package com.example.testkotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.example.baselib.extension.countDown
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancel

class MainActivity : AppCompatActivity() {
    private var mCountDown: CoroutineScope? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadData()

    }

    private fun loadData() {
        this.countDown(time = 5, start = {
            mCountDown = it
        }, end = {
            Log.i("==", "倒计时结束了")

        }, next = {
            Log.i("==", "剩余 $it 秒")

        }, error = {

        })
    }

    override fun onDestroy() {
        mCountDown?.let {
            it.cancel()
        }
        super.onDestroy()
    }
}

四、build.gradle.kts代码

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.testkotlin"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.testkotlin"
        minSdk = 23
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.9.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.11.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

到了这里,关于Kotlin:使用flow实现倒计时功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序实现倒计时功能,一看就懂,直接用

    结构完整,直接用就可以

    2024年02月01日
    浏览(63)
  • 使用css3实现一个超浪漫的新年倒计时

    新年快到了,使用css3实现一个超浪漫的新年倒计时吧,希望大家喜欢。 目录 1 实现思路  2 实现浪漫的心形背景 3 布局小时分钟和秒的区域 4、js倒计时  5、然后就是将所得的小时、分钟、秒对DOM进行赋值  6、每秒一更新  7、补充知识点1- 倒计时为什么不写1000 8、补充知识

    2024年02月03日
    浏览(45)
  • 51单片机实现倒计时,按键控制倒计时

    基于AT89C52的答辩倒计时。四个按键分别控制倒计时开始,暂停,时间加和减。剩下30S时蜂鸣器响,倒计时结束蜂鸣器响。  

    2024年02月07日
    浏览(59)
  • uni-app小程序中实现倒计时功能

    在uni-app小程序中实现倒计时功能,可以按照以下步骤进行: 在data中设置一个变量用于存储倒计时的剩余时间: 在methods中创建一个函数,用于控制倒计时的逻辑: 可以在点击按钮或其他事件触发时调用startCountdown方法来开始倒计时: 在页面中显示倒计时时间: 可以在页面中

    2024年02月07日
    浏览(48)
  • jquery 实现倒计时

    $(\\\".tableText\\\").click(function () {     var time = 60;     var timer = setInterval(function(){         time--;         $(\\\".tableText\\\").text(\\\"(\\\"+time+\\\"秒)重发\\\");         if(time==0){             clearInterval(timer);             $(\\\".tableText\\\").text(\\\"获取验证码\\\");         }     },1000); });

    2024年04月14日
    浏览(51)
  • 51单片机通过计时器实现倒计时

    软件 : Keil5+Proteus7 元件 : AT89C51 * 1,7SEG-MPX2-CA * 1

    2024年02月16日
    浏览(72)
  • 【D01】Django中实现带进度条的倒计时功能(简易版)

    首先说明简易版是只有一个 倒计时 和一个 进度条 ,页面加载后自动开始计时,下次计时需要手动刷新页面。 后续会更新实现完整的倒计时功能的文章 前端框架 你需要准备一些前端框架: Bootstrap4 和 jQuery 安装方法请自行查阅官方文档或教程 Bootstrap4:https://v4.bootcss.com/do

    2023年04月12日
    浏览(40)
  • java 倒计时实现的方式

      倒计时的实现方法有很多种,本文给大家介绍其中一种,最简单的一种实现方式,也是最方便的一种方式,希望能帮到大家。 1、 java中倒计时是利用循环来实现的,我们可以使用循环语句来实现。 2、 java中使用 bool类的 setTimeout方法也是可以实现倒计时的。 3、 java中还有一

    2024年02月09日
    浏览(44)
  • jquery 实现倒计时60秒

    2024年02月04日
    浏览(47)
  • 【C#】当重复使用一段代码倒计时时,使用静态类和静态方法,实现简单的this扩展方法

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包