feat: 新增导航功能与设置页面支持
- 在MainFeature中新增导航路径和设置页面状态管理,支持页面导航。 - 更新MainView以集成导航功能,添加测试按钮以触发导航。 - 在MeFeature中新增设置按钮点击事件,交由MainFeature处理。 - 增强MeView以支持设置按钮,提升用户体验。
This commit is contained in:
@@ -12,6 +12,15 @@ struct MainFeature: Reducer {
|
||||
var feedList: FeedListFeature.State = .init()
|
||||
var me: MeFeature.State = .init()
|
||||
var accountModel: AccountModel? = nil
|
||||
// 新增:导航路径和设置页面 State
|
||||
var navigationPath: [Destination] = []
|
||||
var settingState: SettingFeature.State? = nil
|
||||
}
|
||||
|
||||
// 新增:导航目标
|
||||
enum Destination: Hashable, Equatable {
|
||||
case setting
|
||||
case test
|
||||
}
|
||||
|
||||
@CasePathable
|
||||
@@ -21,6 +30,11 @@ struct MainFeature: Reducer {
|
||||
case feedList(FeedListFeature.Action)
|
||||
case me(MeFeature.Action)
|
||||
case accountModelLoaded(AccountModel?)
|
||||
// 新增:导航相关
|
||||
case navigationPathChanged([Destination])
|
||||
case settingButtonTapped
|
||||
case settingAction(SettingFeature.Action)
|
||||
case testButtonTapped
|
||||
}
|
||||
|
||||
var body: some ReducerOf<Self> {
|
||||
@@ -39,6 +53,7 @@ struct MainFeature: Reducer {
|
||||
}
|
||||
case .selectTab(let tab):
|
||||
state.selectedTab = tab
|
||||
state.navigationPath = []
|
||||
if tab == .other, let uidStr = state.accountModel?.uid, let uid = Int(uidStr), uid > 0 {
|
||||
state.me = MeFeature.State(uid: uid)
|
||||
return .send(.me(.onAppear))
|
||||
@@ -49,9 +64,34 @@ struct MainFeature: Reducer {
|
||||
case let .accountModelLoaded(accountModel):
|
||||
state.accountModel = accountModel
|
||||
return .none
|
||||
case .me(.settingButtonTapped):
|
||||
// 触发 push 到设置页
|
||||
state.settingState = SettingFeature.State()
|
||||
state.navigationPath.append(.setting)
|
||||
return .none
|
||||
case .me:
|
||||
return .none
|
||||
case .navigationPathChanged(let newPath):
|
||||
// pop 回来时清空 settingState
|
||||
if !newPath.contains(.setting) {
|
||||
state.settingState = nil
|
||||
}
|
||||
state.navigationPath = newPath
|
||||
return .none
|
||||
case .settingButtonTapped:
|
||||
state.settingState = SettingFeature.State()
|
||||
state.navigationPath.append(.setting)
|
||||
return .none
|
||||
case .settingAction:
|
||||
return .none
|
||||
case .testButtonTapped:
|
||||
state.navigationPath.append(.test)
|
||||
return .none
|
||||
}
|
||||
}
|
||||
// 设置页作用域
|
||||
.ifLet(\ .settingState, action: /Action.settingAction) {
|
||||
SettingFeature()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user