
- 在CreateFeedFeature中新增isPresented依赖,确保在适当的上下文中执行视图关闭操作。 - 在FeedFeature中优化状态管理,简化CreateFeedView的呈现逻辑。 - 新增FeedListFeature和MainFeature,整合FeedListView和底部导航功能,提升用户体验。 - 更新HomeView和SplashView以集成MainView,确保应用结构一致性。 - 在多个视图中调整状态管理和导航逻辑,增强可维护性和用户体验。
128 lines
4.1 KiB
Swift
128 lines
4.1 KiB
Swift
import Foundation
|
||
import ComposableArchitecture
|
||
|
||
@Reducer
|
||
struct HomeFeature {
|
||
enum Route: Equatable {
|
||
case createFeed
|
||
}
|
||
|
||
@ObservableState
|
||
struct State: Equatable, Sendable {
|
||
var isInitialized = false
|
||
var userInfo: UserInfo?
|
||
var accountModel: AccountModel?
|
||
var error: String?
|
||
|
||
// 设置页面相关状态
|
||
var isSettingPresented = false
|
||
var settingState = SettingFeature.State()
|
||
|
||
// 新增:Feed 状态
|
||
var feedState = FeedFeature.State()
|
||
|
||
// 新增:登出状态
|
||
var isLoggedOut = false
|
||
|
||
// 新增:路由状态
|
||
var route: Route? = nil
|
||
}
|
||
|
||
@CasePathable
|
||
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)
|
||
|
||
// 新增:Feed actions
|
||
case feed(FeedFeature.Action)
|
||
|
||
// 新增:登出完成
|
||
case logoutCompleted
|
||
|
||
// 新增:路由 actions
|
||
case showCreateFeed
|
||
case createFeedDismissed
|
||
}
|
||
|
||
var body: some Reducer<State, Action> {
|
||
// Reducer<State, Action>.combine([
|
||
// Reducer { state, action in
|
||
// switch action {
|
||
// case .onAppear:
|
||
// guard !state.isInitialized else {
|
||
// return Effect.none
|
||
// }
|
||
// state.isInitialized = true
|
||
// return .concatenate(
|
||
// .send(.loadUserInfo),
|
||
// .send(.loadAccountModel)
|
||
// )
|
||
// case .loadUserInfo:
|
||
// return .run { send in
|
||
// let userInfo = await UserInfoManager.getUserInfo()
|
||
// await send(.userInfoLoaded(userInfo))
|
||
// }
|
||
// case let .userInfoLoaded(userInfo):
|
||
// state.userInfo = userInfo
|
||
// return Effect.none
|
||
// case .loadAccountModel:
|
||
// return .run { send in
|
||
// let accountModel = await UserInfoManager.getAccountModel()
|
||
// await send(.accountModelLoaded(accountModel))
|
||
// }
|
||
// case let .accountModelLoaded(accountModel):
|
||
// state.accountModel = accountModel
|
||
// return Effect.none
|
||
// case .logoutTapped:
|
||
// return .send(.logout)
|
||
// case .logout:
|
||
// return .run { send in
|
||
// await UserInfoManager.clearAllAuthenticationData()
|
||
// await send(.logoutCompleted)
|
||
// }
|
||
// case .logoutCompleted:
|
||
// state.isLoggedOut = true
|
||
// return Effect.none
|
||
// case .settingDismissed:
|
||
// state.isSettingPresented = false
|
||
// return Effect.none
|
||
// case .setting:
|
||
// return Effect.none
|
||
// case .showCreateFeed:
|
||
// state.route = .createFeed
|
||
// return Effect.none
|
||
// case .createFeedDismissed:
|
||
// state.route = nil
|
||
// return Effect.none
|
||
// case .feed:
|
||
// return Effect.none
|
||
// }
|
||
// },
|
||
// Scope(
|
||
// state: \State.settingState,
|
||
// action: /Action.setting,
|
||
// child: SettingFeature()
|
||
// ),
|
||
// Scope(
|
||
// state: \State.feedState,
|
||
// action: /Action.feed,
|
||
// child: FeedFeature()
|
||
// )
|
||
// ])
|
||
}
|
||
}
|
||
|
||
// 移除:未使用的通知名称定义
|
||
// extension Notification.Name {
|
||
// static let homeLogout = Notification.Name("homeLogout")
|
||
// }
|