feat: 修复MainView Tab切换问题并优化MeView逻辑

- 新增MainView Tab切换问题分析文档,详细描述问题原因及解决方案。
- 优化BottomTabView的绑定逻辑,简化状态管理,确保Tab切换时状态正确更新。
- 在MeView中实现用户信息加载逻辑调整,确保动态列表仅在首次进入时加载,并添加错误处理视图。
- 创建EmptyStateView组件,提供统一的空状态展示和重试功能。
- 增强调试信息输出,便于后续问题排查和用户体验提升。
This commit is contained in:
edwinQQQ
2025-08-05 15:51:07 +08:00
parent 99a53d7274
commit 4ff92c8c4d
16 changed files with 481 additions and 322 deletions

View File

@@ -84,6 +84,7 @@ struct MeView: View {
debugInfoSync(" 动态数量: \(store.moments.count)")
debugInfoSync(" 用户信息错误: \(store.userInfoError ?? "nil")")
debugInfoSync(" 动态错误: \(store.momentsError ?? "nil")")
debugInfoSync(" 显示错误视图: \(store.showErrorView)")
store.send(.onAppear)
}
//
@@ -97,19 +98,19 @@ struct MeView: View {
get: { store.showDetail },
set: { _ in store.send(.detailDismissed) }
)) {
if let selectedMoment = store.selectedMoment {
let detailStore = Store(
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
}
DetailView(store: detailStore)
.onChange(of: detailStore.shouldDismiss) { _, shouldDismiss in
if shouldDismiss {
store.send(.detailDismissed)
}
if let selectedMoment = store.selectedMoment {
let detailStore = Store(
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
}
DetailView(store: detailStore)
.onChange(of: detailStore.shouldDismiss) { _, shouldDismiss in
if shouldDismiss {
store.send(.detailDismissed)
}
}
}
}
}
@@ -165,12 +166,12 @@ struct MeView: View {
.padding(.top, 8)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
} else if let error = store.userInfoError ?? store.momentsError {
} else if let error = store.userInfoError {
VStack(spacing: 12) {
Image(systemName: "exclamationmark.triangle")
.font(.system(size: 32))
.foregroundColor(.orange)
Text("加载失败")
Text("用户信息加载失败")
.font(.system(size: 16, weight: .medium))
.foregroundColor(.white)
Text(error)
@@ -179,7 +180,7 @@ struct MeView: View {
.multilineTextAlignment(.center)
.padding(.horizontal, 32)
Button("重试") {
store.send(.refresh)
store.send(.loadUserInfo)
}
.font(.system(size: 14, weight: .medium))
.foregroundColor(.white)
@@ -189,6 +190,12 @@ struct MeView: View {
.cornerRadius(8)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
} else if store.showErrorView {
//
EmptyStateView {
store.send(.retryMoments)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
} else if store.moments.isEmpty {
VStack(spacing: 12) {
Image(systemName: "doc.text")
@@ -213,6 +220,9 @@ struct MeView: View {
Text("调试: momentsError = \(store.momentsError ?? "nil")")
.font(.system(size: 12))
.foregroundColor(.yellow)
Text("调试: showErrorView = \(store.showErrorView)")
.font(.system(size: 12))
.foregroundColor(.yellow)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
} else {