Swift
Swift

Reputation: 1182

on dismiss() view unable to get update serviceCall in HomeView in SwiftUI

I have HomeView here i am showing favMenu data from favViewModel.fetchFavList. now in HomeView addmore click on i got to FavouriteView here in save button service call i updated the favViewModel.fetchFavList but the same updated favViewModel.fetchFavList is not reflecting in HomeView after dismiss the FavouriteView.. why?? the old list only showing??

HomeView code:

struct HomeView: View {

@StateObject private var favViewModel = FavMenuViewModel()
@State private var favMenu: [AllMenu] = []

var body: some View {
    ZStack {
        VStack{
            favView()
        }
    }
    .onAppear {
        favViewModel.fetchFavList { status in
            if status{
                favMenu = favViewModel.favMenuList.filter { $0.isSelected == true }
            }
        }
    }
    .navigationDestination(isPresented: $gotoAddMore) {
        FavouriteView(showSideMenu: $showSideMenu)
            .toolbar(.hidden, for: .navigationBar)
    }
    @ViewBuilder func favView() -> some View {
        VStack {
            List {
                
                ForEach(0..<favMenu.count + 1, id: \.self) { ind in
                    if ind == favMenu.count {
                        Button {
                            gotoAddMore = true
                        } label: {
                            VStack(spacing: 6) {
                                Image(systemName: "plus.circle.fill")
                            }
                        }
                        .buttonStyle(.plain)
                    } else {
                        Button {
                            
                        } label: {
                            favCell(item: favMenu[ind], index: ind)
                        }
                        .buttonStyle(.plain)
                    }
                }
            }
        }
    }
    

codeFavouriteView: here in updateFavoriteMenus service call success updated favViewModel.fetchFavList and its updated list also showing but in Save button click it got dismiss() then why my updated favViewModel.fetchFavList not showing in HomeView??? please guide after dismiss() of FavouriteView i need updated fetchFavList in HomeView

struct FavouriteView: View {

@Environment(\.dismiss) var dismiss
@StateObject private var favViewModel = FavMenuViewModel()
@State private var selectedItem: Int = 0
@State var selectedfavMenu: AllMenu? = nil

var body: some View {
    ZStack {
        
        VStack {
            
            VStack {
                HStack {
                    Button(action: {
                        updateFavoriteMenus()
                        dismiss()
                    }, label: {
                        Text("Save")
                    })
                }
                List {
                    ForEach(0..<favViewModel.favMenuList.count, id: \.self) { ind in
                        favCell(item: favViewModel.favMenuList[ind], index: ind)
                    }
                }
            }
        }
        .onAppear {
            favViewModel.fetchFavList { status in
                selectedItem = favViewModel.favMenuList.filter({ $0.isSelected}).count
            }
        }
    }
    
    func updateFavoriteMenus() {
        //some code
        do {
            if let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
                print("Response JSON: \(jsonResponse)")
                favViewModel.fetchFavList { status in
                    print("updated fav menus.... \(favViewModel.favMenuList)")
                }
            }
        }
    }
    
    @ViewBuilder func favCell(item: AllMenu, index: Int) -> some View {
        
        HStack(spacing: 0) {
            Text(item.title ?? "")
                .font(.calibriRegular(with: 20))
                .foregroundStyle(Color.black)
            
            Toggle("", isOn: $favViewModel.favMenuList[index].isSelected)
                .labelsHidden()
                .onChange(of: favViewModel.favMenuList[index].isSelected) { isSelected in
                    handleToggleChange(for: item, isSelected: isSelected)
                }
        }
    }
    func handleToggleChange(for item: AllMenu, isSelected: Bool) {
        selectedfavMenu = item
        selectedfavMenu?.isSelected = isSelected
        selectedItem = favViewModel.favMenuList.filter { $0.isSelected }.count
    }
}

Upvotes: 0

Views: 60

Answers (0)

Related Questions