如何通过Kotlin协程, 简化"连续依次弹窗(Dialog队列)"的需求

效果预览

代码预览

kotlin 复制代码
lifecycleScope.launch {
    showDialog("签到活动", "签到领10000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("新手任务", "做任务领20000币") // 直到dialog被关闭, 才会继续运行下一行
    showDialog("首充奖励", "首充6元送神装")
}

代码实现

要做到上一个showDialig()在关闭时才继续运行下一个函数,需要用到协程挂起的特性, 然后在 OnDismiss()回调中将协程恢复, 为了将这种基于回调的方法包装成协程挂起函数, 可以使用suspendCancellableCoroutine函数

kotlin 复制代码
suspend fun showDialog(title: String, content: String) = suspendCancellableCoroutine { continuation ->
    MaterialAlertDialogBuilder(this)
        .setTitle(title)
        .setMessage(content)
        .setPositiveButton("我知道了") { dialog, which ->
            dialog.dismiss()
        }
        .setOnDismissListener {
            continuation.resume(Unit)
        }
        .show()
}
相关推荐
火柴就是我11 分钟前
Flutter 混合模式下:saveLayer 混合注意点
android·flutter
Mintopia31 分钟前
🎙️ React Native(RN)语音输入场景全解析
android·react native·aigc
centor41 分钟前
国际版 UnitySetup-Android-Support 安装 Mac 设备
android·macos
城东米粉儿1 小时前
compose 中的附带效应笔记一
android
STCNXPARM1 小时前
Android14显示系统 - VSYNC机制
android·surfaceflinger·vsync
say_fall1 小时前
C++ 类与对象易错点:初始化列表顺序 / 静态成员访问 / 隐式类型转换
android·java·开发语言·c++
落羽凉笙2 小时前
Python基础(4)| 详解程序选择结构:单分支、双分支与多分支逻辑(附代码)
android·服务器·python
携欢2 小时前
portswigger靶场之修改序列化数据类型通关秘籍
android·前端·网络·安全
资生算法程序员_畅想家_剑魔2 小时前
Kotlin常见技术分享-01-相对于Java 的核心优势-空安全
java·安全·kotlin
·云扬·2 小时前
MySQL四大系统库详解:作用、核心表与实用SQL查询
android·sql·mysql