feat: 更新Splash视图及登录模型逻辑

- 将SplashV2替换为SplashPage,优化应用启动流程。
- 在LoginModels中将用户ID参数更改为加密后的ID,增强安全性。
- 更新AppConfig中的API基础URL,确保与生产环境一致。
- 在CommonComponents中添加底部Tab栏图标映射逻辑,提升用户体验。
- 新增NineGridImagePicker组件,支持多图选择功能,优化CreateFeedPage的图片选择逻辑。
- 移除冗余的BottomTabView组件,简化视图结构,提升代码整洁性。
- 在MainPage中整合创建动态页面的逻辑,优化导航体验。
- 新增MePage视图,提供用户信息管理功能,增强应用的可用性。
This commit is contained in:
edwinQQQ
2025-09-26 10:53:00 +08:00
parent 90a840c5f3
commit 6b960f53b4
12 changed files with 446 additions and 371 deletions

View File

@@ -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: {})
//}