fix: 任务操作后的交互优化(消除黑屏闪烁)

1. 操作成功后先显示弹窗 2 秒,弹窗消失后再刷新(不再立即刷新导致黑屏)
2. 刷新时不显示 loading(保持当前内容,静默更新)
3. 列表全部完成后显示"全部完成"弹窗 1.5 秒,再返回首页

之前:完成→黑屏loading→突然跳到下一个/回首页
现在:完成→弹窗"任务已完成"→平滑切到下一个/弹窗"全部完成"→回首页

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-05-07 21:31:44 +09:30
parent ac483b5f89
commit 646f780a1f

View File

@@ -130,7 +130,8 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
/** 第一步:获取任务 ID 列表 */
private fun fetchTaskIds() {
showLoading()
// 已操作过的刷新不显示 loading保持当前内容避免黑屏
if (!hasActioned) showLoading()
// 通知跳转:有 taskIds 时不走 queryTaskIds直接按 ID 构建列表
val ids = filterTaskIds
@@ -159,8 +160,14 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
if (taskIndex >= taskList.size) taskIndex = taskList.size - 1
fetchCurrentDetail()
} else if (hasActioned) {
// 操作后列表为空 → 自动返回上一
findNavController().popBackStack()
// 操作后列表为空 → 显示"全部完成"后返回首
tipDialog.show(
status = QuTipDialog.Status.SUCCESS,
title = "全部完成"
)
binding.root.postDelayed({
if (isAdded && view != null) findNavController().popBackStack()
}, 1500)
} else {
showEmpty()
}
@@ -920,19 +927,23 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
when (result) {
is ApiResult.Success -> {
Timber.d("任务操作: $successMsg")
hasActioned = true // 标记已操作,列表为空时自动返回
// 完成任务后,通知模式下从 ID 列表中移除(避免已完成任务仍显示)
hasActioned = true
// 完成任务后,通知模式下从 ID 列表中移除
if (action == "complete" && filterTaskIds != null) {
val currentId = taskList.getOrNull(taskIndex)?.id ?: 0L
filterTaskIds = filterTaskIds!!.filter { it != currentId }.toLongArray()
}
// 先显示成功弹窗,等弹窗消失后再刷新(避免黑屏闪烁)
tipDialog.show(
status = QuTipDialog.Status.SUCCESS,
title = successMsg,
back = true, step = 0, countdown = 2
back = false, step = 0, countdown = 0
)
// 操作成功后刷新:重新获取列表和详情
fetchTaskIds()
// 2 秒后刷新
binding.root.postDelayed({
if (!isAdded || view == null) return@postDelayed
fetchTaskIds()
}, 2000)
}
is ApiResult.Error -> {
tipDialog.show(