feat: 新增详情页功能以增强用户交互体验

- 在MeFeature中新增showDetail状态和selectedMoment属性,支持详情页的展示。
- 更新Action枚举,添加showDetail和detailDismissed动作以处理详情页逻辑。
- 在MeView中整合showDetail状态与selectedMoment,优化详情页导航和交互逻辑。
- 通过viewStore发送动作,提升状态管理的清晰度与可维护性。
This commit is contained in:
edwinQQQ
2025-07-28 17:32:29 +08:00
parent f9ff572a30
commit 62dcf591f0
2 changed files with 22 additions and 10 deletions

View File

@@ -18,6 +18,9 @@ struct MeFeature {
var page: Int = 1
var pageSize: Int = 20
var uid: Int = 0
// DetailView
var showDetail: Bool = false
var selectedMoment: MomentsInfo?
}
enum Action: Equatable {
@@ -28,6 +31,9 @@ struct MeFeature {
case momentsResponse(Result<MyMomentsResponse, APIError>)
//
case settingButtonTapped
// DetailViewAction
case showDetail(MomentsInfo)
case detailDismissed
}
func reduce(into state: inout State, action: Action) -> Effect<Action> {
@@ -82,6 +88,14 @@ struct MeFeature {
case .settingButtonTapped:
// MainFeature
return .none
case .showDetail(let moment):
state.selectedMoment = moment
state.showDetail = true
return .none
case .detailDismissed:
state.showDetail = false
state.selectedMoment = nil
return .none
}
}

View File

@@ -6,9 +6,6 @@ struct MeView: View {
//
@State private var previewItem: PreviewItem? = nil
@State private var previewCurrentIndex: Int = 0
//
@State private var showDetail: Bool = false
@State private var selectedMoment: MomentsInfo? = nil
var body: some View {
WithViewStore(self.store, observe: { $0 }) { viewStore in
@@ -59,13 +56,16 @@ struct MeView: View {
}
//
.fullScreenCover(item: $previewItem) { item in
ImagePreviewPager(images: item.images, currentIndex: $previewCurrentIndex) {
ImagePreviewPager(images: item.images as [String], currentIndex: $previewCurrentIndex) {
previewItem = nil
}
}
//
.navigationDestination(isPresented: $showDetail) {
if let selectedMoment = selectedMoment {
.navigationDestination(isPresented: viewStore.binding(
get: \.showDetail,
send: { _ in .detailDismissed }
)) {
if let selectedMoment = viewStore.selectedMoment {
DetailView(
store: Store(
initialState: DetailFeature.State(moment: selectedMoment)
@@ -73,8 +73,7 @@ struct MeView: View {
DetailFeature()
},
onDismiss: {
showDetail = false
selectedMoment = nil
viewStore.send(.detailDismissed)
}
)
}
@@ -166,8 +165,7 @@ struct MeView: View {
//
},
onCardTap: {
self.selectedMoment = moment
self.showDetail = true
viewStore.send(.showDetail(moment))
}
)
.padding(.horizontal, 12)