From 5e4d3912aaf9f21075c9a8481dc44d2f964a1c54 Mon Sep 17 00:00:00 2001 From: graycreate Date: Mon, 1 Dec 2025 22:23:10 +0800 Subject: [PATCH] fix: add minimum delay for pull-to-refresh animation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 800ms minimum delay in UpdatableView to prevent immediate retraction - Fetch online stats on first load for smoother subsequent refreshes - Fixes issue where pull-to-refresh would snap back immediately 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- V2er/View/Feed/FeedPage.swift | 3 +++ V2er/View/Widget/Updatable/UpdatableView.swift | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/V2er/View/Feed/FeedPage.swift b/V2er/View/Feed/FeedPage.swift index 9f100b2..96ff66e 100644 --- a/V2er/View/Feed/FeedPage.swift +++ b/V2er/View/Feed/FeedPage.swift @@ -25,6 +25,9 @@ struct FeedPage: BaseHomePageView { log("FeedPage.onAppear") if !state.hasLoadedOnce { dispatch(FeedActions.FetchData.Start(autoLoad: true)) + if AccountState.hasSignIn() { + Task { await run(action: FeedActions.FetchOnlineStats.Start()) } + } } } } diff --git a/V2er/View/Widget/Updatable/UpdatableView.swift b/V2er/View/Widget/Updatable/UpdatableView.swift index 4a78413..baf09a6 100644 --- a/V2er/View/Widget/Updatable/UpdatableView.swift +++ b/V2er/View/Widget/Updatable/UpdatableView.swift @@ -130,9 +130,9 @@ struct UpdatableView: View { Task { await onRefresh?() - // Decide delay (ms): 1200 if we had/now have online stats so users can notice updates; otherwise 0. + // Minimum 800ms delay for refresh animation, 1000ms if online stats exist let hasOnlineStatsNow = onlineStats != nil - let delayMs = (hadOnlineStatsBefore || hasOnlineStatsNow) ? 1000 : 0 + let delayMs = (hadOnlineStatsBefore || hasOnlineStatsNow) ? 1000 : 800 runInMain(delay: delayMs) { withAnimation { isRefreshing = false