feat: 更新CreateFeedFeature和FeedListFeature以增强发布和关闭功能
- 修改CreateFeedFeature中的发布逻辑,确保在发布成功时同时发送关闭通知。 - 更新FeedListFeature以在创建Feed成功时触发刷新并关闭编辑页面。 - 优化CreateFeedView中的键盘管理和通知处理,提升用户体验。
This commit is contained in:
@@ -83,9 +83,7 @@ struct CreateFeedFeature {
|
||||
newImages.append(image)
|
||||
}
|
||||
}
|
||||
await MainActor.run {
|
||||
send(.updateProcessedImages(newImages))
|
||||
}
|
||||
await send(.updateProcessedImages(newImages))
|
||||
}
|
||||
|
||||
case .updateProcessedImages(let images):
|
||||
@@ -239,17 +237,26 @@ struct CreateFeedFeature {
|
||||
return .none
|
||||
|
||||
case .dismissView:
|
||||
guard isPresented else {
|
||||
return .none
|
||||
}
|
||||
// 始终发送通知,让外层处理关闭逻辑
|
||||
return .run { _ in
|
||||
await dismiss()
|
||||
await MainActor.run {
|
||||
NotificationCenter.default.post(name: .init("CreateFeedDismiss"), object: nil)
|
||||
}
|
||||
}
|
||||
case .publishSuccess:
|
||||
// 发送通知给外层刷新列表
|
||||
return .run { _ in
|
||||
// 发送通知给外层刷新列表和关闭页面
|
||||
return .merge(
|
||||
.run { _ in
|
||||
await MainActor.run {
|
||||
NotificationCenter.default.post(name: .init("CreateFeedPublishSuccess"), object: nil)
|
||||
}
|
||||
},
|
||||
.run { _ in
|
||||
await MainActor.run {
|
||||
NotificationCenter.default.post(name: .init("CreateFeedDismiss"), object: nil)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -145,8 +145,11 @@ struct FeedListFeature {
|
||||
state.isEditFeedPresented = false
|
||||
return .none
|
||||
case .createFeedPublishSuccess:
|
||||
// CreateFeed发布成功,触发刷新
|
||||
return .send(.reload)
|
||||
// CreateFeed发布成功,触发刷新并关闭编辑页面
|
||||
return .merge(
|
||||
.send(.reload),
|
||||
.send(.editFeedDismissed)
|
||||
)
|
||||
case .testButtonTapped:
|
||||
debugInfoSync("[LOG] FeedListFeature testButtonTapped")
|
||||
return .none
|
||||
|
@@ -8,7 +8,6 @@ struct CreateFeedView: View {
|
||||
@FocusState private var isTextEditorFocused: Bool
|
||||
|
||||
var body: some View {
|
||||
WithPerceptionTracking {
|
||||
NavigationStack {
|
||||
GeometryReader { geometry in
|
||||
VStack(spacing: 0) {
|
||||
@@ -98,17 +97,23 @@ struct CreateFeedView: View {
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { notification in
|
||||
if let _ = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
|
||||
DispatchQueue.main.async {
|
||||
isKeyboardVisible = true
|
||||
}
|
||||
}
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
|
||||
DispatchQueue.main.async {
|
||||
isKeyboardVisible = false
|
||||
}
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: .init("CreateFeedDismiss"))) { _ in
|
||||
store.send(.dismissView)
|
||||
}
|
||||
.onDisappear {
|
||||
isKeyboardVisible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - 工具栏按钮计算属性
|
||||
private var toolbarButtonText: String {
|
||||
|
@@ -255,16 +255,19 @@ struct FeedListView: View {
|
||||
}
|
||||
// 新增:编辑动态页面
|
||||
.sheet(isPresented: viewStore.binding(get: \.isEditFeedPresented, send: { _ in .editFeedDismissed })) {
|
||||
CreateFeedView(
|
||||
store: Store(
|
||||
let createFeedStore = Store(
|
||||
initialState: CreateFeedFeature.State()
|
||||
) {
|
||||
CreateFeedFeature()
|
||||
}
|
||||
)
|
||||
|
||||
CreateFeedView(store: createFeedStore)
|
||||
.onReceive(NotificationCenter.default.publisher(for: .init("CreateFeedPublishSuccess"))) { _ in
|
||||
store.send(.createFeedPublishSuccess)
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: .init("CreateFeedDismiss"))) { _ in
|
||||
store.send(.editFeedDismissed)
|
||||
}
|
||||
}
|
||||
// 新增:详情页导航
|
||||
.navigationDestination(isPresented: viewStore.binding(get: \.showDetail, send: { _ in .detailDismissed })) {
|
||||
|
Reference in New Issue
Block a user