0

我有一个带有 TabView 的应用程序。这些选项卡之一 (1) 显示 CartView。还有另一个选项卡 (2) 可将项目添加到购物车并允许导航到 CartView。购物车的内容保存在 EnvironmentObject CartModel 对象中。我遇到的问题是,当我将项目添加到购物车并导航到 CartView 时,我能够看到这些项目。如果我退出并添加其他内容,只要我在 tab(2) 中,我仍然可以看到所有项目。但是,当我尝试通过 tab(1) 访问购物车时,我什么也看不到。希望得到一些关于这里发生的事情的指示。显然,CartView 可以在其中一个选项卡上访问底层模型代码。

相关代码:选项卡式视图:

 var body: some View {
    NavigationView {
        TabView(selection: $selectedTab) {
            StoreByCategoryView()
                .tag(0)
                .tabItem { Image(systemName: "bag") }
            CreditDetailsView()
                .tag(1)
                .tabItem { Image(systemName: "creditcard") }
            CartView()
                .tag(2)
                .tabItem { Image(systemName: "cart") }
            SettingsView()
                .tag(3)
                .tabItem { Image(systemName: "gearshape") }
            SocialMainView()
                .tag(4)
                .tabItem { Image(systemName: "globe") }
            
        }
    }
    .navigationViewStyle(StackNavigationViewStyle())
    .navigationBarHidden(true)
    .padding(.horizontal, 5)
}

购物车视图

struct CartView: View {
    @EnvironmentObject var cartModel: CartModel
    
    var body: some View {
        let _ = print("CartView")
        if cartModel.totalQuantity == 0 {
            Text("Nothing present in the cart")
        } else {
            let _ = print("CartView --- ELSE")
            VStack(alignment:.leading , spacing: 5){
                let _ = print("CartView --- VSATCK")
                List {
                    ScrollView(/*@START_MENU_TOKEN@*/.vertical/*@END_MENU_TOKEN@*/, showsIndicators: false){
                        ForEach(Array(cartModel.productQuantityMap.keys), id: \.self) {(product) in
                            CartItemView(product: product)
                        }
                    }
                }
                Group {
                    Divider()
                    HStack {
                        Spacer()
                        Text("Total: $A\(cartModel.totalValue)"  as String)
                            .fontWeight(.semibold)
                            .foregroundColor(.primary)
                    }
                    .padding(.bottom)
                    Divider()
                }
                
                HStack(alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: /*@START_MENU_TOKEN@*/nil/*@END_MENU_TOKEN@*/){
                    Spacer()
                    Button(action: {
                        checkoutModel.checkout(productQty: cartModel.productQuantityMap, customertoken: session.customerAccessToken)
                    }){
                        Text("Checkout")
                            .font(.system(.title2, design: .rounded))
                            .fontWeight(.semibold)
                            .foregroundColor(.white)
                        
                    }
                    .frame(width: 200, height: 35)
                    .padding(15)
                    .background(Color(UIColor(red: 0.39, green: 1.00, blue: 0.85, alpha: 1.00)))
                    .clipShape(Capsule())
                    Spacer()
                }
                
            }
            ...
        }
    }
}
4

0 回答 0