Files
e-party-iOS/yana/Features/HomeFeature.swift
edwinQQQ 9844289d72 feat: 添加设置功能和动态视图
- 新增设置功能模块,包含用户信息管理和设置选项。
- 实现动态视图,展示用户动态内容。
- 更新HomeView以支持设置页面的展示和动态视图的切换。
- 添加底部导航栏,增强用户体验。
- 更新相关视图和组件,确保一致的UI风格和交互体验。
2025-07-11 10:42:28 +08:00

90 lines
2.7 KiB
Swift

import Foundation
import ComposableArchitecture
@Reducer
struct HomeFeature {
@ObservableState
struct State: Equatable {
var isInitialized = false
var userInfo: UserInfo?
var accountModel: AccountModel?
var error: String?
//
var isSettingPresented = false
var settingState = SettingFeature.State()
}
enum Action: Equatable {
case onAppear
case loadUserInfo
case userInfoLoaded(UserInfo?)
case loadAccountModel
case accountModelLoaded(AccountModel?)
case logoutTapped
case logout
// actions
case settingDismissed
case setting(SettingFeature.Action)
}
var body: some ReducerOf<Self> {
Scope(state: \.settingState, action: \.setting) {
SettingFeature()
}
Reduce { state, action in
switch action {
case .onAppear:
state.isInitialized = true
return .concatenate(
.send(.loadUserInfo),
.send(.loadAccountModel)
)
case .loadUserInfo:
//
let userInfo = UserInfoManager.getUserInfo()
return .send(.userInfoLoaded(userInfo))
case let .userInfoLoaded(userInfo):
state.userInfo = userInfo
return .none
case .loadAccountModel:
//
let accountModel = UserInfoManager.getAccountModel()
return .send(.accountModelLoaded(accountModel))
case let .accountModelLoaded(accountModel):
state.accountModel = accountModel
return .none
case .logoutTapped:
return .send(.logout)
case .logout:
//
UserInfoManager.clearAllAuthenticationData()
//
NotificationCenter.default.post(name: .homeLogout, object: nil)
return .none
case .settingDismissed:
state.isSettingPresented = false
return .none
case .setting:
// reducer
return .none
}
}
}
}
// MARK: - Notification Extension
extension Notification.Name {
static let homeLogout = Notification.Name("homeLogout")
}