feat: 更新Splash视图及登录模型逻辑
- 将SplashV2替换为SplashPage,优化应用启动流程。 - 在LoginModels中将用户ID参数更改为加密后的ID,增强安全性。 - 更新AppConfig中的API基础URL,确保与生产环境一致。 - 在CommonComponents中添加底部Tab栏图标映射逻辑,提升用户体验。 - 新增NineGridImagePicker组件,支持多图选择功能,优化CreateFeedPage的图片选择逻辑。 - 移除冗余的BottomTabView组件,简化视图结构,提升代码整洁性。 - 在MainPage中整合创建动态页面的逻辑,优化导航体验。 - 新增MePage视图,提供用户信息管理功能,增强应用的可用性。
This commit is contained in:
@@ -5,6 +5,7 @@ import SwiftUI
|
||||
struct MainPage: View {
|
||||
@StateObject private var viewModel = MainViewModel()
|
||||
let onLogout: () -> Void
|
||||
@State private var isPresentingCreatePage: Bool = false
|
||||
|
||||
var body: some View {
|
||||
NavigationStack(path: $viewModel.navigationPath) {
|
||||
@@ -12,16 +13,18 @@ struct MainPage: View {
|
||||
ZStack {
|
||||
// 背景图片
|
||||
LoginBackgroundView()
|
||||
// 主内容
|
||||
mainContentView(geometry: geometry)
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
|
||||
// 主内容:使用 TabView 常驻子树
|
||||
TabView(selection: $viewModel.selectedTab) {
|
||||
MomentListHomePage(onCreateTapped: { isPresentingCreatePage = true })
|
||||
.tag(MainViewModel.Tab.feed)
|
||||
MePage(onLogout: onLogout)
|
||||
.tag(MainViewModel.Tab.me)
|
||||
}
|
||||
.tabViewStyle(.page(indexDisplayMode: .never))
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
|
||||
VStack {
|
||||
HStack {
|
||||
Spacer()
|
||||
// 右上角按钮
|
||||
topRightButton
|
||||
}
|
||||
Spacer()
|
||||
// 底部导航栏(组件化)
|
||||
BottomTabBar(
|
||||
@@ -45,29 +48,6 @@ struct MainPage: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationDestination(for: String.self) { _ in EmptyView() }
|
||||
.navigationDestination(for: AppRoute.self) { route in
|
||||
switch route {
|
||||
case .setting:
|
||||
SettingPage(
|
||||
onBack: {
|
||||
viewModel.navigationPath.removeLast()
|
||||
},
|
||||
onLogout: {
|
||||
viewModel.onLogoutTapped()
|
||||
}
|
||||
)
|
||||
.navigationBarHidden(true)
|
||||
case .publish:
|
||||
CreateFeedPage(
|
||||
onDismiss: {
|
||||
viewModel.navigationPath.removeLast()
|
||||
}
|
||||
)
|
||||
default:
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.onLogout = onLogout
|
||||
@@ -77,73 +57,15 @@ struct MainPage: View {
|
||||
}
|
||||
viewModel.onAppear()
|
||||
}
|
||||
.fullScreenCover(isPresented: $isPresentingCreatePage) {
|
||||
CreateFeedPage {
|
||||
isPresentingCreatePage = false
|
||||
}
|
||||
}
|
||||
.onChange(of: viewModel.isLoggedOut) { _, isLoggedOut in
|
||||
if isLoggedOut {
|
||||
onLogout()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - UI Components
|
||||
|
||||
private func mainContentView(geometry: GeometryProxy) -> some View {
|
||||
Group {
|
||||
switch viewModel.selectedTab {
|
||||
case .feed:
|
||||
MomentListHomePage()
|
||||
case .me:
|
||||
TempMePage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 底部栏已组件化
|
||||
|
||||
// MARK: - 右上角按钮
|
||||
private var topRightButton: some View {
|
||||
Button(action: {
|
||||
viewModel.onTopRightButtonTapped()
|
||||
}) {
|
||||
Group {
|
||||
switch viewModel.selectedTab {
|
||||
case .feed:
|
||||
Image("add icon")
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.frame(width: 40, height: 40)
|
||||
case .me:
|
||||
Image(systemName: "gearshape")
|
||||
.font(.system(size: 24, weight: .medium))
|
||||
.foregroundColor(.white)
|
||||
.frame(width: 40, height: 40)
|
||||
.background(Color.black.opacity(0.3))
|
||||
.clipShape(Circle())
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.trailing, 16)
|
||||
.padding(.top, 8)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - MeView (简化版本)
|
||||
|
||||
struct TempMePage: View {
|
||||
var body: some View {
|
||||
VStack {
|
||||
Text("Me View")
|
||||
.font(.title)
|
||||
.foregroundColor(.white)
|
||||
|
||||
Text("This is a simplified MeView")
|
||||
.font(.body)
|
||||
.foregroundColor(.white.opacity(0.8))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//#Preview {
|
||||
// MainPage(onLogout: {})
|
||||
//}
|
||||
|
Reference in New Issue
Block a user