feat: 更新动态请求与详情视图以增强用户交互体验

- 修改LikeDynamicRequest结构体,调整queryParameters和bodyParameters的定义,确保请求参数正确传递。
- 在DetailFeature中新增当前用户ID的加载逻辑,提升动态详情的交互性。
- 更新FeedListFeature以支持点赞功能的状态管理,增强用户体验。
- 在DetailView中实现关闭回调,优化动态详情视图的用户交互。
- 改进OptimizedDynamicCardView以支持点赞按钮的交互逻辑,提升界面友好性。
This commit is contained in:
edwinQQQ
2025-07-28 16:05:11 +08:00
parent de2f05f545
commit e286229f6f
6 changed files with 320 additions and 87 deletions

View File

@@ -80,10 +80,12 @@ struct MomentCardView: View {
let index: Int
let onImageTap: ([String], Int) -> Void
let onTap: () -> Void
let onLikeTap: (Int, Int, Int, Int) -> Void
let onLoadMore: () -> Void
let isLastItem: Bool
let hasMore: Bool
let isLoadingMore: Bool
let isLikeLoading: Bool
var body: some View {
VStack(spacing: 16) {
@@ -92,7 +94,9 @@ struct MomentCardView: View {
allMoments: allMoments,
currentIndex: index,
onImageTap: onImageTap,
onLikeTap: { _, _,_,_ in }
onLikeTap: onLikeTap,
isLikeLoading: isLikeLoading,
isDetailMode: false
)
.onTapGesture {
onTap()
@@ -117,7 +121,9 @@ struct MomentsListView: View {
let isLoadingMore: Bool
let onImageTap: ([String], Int) -> Void
let onMomentTap: (MomentsInfo) -> Void
let onLikeTap: (Int, Int, Int, Int) -> Void
let onLoadMore: () -> Void
let likeLoadingDynamicIds: Set<Int>
var body: some View {
ScrollView {
@@ -131,10 +137,12 @@ struct MomentsListView: View {
onTap: {
onMomentTap(moment)
},
onLikeTap: onLikeTap,
onLoadMore: onLoadMore,
isLastItem: index == moments.count - 1,
hasMore: hasMore,
isLoadingMore: isLoadingMore
isLoadingMore: isLoadingMore,
isLikeLoading: likeLoadingDynamicIds.contains(moment.dynamicId)
)
}
@@ -182,9 +190,13 @@ struct FeedListContentView: View {
onMomentTap: { moment in
viewStore.send(.showDetail(moment))
},
onLikeTap: { dynamicId, uid, likedUid, worldId in
viewStore.send(.likeDynamic(dynamicId, uid, likedUid, worldId))
},
onLoadMore: {
viewStore.send(.loadMore)
}
},
likeLoadingDynamicIds: viewStore.likeLoadingDynamicIds
)
}
}
@@ -263,12 +275,7 @@ struct FeedListView: View {
// DetailView
.navigationDestination(isPresented: viewStore.binding(
get: \.showDetail,
send: { isPresented in
if !isPresented {
return .detailDismissed
}
return .detailDismissed
}
send: { _ in .detailDismissed }
)) {
if let selectedMoment = viewStore.selectedMoment {
DetailView(
@@ -276,6 +283,9 @@ struct FeedListView: View {
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
},
onDismiss: {
viewStore.send(.detailDismissed)
}
)
}