feat: 更新文档和视图以支持iOS 17及优化用户体验

- 更新Yana项目文档,调整适用版本至iOS 17,确保与最新开发环境兼容。
- 在多个视图中重构代码,优化状态管理和视图逻辑,提升用户体验。
- 添加默认初始化器以简化状态管理,确保各个Feature的状态一致性。
- 更新视图组件,移除不必要的硬编码,增强代码可读性和维护性。
- 修复多个视图中的逻辑错误,确保功能正常运行。
This commit is contained in:
edwinQQQ
2025-07-29 17:57:42 +08:00
parent 3ec1b1302f
commit 3d00e459e3
28 changed files with 689 additions and 554 deletions

View File

@@ -172,37 +172,35 @@ struct FeedListContentView: View {
@Binding var previewCurrentIndex: Int
var body: some View {
WithPerceptionTracking {
if store.isLoading {
LoadingView()
} else if let error = store.error {
ErrorView(error: error)
} else if store.moments.isEmpty {
EmptyView()
} else {
MomentsListView(
moments: store.moments,
hasMore: store.hasMore,
isLoadingMore: store.isLoadingMore,
onImageTap: { images, tappedIndex in
previewCurrentIndex = tappedIndex
previewItem = PreviewItem(images: images, index: tappedIndex)
},
onMomentTap: { moment in
store.send(.showDetail(moment))
},
onLikeTap: { dynamicId, uid, likedUid, worldId in
store.send(.likeDynamic(dynamicId, uid, likedUid, worldId))
},
onLoadMore: {
store.send(.loadMore)
},
onRefresh: {
store.send(.reload)
},
likeLoadingDynamicIds: store.likeLoadingDynamicIds
)
}
if store.isLoading {
FeedListLoadingView()
} else if let error = store.error {
ErrorView(error: error)
} else if store.moments.isEmpty {
EmptyView()
} else {
MomentsListView(
moments: store.moments,
hasMore: store.hasMore,
isLoadingMore: store.isLoadingMore,
onImageTap: { images, tappedIndex in
previewCurrentIndex = tappedIndex
previewItem = PreviewItem(images: images, index: tappedIndex)
},
onMomentTap: { moment in
store.send(.showDetail(moment))
},
onLikeTap: { dynamicId, uid, likedUid, worldId in
store.send(.likeDynamic(dynamicId, uid, likedUid, worldId))
},
onLoadMore: {
store.send(.loadMore)
},
onRefresh: {
store.send(.reload)
},
likeLoadingDynamicIds: store.likeLoadingDynamicIds
)
}
}
}
@@ -214,7 +212,7 @@ struct FeedListView: View {
@State private var previewCurrentIndex: Int = 0
var body: some View {
WithPerceptionTracking {
WithViewStore(store, observe: { $0 }) { viewStore in
GeometryReader { geometry in
ZStack {
//
@@ -252,41 +250,30 @@ struct FeedListView: View {
.onAppear {
store.send(.onAppear)
}
.onRefresh {
.refreshable {
store.send(.reload)
}
//
.sheet(isPresented: store.binding(
get: \.showEditFeed,
send: { _ in .editFeedDismissed }
)) {
WithPerceptionTracking {
EditFeedView(
onDismiss: {
store.send(.editFeedDismissed)
},
store: Store(
initialState: EditFeedFeature.State()
) {
EditFeedFeature()
}
)
}
.sheet(isPresented: viewStore.binding(get: \.isEditFeedPresented, send: { _ in .editFeedDismissed })) {
EditFeedView(
onDismiss: {
store.send(.editFeedDismissed)
},
store: Store(
initialState: EditFeedFeature.State()
) {
EditFeedFeature()
}
)
}
//
.navigationDestination(isPresented: store.binding(
get: \.showDetail,
send: { _ in .detailDismissed }
)) {
if let selectedMoment = store.selectedMoment {
.navigationDestination(isPresented: viewStore.binding(get: \.showDetail, send: { _ in .detailDismissed })) {
if let selectedMoment = viewStore.selectedMoment {
DetailView(
store: Store(
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
},
onDismiss: {
store.send(.detailDismissed)
}
)
}