
- 在HomeFeature中添加MeDynamicFeature以管理用户动态状态。 - 在MainFeature中集成MeDynamicFeature,支持动态内容的加载与展示。 - 新增MeDynamicView以展示用户的动态列表,支持下拉刷新和上拉加载更多功能。 - 更新MeView以集成用户动态视图,提升用户体验。 - 在APIEndpoints中新增getMyDynamic端点以支持获取用户动态信息。 - 更新DynamicsModels以适应新的动态数据结构,确保数据解析的准确性。 - 在OptimizedDynamicCardView中优化图片处理逻辑,提升动态展示效果。 - 更新相关视图组件以支持动态内容的展示与交互,增强用户体验。
95 lines
3.3 KiB
Swift
95 lines
3.3 KiB
Swift
import SwiftUI
|
|
import ComposableArchitecture
|
|
|
|
struct HomeView: View {
|
|
let store: StoreOf<HomeFeature>
|
|
let onLogout: () -> Void
|
|
@ObservedObject private var localizationManager = LocalizationManager.shared
|
|
@State private var selectedTab: Tab = .feed
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
GeometryReader { geometry in
|
|
ZStack {
|
|
// 使用 "bg" 图片作为背景 - 全屏显示
|
|
Image("bg")
|
|
.resizable()
|
|
.aspectRatio(contentMode: .fill)
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
.clipped()
|
|
.ignoresSafeArea(.all)
|
|
|
|
// 主要内容区域 - 全屏显示
|
|
ZStack {
|
|
switch selectedTab {
|
|
case .feed:
|
|
FeedView(
|
|
store: store.scope(
|
|
state: \.feedState,
|
|
action: \.feed
|
|
),
|
|
onShowCreateFeed: {
|
|
store.send(.showCreateFeed)
|
|
}
|
|
)
|
|
.transition(.opacity)
|
|
case .me:
|
|
Spacer()
|
|
// MeView(
|
|
// meDynamicStore: store.scope(
|
|
// state: \.meDynamic,
|
|
// action: \.meDynamic
|
|
// ),
|
|
// onLogout: onLogout
|
|
// )
|
|
// .transition(.opacity)
|
|
}
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
|
|
// 底部导航栏 - 悬浮在最上层
|
|
VStack {
|
|
Spacer()
|
|
BottomTabView(selectedTab: $selectedTab)
|
|
}
|
|
.padding(.bottom, geometry.safeAreaInsets.bottom + 100)
|
|
}
|
|
}
|
|
.onAppear {
|
|
store.send(.onAppear)
|
|
}
|
|
.sheet(isPresented: Binding(
|
|
get: { store.withState(\.isSettingPresented) },
|
|
set: { _ in store.send(.settingDismissed) }
|
|
)) {
|
|
SettingView(store: store.scope(state: \.settingState, action: \.setting))
|
|
}
|
|
.navigationDestination(isPresented: Binding(
|
|
get: { store.withState(\.route) == .createFeed },
|
|
set: { isPresented in
|
|
if !isPresented {
|
|
store.send(.createFeedDismissed)
|
|
}
|
|
}
|
|
)) {
|
|
CreateFeedView(
|
|
store: store.scope(
|
|
state: \.feedState.createFeedState,
|
|
action: \.feed.createFeed
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//#Preview {
|
|
// HomeView(
|
|
// store: Store(
|
|
// initialState: HomeFeature.State()
|
|
// ) {
|
|
// HomeFeature()
|
|
// }, onLogout: {}
|
|
// )
|
|
//}
|