feat: 新增详情页功能以增强用户交互体验
- 在MeFeature中新增showDetail状态和selectedMoment属性,支持详情页的展示。 - 更新Action枚举,添加showDetail和detailDismissed动作以处理详情页逻辑。 - 在MeView中整合showDetail状态与selectedMoment,优化详情页导航和交互逻辑。 - 通过viewStore发送动作,提升状态管理的清晰度与可维护性。
This commit is contained in:
@@ -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
|
||||
// 新增:DetailView相关Action
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user