Kotlin,swiftUI UI 不刷新

问题描述 投票:0回答:0

我正在选择一个项目,该项目使用 SWIFTUI (TCA) 并集成了 kotlin 来处理 Android 和 iOS 的业务逻辑。 但是这个项目已经没有人支持或提供建议。 我对这种逻辑完全停顿了。

我面临一个问题,即在创建附加对象后 Listview 没有刷新。 我想这是由于状态没有更新。

因为我很少接触 TCA,更不用说 Kotlin 了。 我可以更新它吗(例如:教程、简单的工作流程)?

下面是一些代码,它似乎用工厂创建了一个 globalDependencies。

谁能帮帮我。

extension ObjectiveEvidenceListEnvironment {
    init(globalDependencies: GlobalDependencies) {
        
        
        getNCNObservationDetails = { nonConformityId in
            createPublisher(wrapper: globalDependencies.factory.getNonConformity().getNonConformityFields(nonConformityId: nonConformityId))
                .compactMap { $0 }
                .mapToNSError()
                .eraseToEffect()
        }    
    }
}
import SwiftUI
import ComposableArchitecture
import SVCore

struct ObjectiveEvidenceListView: View {
    let store: Store<ObjectiveEvidenceListState, LifecycleAction<ObjectiveEvidenceListAction>>
    
    var body: some View {
        WithViewStore(store) { viewStore in

            VStack {
                List {
                    Section(header: Text("CUSTOM")) {
                        ForEach (viewStore.customEvidences) { evidence in
                            
                            NavigationLink(
                                destination: {
                                    ObjectiveEvidenceDetailsView.build(tag: evidence.id, using: NCNDetailsStruct(detailsID: evidence.id, isCustom: true))
                                },
                                label: {
                                    VStack(alignment: .leading){
                                        //Text("HI, i am here")
                                        Text(evidence.name ?? "")
                                            .foregroundColor(.fl_grayText)
                                    }
                                }
                            )
                        }.onDelete(perform: { viewStore.send(.delete($0)) })
                    }
                    
                    
                    Section(header: Text("CHECKLIST")) {
                        var _y = print(":: defectEvidences = \(viewStore.defectEvidences)")
                        ForEach (viewStore.defectEvidences) { defect in
                            NavigationLink(
                                destination: {
                                    ObjectiveEvidenceDetailsView.build(tag: defect.id, using: NCNDetailsStruct(detailsID: defect.id, isCustom: false))
                                },
                                label: {
                                    VStack(alignment: .leading){
                                        Text(defect.name ?? "")
                                            .foregroundColor(.fl_grayText)
                                    }
                                }
                            )
                        }
                    }
                }
                .refreshable {
                    print(":: .refreshable ")
                }
                .listStyle(GroupedListStyle())
                .navigationBarItems(
                    trailing:
                    
                        NavigationLink(
                            destination: IfLetStore(
                                self.store.scope(
                                    state: \.selectedEvidence?.value,
                                    action: { LifecycleAction.action(ObjectiveEvidenceListAction.evidence($0)) }
                                ),
                                then: ObjectiveEvidenceDetailsView.init(store:)
                            ),
                            isActive: viewStore.binding(
                                get: \.navigateToNewEvidence,
                                send: ObjectiveEvidenceListAction.navigateToNewEvidence
                            ),
                            label: { Text("+ Create") }
                        )
                )
                
            }
        }
    }
}

extension ObjectiveEvidenceListView: BuildableView {
    init(viewModel: Store<ObjectiveEvidenceListState, LifecycleAction<ObjectiveEvidenceListAction>>) {
        store = viewModel
    }
}

import Dip
import SVCore

extension ObjectiveEvidenceListView: Composable {
    static func configure(_ container: DependencyContainer) {
        container.register(.weakSingleton) { (details: [SVCore.NonConformityDetails], factory: InteractorFactory) -> Store<ObjectiveEvidenceListState, LifecycleAction<ObjectiveEvidenceListAction>> in
            let dependencies = GlobalDependencies(factory: factory)
            return Store(
                initialState: ObjectiveEvidenceListState(details: details.first!, customDetails: details.last!),
                reducer: ObjectiveEvidenceListReducer.reducer,
                environment: GlobalEnvironment<ObjectiveEvidenceListEnvironment>.live(
                    environment: ObjectiveEvidenceListEnvironment(globalDependencies: dependencies),
                    dependencies: dependencies
                )
            )
        }
    }
}

struct NCNDetailsStruct {
    var detailsID: String
    var isCustom: Bool
}

import SwiftUI
import ComposableArchitecture
import SVCore
import IdentifiedCollections


enum ObjectiveEvidenceListAction {

    case createCustomEvidence(nonConformity: String)

    case recievedNonConformityId(Result<String, NSError>)
    case recievedEvidences(Result<NonConformityFields, NSError>)

    
    case recievedChecklistEvidences(Result<[NonConformityDetails.CustomNonConformity], NSError>)
    case evidence(ObjectiveEvidenceDetailsAction)
    case navigateToNewEvidence(isActive: Bool)
    
    case delete(IndexSet)
    case didAppear
    case completed(VoidResult<NSError>)
}

struct ObjectiveEvidenceListState: Equatable {
    var details: NonConformityDetails
    var customEvidences: IdentifiedArrayOf<NonConformityImages> = []
    var defectEvidences: IdentifiedArrayOf<Defect> = []
    var defects: IdentifiedArrayOf<Defect> = []
    var navigateToSelection: Bool = false
    var selectedEvidence: Identified<String, ObjectiveEvidenceDetailsState>?
//    var selectedNonConformity: Identified<String, NCNObservationDetailsState>?
    
    init(details: NonConformityDetails, customDetails: NonConformityDetails) {
        self.details = details
        print(":: self.details = \(self.details)")
        switch details {
        case let section as NonConformityDetails.CustomNonConformity:
            self.customEvidences = IdentifiedArray(uniqueElements: section.evidence)
        default:
            break
        }

    }
    mutating func update(details: NonConformityDetails) {
        //    self.details = details
        switch details {
        case let section as NonConformityDetails.CustomNonConformity:
            self.customEvidences = IdentifiedArray(uniqueElements: section.evidence)
        case let section as NonConformityDetails.SectionNonConformity:
            self.defectEvidences = IdentifiedArray(uniqueElements: section.defects)
            self.defects = IdentifiedArray(uniqueElements: section.defects)
        default:
            break
        }
    }
}


extension ObjectiveEvidenceListState {
    var navigateToNewEvidence: Bool {
        return selectedEvidence != nil
    }
}

extension NonConformityImages: Identifiable {}

我能做什么 使用状态更新动态获取列表更新。

ios kotlin swiftui factory tca
© www.soinside.com 2019 - 2024. All rights reserved.