
- 重构AppSettingFeature,采用@Reducer和@ObservableState以优化状态管理。 - 新增用户信息加载逻辑,支持从服务器获取用户信息并更新界面。 - 更新AppSettingView,整合头像、昵称及其他设置项的展示,提升用户体验。 - 增加多语言支持,更新Localizable.strings文件以适应新的设置项。
115 lines
3.5 KiB
Swift
115 lines
3.5 KiB
Swift
import Foundation
|
|
import ComposableArchitecture
|
|
|
|
@Reducer
|
|
struct AppSettingFeature {
|
|
@ObservableState
|
|
struct State: Equatable {
|
|
var nickname: String = ""
|
|
var avatarURL: String? = nil
|
|
var userInfo: UserInfo? = nil
|
|
var isLoadingUserInfo: Bool = false
|
|
var userInfoError: String? = nil
|
|
|
|
// WebView 导航状态
|
|
var showUserAgreement: Bool = false
|
|
var showPrivacyPolicy: Bool = false
|
|
}
|
|
|
|
enum Action: Equatable {
|
|
case onAppear
|
|
case editNicknameTapped
|
|
case logoutTapped
|
|
|
|
// 用户信息相关
|
|
case loadUserInfo
|
|
case userInfoLoaded(UserInfo?)
|
|
case userInfoLoadFailed(String)
|
|
|
|
// WebView 导航
|
|
case personalInfoPermissionsTapped
|
|
case helpTapped
|
|
case clearCacheTapped
|
|
case checkUpdatesTapped
|
|
case aboutUsTapped
|
|
|
|
// WebView 关闭
|
|
case userAgreementDismissed
|
|
case privacyPolicyDismissed
|
|
}
|
|
|
|
@Dependency(\.apiService) var apiService
|
|
|
|
var body: some ReducerOf<Self> {
|
|
Reduce { state, action in
|
|
switch action {
|
|
case .onAppear:
|
|
return .send(.loadUserInfo)
|
|
|
|
case .editNicknameTapped:
|
|
// 预留编辑昵称逻辑
|
|
return .none
|
|
|
|
case .logoutTapped:
|
|
// 预留登出逻辑
|
|
return .none
|
|
|
|
case .loadUserInfo:
|
|
state.isLoadingUserInfo = true
|
|
state.userInfoError = nil
|
|
return .run { send in
|
|
let currentUid = await UserInfoManager.getCurrentUserId()
|
|
if let userInfo = await UserInfoManager.fetchUserInfoFromServer(
|
|
uid: currentUid,
|
|
apiService: apiService
|
|
) {
|
|
await send(.userInfoLoaded(userInfo))
|
|
} else {
|
|
await send(.userInfoLoadFailed("获取用户信息失败"))
|
|
}
|
|
}
|
|
|
|
case let .userInfoLoaded(userInfo):
|
|
state.isLoadingUserInfo = false
|
|
state.userInfo = userInfo
|
|
state.nickname = userInfo?.nick ?? "hahahaha"
|
|
state.avatarURL = userInfo?.avatar
|
|
return .none
|
|
|
|
case let .userInfoLoadFailed(error):
|
|
state.isLoadingUserInfo = false
|
|
state.userInfoError = error
|
|
return .none
|
|
|
|
case .personalInfoPermissionsTapped:
|
|
state.showPrivacyPolicy = true
|
|
return .none
|
|
|
|
case .helpTapped:
|
|
state.showUserAgreement = true
|
|
return .none
|
|
|
|
case .clearCacheTapped:
|
|
// 预留清除缓存逻辑
|
|
return .none
|
|
|
|
case .checkUpdatesTapped:
|
|
// 预留检查更新逻辑
|
|
return .none
|
|
|
|
case .aboutUsTapped:
|
|
// 预留关于我们逻辑
|
|
return .none
|
|
|
|
case .userAgreementDismissed:
|
|
state.showUserAgreement = false
|
|
return .none
|
|
|
|
case .privacyPolicyDismissed:
|
|
state.showPrivacyPolicy = false
|
|
return .none
|
|
}
|
|
}
|
|
}
|
|
}
|