feat: 更新iOS和Podfile的部署目标以支持新版本

- 将iOS平台版本更新至17,确保与最新的开发环境兼容。
- 更新Podfile中的iOS部署目标至17.0,确保依赖项与新版本兼容。
- 修改Podfile.lock以反映新的依赖项版本,确保项目一致性。
- 在多个视图中重构代码,优化状态管理和视图逻辑,提升用户体验。
This commit is contained in:
edwinQQQ
2025-07-29 15:59:09 +08:00
parent 567b1f3fd9
commit 3ec1b1302f
12 changed files with 1053 additions and 1131 deletions

View File

@@ -172,35 +172,35 @@ struct FeedListContentView: View {
@Binding var previewCurrentIndex: Int
var body: some View {
WithViewStore(self.store, observe: { $0 }) { viewStore in
if viewStore.isLoading {
WithPerceptionTracking {
if store.isLoading {
LoadingView()
} else if let error = viewStore.error {
} else if let error = store.error {
ErrorView(error: error)
} else if viewStore.moments.isEmpty {
} else if store.moments.isEmpty {
EmptyView()
} else {
MomentsListView(
moments: viewStore.moments,
hasMore: viewStore.hasMore,
isLoadingMore: viewStore.isLoadingMore,
moments: store.moments,
hasMore: store.hasMore,
isLoadingMore: store.isLoadingMore,
onImageTap: { images, tappedIndex in
previewCurrentIndex = tappedIndex
previewItem = PreviewItem(images: images, index: tappedIndex)
},
onMomentTap: { moment in
viewStore.send(.showDetail(moment))
store.send(.showDetail(moment))
},
onLikeTap: { dynamicId, uid, likedUid, worldId in
viewStore.send(.likeDynamic(dynamicId, uid, likedUid, worldId))
store.send(.likeDynamic(dynamicId, uid, likedUid, worldId))
},
onLoadMore: {
viewStore.send(.loadMore)
store.send(.loadMore)
},
onRefresh: {
viewStore.send(.reload)
store.send(.reload)
},
likeLoadingDynamicIds: viewStore.likeLoadingDynamicIds
likeLoadingDynamicIds: store.likeLoadingDynamicIds
)
}
}
@@ -214,59 +214,56 @@ struct FeedListView: View {
@State private var previewCurrentIndex: Int = 0
var body: some View {
WithViewStore(self.store, observe: { $0 }) { viewStore in
WithPerceptionTracking {
GeometryReader { geometry in
ZStack {
//
BackgroundView()
VStack(alignment: .center, spacing: 0) {
//
TopBarView {
viewStore.send(.editFeedButtonTapped)
}
//
Image("Volume")
.frame(width: 56, height: 41)
.padding(.top, 16)
Text(LocalizedString("feedList.slogan", comment: "The disease is like a cruel ruler,\nand time is our most precious treasure.\nEvery moment we live is a victory\nagainst the inevitable."))
.font(.system(size: 16))
.multilineTextAlignment(.leading)
.foregroundColor(.white.opacity(0.9))
.padding(.horizontal, 30)
.padding(.bottom, 30)
//
FeedListContentView(
store: store,
previewItem: $previewItem,
previewCurrentIndex: $previewCurrentIndex
)
Spacer()
}
.frame(maxWidth: .infinity, alignment: .top)
}
WithPerceptionTracking {
GeometryReader { geometry in
ZStack {
//
BackgroundView()
// API Loading
APILoadingEffectView()
VStack(alignment: .center, spacing: 0) {
//
TopBarView {
store.send(.editFeedButtonTapped)
}
//
Image("Volume")
.frame(width: 56, height: 41)
.padding(.top, 16)
Text(LocalizedString("feedList.slogan", comment: "The disease is like a cruel ruler,\nand time is our most precious treasure.\nEvery moment we live is a victory\nagainst the inevitable."))
.font(.system(size: 16))
.multilineTextAlignment(.leading)
.foregroundColor(.white.opacity(0.9))
.padding(.horizontal, 30)
.padding(.bottom, 30)
//
FeedListContentView(
store: store,
previewItem: $previewItem,
previewCurrentIndex: $previewCurrentIndex
)
Spacer()
}
}
.onAppear {
viewStore.send(.onAppear)
}
.onReceive(NotificationCenter.default.publisher(for: Notification.Name("reloadFeedList"))) { _ in
viewStore.send(.reload)
}
.sheet(isPresented: viewStore.binding(
get: \.isEditFeedPresented,
send: { $0 ? .editFeedButtonTapped : .editFeedDismissed }
)) {
}
.onAppear {
store.send(.onAppear)
}
.onRefresh {
store.send(.reload)
}
//
.sheet(isPresented: store.binding(
get: \.showEditFeed,
send: { _ in .editFeedDismissed }
)) {
WithPerceptionTracking {
EditFeedView(
onDismiss: {
viewStore.send(.editFeedDismissed)
store.send(.editFeedDismissed)
},
store: Store(
initialState: EditFeedFeature.State()
@@ -275,32 +272,29 @@ struct FeedListView: View {
}
)
}
//
.fullScreenCover(item: $previewItem) { item in
ImagePreviewPager(
images: item.images as [String],
currentIndex: $previewCurrentIndex
) {
previewItem = nil
}
}
//
.navigationDestination(isPresented: store.binding(
get: \.showDetail,
send: { _ in .detailDismissed }
)) {
if let selectedMoment = store.selectedMoment {
DetailView(
store: Store(
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
},
onDismiss: {
store.send(.detailDismissed)
}
)
}
// DetailView
.navigationDestination(isPresented: viewStore.binding(
get: \.showDetail,
send: { _ in .detailDismissed }
)) {
if let selectedMoment = viewStore.selectedMoment {
DetailView(
store: Store(
initialState: DetailFeature.State(moment: selectedMoment)
) {
DetailFeature()
},
onDismiss: {
viewStore.send(.detailDismissed)
}
)
}
}
//
.fullScreenCover(item: $previewItem) { item in
ImagePreviewPager(images: item.images as [String], currentIndex: $previewCurrentIndex) {
previewItem = nil
}
}
}