From ae1ff01f8835d35c18e1089c5833714d34e2be16 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Wed, 30 Jul 2025 12:23:20 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=95=B0=E6=8D=AE=E7=9A=84=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dimensionhub/Views/Index/IndexMainView.swift | 25 +++++++++++--------- dimensionhub/Views/Index/IndexModel.swift | 25 +------------------- 2 files changed, 15 insertions(+), 35 deletions(-) diff --git a/dimensionhub/Views/Index/IndexMainView.swift b/dimensionhub/Views/Index/IndexMainView.swift index a67b1c1..c4a6eb0 100644 --- a/dimensionhub/Views/Index/IndexMainView.swift +++ b/dimensionhub/Views/Index/IndexMainView.swift @@ -30,9 +30,7 @@ struct IndexMainView: View { // 刷新逻辑 @State private var headerRefreshing: Bool = false - @State private var footerRefreshing: Bool = false - @State private var noMore: Bool = false @State private var scrollOffset: CGFloat = 0 @State private var showFloatGroupLabel: Bool = false @@ -132,11 +130,11 @@ struct IndexMainView: View { // 上拉刷新功能 self.headerRefreshing = true Task { @MainActor in - let loadNum = await self.indexModel.loadPrevUpdateDramasTask(userId: self.userId) { _ in - DispatchQueue.main.async { - self.headerRefreshing = false - } + defer { + self.headerRefreshing = false } + + let loadNum = await self.indexModel.loadPrevUpdateDramasTask(userId: self.userId) self.hasMoreNewest = loadNum > 3 } } @@ -178,13 +176,18 @@ struct IndexMainView: View { return } + guard !self.showDateNavPopover && !self.footerRefreshing else { + return + } + + self.footerRefreshing = true Task { @MainActor in - let num = await indexModel.loadMoreUpdateDramasTask(userId: self.userId) - if num > 3 { - self.hasMoreOldest = true - } else { - self.hasMoreOldest = false + defer { + self.footerRefreshing = false } + + let num = await indexModel.loadMoreUpdateDramasTask(userId: self.userId) + self.hasMoreOldest = num > 3 } } .onAppear { diff --git a/dimensionhub/Views/Index/IndexModel.swift b/dimensionhub/Views/Index/IndexModel.swift index 7f6fa08..4ece504 100644 --- a/dimensionhub/Views/Index/IndexModel.swift +++ b/dimensionhub/Views/Index/IndexModel.swift @@ -91,10 +91,6 @@ final class IndexModel { @ObservationIgnored private var isLoaded = false - // 是否正在刷新 - @ObservationIgnored - private var isMoreLoading = false - // 是否显示debug信息 @ObservationIgnored private var debug: Bool = false @@ -229,16 +225,11 @@ final class IndexModel { } func loadMoreUpdateDramasTask(userId: String) async -> Int { - guard !self.isMoreLoading else { - return 0 - } - // 按照id来判断不一定正确,需要借助其他值 let dramaIds = self.getDramaIds(self.updateDramaGroups) //print("current ids: \(dramaIds)") var loadNum: Int = 0 if let lastId = dramaIds.last { - self.isMoreLoading = true let response = await API.loadMoreUpdateDramas(userId: userId, mode: .next, id: lastId, as: [UpdateDramaGroup].self) if case let .result(groups) = response { if groups.count > 0 { @@ -255,25 +246,18 @@ final class IndexModel { loadNum = groups.reduce(0) { acc, group in acc + group.items.count} } } - - self.isMoreLoading = false } return loadNum } - func loadPrevUpdateDramasTask(userId: String, callback: (Bool) -> Void) async -> Int { - guard !self.isMoreLoading else { - return 0 - } - + func loadPrevUpdateDramasTask(userId: String) async -> Int { // 按照id来判断不一定正确,需要借助其他值 let dramaIds = self.getDramaIds(self.updateDramaGroups) var loadNum: Int = 0 // 查找最小的id if let firstId = dramaIds.first { - self.isMoreLoading = true let response = await API.loadMoreUpdateDramas(userId: userId, mode: .prev, id: firstId, as: [UpdateDramaGroup].self) if case let .result(groups) = response { if groups.count > 0 { @@ -288,15 +272,8 @@ final class IndexModel { displayDramaGroups(self.updateDramaGroups, label: "after") loadNum = groups.reduce(0, { acc, group in acc + group.items.count }) - // 处理回调 - callback(true) - } else { - callback(false) } - } else { - callback(false) } - self.isMoreLoading = false } return loadNum