@Binding in App structure not updating view

Hi, I have this code in my (App).swift file and it passes an @Binding variable into my ContentView. The problem is that it doesn’t update in the content view. Thanks in advance!

//
//  Pickt.swift
//  Pickt
//
//  Created by Morris Richman on 2/24/22.
//

import Foundation
import SwiftUI
import TMDb
import GoogleMobileAds
import Firebase

@main
struct Pickt: App {
//    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    @State var create = false
    @State var join = false
    @StateObject var firebaseRetrieve = firebase1()
    init() {
        UserDefaults.standard.register(defaults: ["welcomePopup" : true])
        NetworkMonitor.shared.startMonitoring()
        GADMobileAds.sharedInstance().start(completionHandler: nil)
        Utilities.getAppType()
        let providerFactory = YourAppCheckProviderFactory()
        AppCheck.setAppCheckProviderFactory(providerFactory)
        FirebaseApp.configure()
//        setupFPN(application: application)
        Utilities.fetchRemoteConfig()
        Auth.auth().signIn(withEmail: Utilities.remoteConfig["accessEmail"].stringValue!, password: Utilities.remoteConfig["accessPassword"].stringValue!) { (result, error) in
            if error != nil {
                print("error = \(error!.localizedDescription)")
            }else {
                print("result = \(result!)")
                print("uid = \(String(describing: Auth.auth().currentUser?.uid))")
            }
        }
        Utilities.openNum = UserDefaults.standard.integer(forKey: "openNum") + 1
        UserDefaults.standard.set(UserDefaults.standard.integer(forKey: "openNum") + 1, forKey: "openNum")
        CDYelpFusionKitManager.shared.configure()
        if Utilities.switchEnabled {
            let type = UserDefaults.standard.string(forKey: "picktType")
            if type == Utilities.picktTypeOpt.media.rawValue {
                Utilities.picktType = .media
            }else if type == Utilities.picktTypeOpt.restaurants.rawValue {
                Utilities.picktType = .restaurants
            }
        }
        Utilities.getShareMode()
        if Utilities.fontSize > 23 {
            Utilities.fontSize = 23
        }
        print("Utilities.build = \(Utilities.build!), Utilities.version = \(Utilities.version!)")
        print("stored version = \(UserDefaults.standard.double(forKey: "version"))")
        print("fontSize = \(Utilities.fontSize)")
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView(join: $join, create: $create, showPicker: false, setMock: .constant([]))
                .environmentObject(firebaseRetrieve)
                .onOpenURL { url in
                    let scheme = url.scheme
                    let host = url.host
                    let path = url.path
                    let components = url.pathComponents
                    print("url: \(url)")
                    print("scheme: \(String(describing: scheme))")
                    print("host: \(String(describing: host))")
                    print("path: \(path)")
                    print("components: \(components)")
                    if host == "join" {
                        print("join")
                        Utilities.code = path.replacingOccurrences(of: "/", with: "")
                        print("code = \(Utilities.code)")
                        join = true
                    }else if host == "create" {
                        Utilities.location = path.replacingOccurrences(of: "/", with: "")
                        create = true
                    }
                    print("create = \(create), join = \(join)")
                }
        }
    }
}

It would help to show the ContentView…

//
//  Content View.swift
//  Pickt
//
//  Created by Morris Richman on 8/30/21.
//

import SwiftUI
import Firebase
//import FirebaseFirestore
import Introspect
import CoreLocation
import ResponderChain
import PopupView
import CDYelpFusionKit
import TMDb
import SlideOverCard
import LoaderUI
import GoogleMobileAds
import FirebaseCrashlytics
import SwiftUIX

struct ContentView: View {
    @State private var joiningParty = false
    @State private var code = ""
    @State private var textAlertMessage = ""
    @State private var textAlertFieldText = ""
    @State private var textAlertFieldPlaceholder = ""
    @State private var blank = ""
    @State private var enterLoc = false
    @State var joinText = "Joining Party"
    @State var createText = "Creating Party"
    @State private var search = false
    @State private var codeExists = false
    @State private var errorText = ""
    @State private var errorAlert = false
    @State private var joining = false
    @State private var creating = false
    @State private var name = ""
    @State var newPopup = false
    @State var newRefreshIndicator = false
    @State var whatsNew = Array<String>() {
        didSet {
            print("what's new array set, newRefreshIndicator = \(newRefreshIndicator)")
            newRefreshIndicator = false
            if !newPopup {
                newPopup = true
            }
        }
    }
    @State private var showCreating = false
    @State var join: Bool {
        didSet {
            print("Join party")
        }
    }
    @State var setBackground = true
    @State private var nameError = false
    @State private var joinDisabledAlert = false
    @State private var guide = false
    @State private var location = ""
    @Environment(\.horizontalSizeClass) var sizeClass
    @Environment(\.verticalSizeClass) var verticalSizeClass
    @State private var disabledAlert = false
    @State private var devTools = false
    @State var devToolsText = ""
    @State private var filter = "Dine in"//filterOpt.all
    @State private var cuisine = "All"
    @State private var price = "$$"
    @State var create: Bool
    @State var namePlaceholder = ""
    @State var whatsNewHeight: Double = 125
    @State private var welcome = false
    @State private var showWelcomeAgain = true {
        didSet {
            Utilities.welcomePopup = showWelcomeAgain
            UserDefaults.standard.set(welcomePopup, forKey: "welcomePopup")
        }
    }
    @State private var noSwitch = false
    @State var rawPicktType = "Restaurants"
    @State var picktType = Utilities.picktTypeOpt.restaurants {
        didSet {
            Utilities.picktType = picktType
            setBackgroundImg()
        }
    }
    @State var showFinal = false
    @State var welcomePopup = UserDefaults.standard.bool(forKey: "welcomePopup")
    let popupColor = Color(red: 61/255, green: 90/255, blue: 128/255)
    let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
    let build = Bundle.main.infoDictionary?["CFBundleVersion"] as! String
    @State var showPicker: Bool
    @State var switchEnabled = Utilities.switchEnabled
    @State private var updateApp = false
    @State var howTo = false
    @State var newListener = false
    @State var picktTypeOpt = ["Restaurants", "Entertainment"]
    @Binding var setMock: [Restaurants] {
        didSet {
            print("dataSet")
//            yes.restList.removeAll()
            joining = false
            print("searchRest = \(search)")
            print("mock = \(restMock)")
            search = true
            creating = false
            joining = false
        }
    }
    @State private var restMock = [Restaurants]() {
        didSet {
            print("dataSet")
            if showPicker == true || restMock != [] {
                yes.restList.removeAll()
                yes.mediaList.removeAll()
                no.restList.removeAll()
                no.mediaList.removeAll()
                joining = false
                print("searchRest = \(search)")
                print("mock = \(restMock)")
                search = true
            }
        }
    }
    @State private var mediaMock = [Media]() {
        didSet {
            yes.restList.removeAll()
            yes.mediaList.removeAll()
            no.restList.removeAll()
            no.mediaList.removeAll()
            print("dataSet")
            print("searchMedia = \(search)")
            print("mock = \(mediaMock)")
            if showPicker == true || mediaMock != [] {
//                yes.restList.removeAll()
//                yes.mediaList.removeAll()
                joining = false
                search = true
            }
        }
    }
    func checkForLinks() {
//        DispatchQueue.main.async {
            if create {
                print("creating")
                showCreating = true
                DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
                    createText = "Still Creating Party"
                }
            }else {
                showCreating = false
            }
            if join {
                print("joining")
                if Utilities.code != "" {
                    code = Utilities.code
                    joinParty(enteredCode: Utilities.code, confirmName: true)
                }else {
                    print("enter code")
                    joiningParty = true
                }
            }
//            checkForLinks()
//        }
    }
    func getWhatsNew() {
        newListener = true
        db.collection("Utilities").document("Public Build").addSnapshotListener { doc, error in
            if error == nil {
                if doc != nil && doc!.exists {
                    if let newArray = doc!.get("Whats New") as? Array<String> {
                        if newListener != false {
                            print("newArray = \(newArray)")
                            if newArray == [] {
                                whatsNew = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "Etiam rutrum felis ac eros efficitur, non ornare enim porttitor.", "Donec lacus nibh, blandit id sapien eu, efficitur venenatis leo."]
                                whatsNewHeight = Double(100 + (whatsNew.count * 55))
                            }else {
                                whatsNew = newArray
                                whatsNewHeight = Double(100 + (whatsNew.count * 55))
                            }
                            print("what'sNewHeight = \(whatsNewHeight)")
                            if whatsNewHeight > 350 {
                                whatsNewHeight = 350
                            }
                            UserDefaults.standard.set(Utilities.version, forKey: "version")
                        }
                    }else {
                        whatsNew = ["Unable to load what's new"]
                        whatsNewHeight = Double(250)
                        UserDefaults.standard.set(Utilities.version, forKey: "version")
                    }
                }else {
                    whatsNew = ["Unable to load what's new"]
                    whatsNewHeight = Double(250)
                    UserDefaults.standard.set(Utilities.version, forKey: "version")
                }
            }else {
                whatsNew = ["Unable to load what's new"]
                whatsNewHeight = Double(250)
                UserDefaults.standard.set(Utilities.version, forKey: "version")
            }
        }
    }
    func checkWhatsNew() {
        print("Check for what's new")
        if UserDefaults.standard.double(forKey: "version") < Utilities.version! && UserDefaults.standard.double(forKey: "version") != 0 {
            self.getWhatsNew()
        }else {
            UserDefaults.standard.set(Utilities.version, forKey: "version")
        }
    }
    func checkWelcomePopup() {
        welcomePopup = Utilities.welcomePopup
        print("welcomePopup = \(welcomePopup)")
        if welcomePopup {
            welcome = true
        }else {
            welcome = false
        }
        print("switchEnabled = \(Utilities.switchEnabled)")
    }
    let db = Firestore.firestore()
    @State var backgroundImg = "food-1"
    func changeBackgroundImg() {
        Utilities.convertNSNumberToDouble(number: Utilities.remoteConfig["backgroundFrequency"].numberValue) { Double in
            DispatchQueue.main.asyncAfter(deadline: .now() + Double) {
                if picktType == .media {
                    backgroundImg = "media-\(Int.random(in: 1...6))"
                }else {
                    backgroundImg = "food-\(Int.random(in: 1...12))"
                }
                changeBackgroundImg()
            }
        }
    }
    func setBackgroundImg() {
        if picktType == .media {
            backgroundImg = "media-\(Int.random(in: 1...6))"
        }else {
            backgroundImg = "food-\(Int.random(in: 1...12))"
        }
    }
    func joinParty(enteredCode: String, confirmName: Bool) {
        joinText = "Joining Party"
        joining = true
        errorAlert = false
        print("Entered code = \(enteredCode)")
        Utilities.code = enteredCode
        print("Utilities.code = \(Utilities.code)")
        print("name = \(name)")
        //        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        //        name = ""
        //        Utilities.name = ""
        //        for _ in 0..<10 {
        //            name.append(letters.randomElement()!)
        //        }
        if !confirmName {
            UserDefaults.standard.setValue(name, forKey: "deviceName")
            Utilities.name = name
            if enteredCode.count == 6 {
                db.collection("parties").document(enteredCode).addSnapshotListener { document, error in
                    
                    //check for error
                    if error == nil {
                        //check if document exists
                        if document != nil && document!.exists {
                            if let DBfilter = document!.get("filter") as? String {
                                print("filter = \(DBfilter)")
                                filter = DBfilter
                                Utilities.restFilter = DBfilter
                            }
                            if let DBtype = document!.get("type") as? String {
                                print("type = \(DBtype)")
                                if DBtype == "media" {
                                    picktType = .media
                                    Utilities.picktType = .media
                                    if filter == "TV Shows" {
                                        //                                        if #available(iOS 15.0.0, *) {
                                        entertainment.searchTVShows { list in
                                            mediaMock = list
                                        }
                                        //                                        } else {
                                        //                                            // Fallback on earlier versions
                                        //                                            noSwitch = true
                                        //                                        }
                                    }else if filter == "Movies" {
                                        //                                        if #available(iOS 15.0.0, *) {
                                        entertainment.searchMovies { list in
                                            mediaMock = list
                                        }
                                        //                                        } else {
                                        //                                            // Fallback on earlier versions
                                        //                                            noSwitch = true
                                        //                                        }
                                    }
                                }else {
                                    picktType = .restaurants
                                    Utilities.picktType = .restaurants
                                    if let DBcuisine = document!.get("cuisine") as? String {
                                        cuisine = DBcuisine
                                        Utilities.cuisine = DBcuisine
                                    }
                                    if let DBprice = document!.get("price") as? String {
                                        price = DBprice
                                        Utilities.price = DBprice
                                    }
                                    //                            if let names = document!.get("devices") as? Array<String> {
                                    //                                if names.contains(name) {
                                    //                                    textAlertMessage = "Please enter a different name to continue"
                                    //                                    nameError = true
                                    //                                }
                                    //                            }
                                    if let latLong = document!.get("latLong") as? Bool {
                                        print("latLong = \(latLong)")
                                        if latLong {
                                            if let DBLat = document!.get("lat") as? Double {
                                                print("DBLat = \(DBLat)")
                                                if let DBLong = document!.get("long") as? Double {
                                                    print("DBLong = \(DBLong)")
                                                    var center : CLLocationCoordinate2D = CLLocationCoordinate2D()
                                                    let ceo: CLGeocoder = CLGeocoder()
                                                    center.latitude = DBLat
                                                    center.longitude = DBLong
                                                    
                                                    let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)
                                                    
                                                    
                                                    ceo.reverseGeocodeLocation(loc, completionHandler:
                                                                                {(placemarks, error) in
                                                        if (error != nil)
                                                        {
                                                            print("reverse geodcode fail: \(error!.localizedDescription)")
                                                        }
                                                        let pm = placemarks! as [CLPlacemark]
                                                        
                                                        if pm.count > 0 {
                                                            let pm = placemarks![0]
                                                            print(pm.country)
                                                            print(pm.locality)
                                                            print(pm.subLocality)
                                                            print(pm.thoroughfare)
                                                            print(pm.postalCode)
                                                            print(pm.subThoroughfare)
                                                            var addressString : String = ""
                                                            if pm.subLocality != nil {
                                                                addressString = addressString + pm.subLocality! + ", "
                                                            }
                                                            if pm.thoroughfare != nil {
                                                                addressString = addressString + pm.thoroughfare! + ", "
                                                            }
                                                            if pm.locality != nil {
                                                                addressString = addressString + pm.locality! + ", "
                                                            }
                                                            if pm.country != nil {
                                                                addressString = addressString + pm.country! + ", "
                                                            }
                                                            if pm.postalCode != nil {
                                                                addressString = addressString + pm.postalCode! + " "
                                                            }
                                                            searchYelp(loc: "\(addressString)", lat: DBLat, long: DBLong)
                                                        }
                                                    })
                                                }
                                            }
                                        }else {
                                            if let loc = document!.get("loc") as? String {
                                                print("loc = \(loc)")
                                                searchYelp(loc: loc, lat: 0, long: 0)
                                            }
                                        }
                                    }else {
                                        if let loc = document!.get("loc") as? String {
                                            print("loc = \(loc)")
                                            searchYelp(loc: loc, lat: 0, long: 0)
                                        }
                                    }
                                }
                            }
                            db.collection("parties").document(enteredCode).updateData(["devices" : FieldValue.arrayUnion(["\(name)"])])
                        }else {
                            print("Show Error Alert with error \"Party not found, please enter a different code.\"")
                            print("does not exist")
                            errorText = "Party not found, please enter a different code."
                            errorAlert = true
                            joining = false
                        }
                    }else {
                        print("Show Error Alert with error \"Party not found, please enter a different code.\"")
                        print("does not exist")
                        errorText = "Party not found, please enter a different code."
                        errorAlert = true
                        joining = false
                    }
                }
            }else {
                print("Show Error Alert with error \"Incorrect number of characters, please make sure it is 6 characters.\"")
                errorText = "Incorrect number of characters, please make sure it is 6 characters."
                errorAlert = true
                joining = false
            }
        }else {
            print("No name found")
            print("Name Placeholder = \(namePlaceholder)")
            nameError = true
        }
    }
    func searchYelp(loc: String, lat: Double, long: Double) {
        print("searching")
        Utilities.location = loc
        Utilities.restFilter = filter
        Utilities.cuisine = cuisine
        let jsonDecoder = JSONDecoder()
        if loc == "friends" || loc == "family" || loc == "Family" || loc == "Friends" {
            restMock = Restaurants.viewModels
        }else {
            var finalCuisine = String()
            if cuisine == "All" {
                finalCuisine = ""
            }else {
                finalCuisine = "\(cuisine) food "
            }
            let searchTerm = "\(finalCuisine)\(filter) Restaurants"
            func handleResponse(businesses: [CDYelpBusiness]) {
                print("buisnesses = \(businesses)")
                var businessList: [Restaurants] = []
                for buis in businesses {
                    let finalAddress = buis.location!.displayAddress!.joined(separator: " ")
                    print("Cats = \(buis.categories)")
                    CDYelpFusionKitManager.checkType(of: buis.categories!) { cat in
                        print("cat = \(cat)")
                        print("\(Restaurants(name: buis.name!, imageUrl: buis.imageUrl ?? URL(string: Utilities.noImage)!, id: buis.id!, rating: buis.rating!, url: "\(buis.url!)", location: finalAddress, category: cat, tag: [], isClosed: buis.isClosed!, price: buis.price ?? "Unknown", reviewCount: buis.reviewCount!))")
                        businessList.append(Restaurants(name: buis.name!, imageUrl: buis.imageUrl ?? URL(string: Utilities.noImage)!, id: buis.id!, rating: buis.rating!, url: "\(buis.url!)", location: finalAddress, category: cat, tag: [], isClosed: buis.isClosed!, price: buis.price ?? "Unknown", reviewCount: buis.reviewCount!))
                        if businessList.count == businesses.count {
                            print("coninue")
                            Utilities.restMock = businessList
                            restMock = businessList
                        }
                    }
                }
                //                        print(businesses)
            }
            print("loc searchTerm = \(searchTerm)")
            print("Lat = \(lat), long = \(long)")
            if lat != 0 && long != 0 {
                print("search using LatLong")
                CDYelpFusionKitManager.shared.apiClient.searchBusinesses(byTerm: searchTerm, location: nil, latitude: lat, longitude: long, radius: nil, categories: nil, locale: .english_unitedStates, limit: 20, offset: 0, sortBy: CDYelpFusionKitManager.sortby, priceTiers: nil, openNow: nil, openAt: nil, attributes: nil) { response in
                    if let response = response,
                       let businesses = response.businesses,
                       businesses.count > 0 {
                        handleResponse(businesses: businesses)
                    }
                }
            }else {
                print("search using location, loc = \(loc)")
                CDYelpFusionKitManager.shared.apiClient.searchBusinesses(byTerm: searchTerm, location: location, latitude: nil, longitude: nil, radius: nil, categories: nil, locale: .english_unitedStates, limit: 20, offset: 0, sortBy: CDYelpFusionKitManager.sortby, priceTiers: nil, openNow: nil, openAt: nil, attributes: nil) { response in
                    if let response = response,
                       let businesses = response.businesses,
                       businesses.count > 0 {
                        handleResponse(businesses: businesses)
                    }
                }
            }
        }
    }
    var body: some View {
        NavigationView {
            Group { //For Added Alerts
                Group { //For Added Alerts
                    VStack {
                        Group {
                            Text("Pickt")
                                .font(.largeTitle)
                                .foregroundColor(Color.black)
                                .autoOpaqueBackground(color: .white)
                            Group {
                                if picktType == .restaurants {
                                    Text("For Restaurants")
                                }else if picktType == .media {
                                    Text("For Entertainment")
                                }
                            }
                            .foregroundColor(Color.black)
                            .descreteOpaqueBackground(color: .white, diameter: 10)
                            //                HStack {
                            //                    Image(systemName: "book.closed")
                            //                    TextField("Enter Your Name", text: $name, onCommit:  {
                            //                        Utilities.name = name
                            //                        UserDefaults.standard.setValue(name, forKey: "deviceName")
                            //                    })
                            //                        .frame(maxWidth: 450, idealHeight: 35)
                            //                    if !name.isEmpty {
                            //                        Button(action: {
                            //                            self.name = ""
                            //                        }) {
                            //                            Image(systemName: "xmark.circle")
                            //                                .foregroundColor(Color.gray)
                            //                        }
                            //                        .padding(.trailing)
                            //                    }
                            //                }
                            //                .padding(.horizontal)
                            Group {
                                Button(action: {
                                    creating = true
                                    showCreating = true
                                    creating = false
                                }, label: {
                                    Image(systemName: "plus")
                                    Text("Create Party")
                                    //                            .font(.title)
                                })
                                    .autoOpaqueBackground(color: .white)
                                Button(action: {
                                    if NetworkMonitor.shared.isConnected {
                                        disabledAlert = false
                                        Utilities.checkForUpdate { update in
                                            if update && !Utilities.ignoreUpdate {
                                                updateApp = true
                                            }else {
                                                if Utilities.joinDisabled == false {
                                                    joiningParty = true
                                                }else {
                                                    print("joinDisabled")
                                                    joinDisabledAlert = true
                                                }
                                            }
                                        }
                                    }else {
                                        print("notConnected")
                                        disabledAlert = true
                                    }
                                }, label: {
                                    Image(systemName: "arrowshape.turn.up.right")
                                    Text("Join Party")
                                })
                                    .autoOpaqueBackground(color: .white)
                                //                                            .alert(isPresented: $joinDisabledAlert, content: {
                                //                                                Alert(title: Text("Error"), message: Text("Joining a party is disabled at this time."), dismissButton: .default(Text("Ok"), action: {
                                //                                                    joinDisabledAlert = false
                                //                                                }))
                                //                                            })
                                if Utilities.code == "" {
                                    Button(action: {}, label: {
                                        Image(systemName: "arrowshape.turn.up.left.2.fill")
                                        Text("Rejoin Party")
                                    })
                                        .autoOpaqueBackground(color: .white)
//                                        .foregroundColor(.secondary)
                                        .foregroundColor(Color.gray)
                                }else {
                                    Button(action: {
                                        if NetworkMonitor.shared.isConnected {
                                            disabledAlert = false
                                            if Utilities.joinDisabled == false {
                                                code = Utilities.code
                                                joinParty(enteredCode: Utilities.code, confirmName: true)
                                            }else {
                                                print("joinDisabled")
                                                joinDisabledAlert = true
                                            }
                                        }else {
                                            print("notConnected")
                                            disabledAlert = true
                                        }
                                    }, label: {
                                        Image(systemName: "arrowshape.turn.up.left.2.fill")
                                        Text("Rejoin Party")
                                    })
                                        .autoOpaqueBackground(color: .white)
                                }
                            }
                            //                Button(action: {
                            //
                            //                }, label: {
                            //                    Text("Do it by myself")
                            //                })
//                                            .padding()
                            Group {
                                if sizeClass == .compact {
                                    Button(action: {
                                        howTo = true
                                    }, label: {
                                        Image(systemName: "book.closed")
                                        Text("How To")
                                    })
                                }else {
                                    NavigationLink(
                                        destination: Guide(sender: .home),
                                        label: {
                                            Image(systemName: "book.closed")
                                            Text("How To")
                                        })
                                }
                            }
                            .autoOpaqueBackground(color: .white)
//                            HStack {
//                                Button(action: {howTo = true}, label: {
//                                    Image(systemName: "arrow.down")
//                                    Text("Dismiss")
//                                })
//                            }
//                            .foregroundColor(.blue)
//                            .autoOpaqueBackground(color: .white)
                            
                            //                                if Utilities.appType == .Debug {
                            //                                    Button {
                            //                                        Utilities.fetchRemoteConfig()
                            //                                    } label: {
                            //                                        Text("Refresh")
                            //                                            .padding()
                            //                                    }
                            //                                }
                            Group {
                                if creating {
                                    HStack(spacing: 5) {
                                        Text(createText)
                                        Loading(selectedType: .ballPulse, duration: 0.0)
                                            .frame(width: 20, height: 20)
                                            .padding(.top, 10)
                                    }
                                }
                                if joining {
                                    HStack(spacing: 5) {
                                        Text(joinText)
                                        Loading(selectedType: .ballPulse, duration: 0.0)
                                            .frame(width: 20, height: 20)
                                            .padding(.top, 10)
                                    }
                                }
                            }
                                .autoOpaqueBackground(color: .white)
                        }
                        NavigationLink(
                            destination: Thumbs(restData: restMock, mediaData: mediaMock, results: false, fullScreenAd: Interstitial())
//                                .environmentObject(firebaseRetrieve)
                                .onDisappear(perform: {
                                    showFinal = Utilities.showFinal
    //                                creating = false
    //                                joining = false
                                }),
                            isActive: $search,
                            label: {
                                Text("Thumbs")
                            })
                            .hidden()
                        AlertControlView(textString: $name, showAlert: $nameError, textPlaceholder: .constant("Enter Your Name"), title: "Name", message: "Please enter your name to continue.", onDone: { enteredName in
                            print("name = \(enteredName)")
                            if enteredName != "" {
                                name = enteredName
                                UserDefaults.standard.setValue(name, forKey: "deviceName")
                                joinParty(enteredCode: code, confirmName: false)
                                DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
                                    joinText = "Still Joining Party"
                                }
                            }else {
                                joinParty(enteredCode: code, confirmName: true)
                            }
                        }, onCancel: {
                            nameError = false
                            joining = false
                        })
                        AlertControlView(textString: $blank, showAlert: $joiningParty, textPlaceholder: .constant("Enter The Party Code"), title: "Enter Code", message: "Enter the code you recieved to join a party", onDone: { enteredCode in
                            code = enteredCode
                            Utilities.code = enteredCode
                            joinParty(enteredCode: enteredCode, confirmName: true)
                        }, onCancel: {
                            print("canceled")
                        })
                            .sheet(isPresented: $showCreating, onDismiss: {
                                switchEnabled = Utilities.switchEnabled
                                print("switchEnabled = \(Utilities.switchEnabled)")
                                showCreating = false
                                name = Utilities.name
                                DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
                                    if Utilities.picktType == .media {
                                        mediaMock = Utilities.mediaMock
                                    }else {
                                        restMock = Utilities.restMock
                                    }
                                    Utilities.restMock = []
                                    Utilities.mediaMock = []
                                }
                                checkWhatsNew()
                            }, content: {
                                createParty()
                            })
                    }
                    .background (
                        Group {
                            if picktType == .restaurants {
                                Image(backgroundImg)
                                    .resizable()
                            }else if picktType == .media {
                                Image(backgroundImg)
                                    .resizable()
                            }
                        }
                            .opacity(0.7)
                            .ignoresSafeArea()
                            .scaledToFill()
                    )
                    .alert(isPresented: $updateApp, content: {
                        Alert(title: Text("Warning!"), message: Text("Pickt is not up to date, some things may not work if you are on different versions of Pickt."), primaryButton: .default(Text("Update"), action: {
                            print("update, type = \(Utilities.appType)")
                            if Utilities.appType == .TestFlight {
                                print("opening testflight")
                                if let url = URL(string: "itms-beta://") {
                                    UIApplication.shared.open(url)
                                }
                            }else {
                                print("opening app store")
                                if let url = URL(string: "https://apps.apple.com/us/app/pickt/id1584491007") {
                                    UIApplication.shared.open(url)
                                }
                            }
                            updateApp = false
                        }), secondaryButton: .destructive(Text("Ignore"), action: {
                            Utilities.ignoreUpdate = true
                            updateApp = false
                            joiningParty = true
                        }))
                    })
                    .toolbar(content: {
                        HStack {
                            Button(action: {
                                getWhatsNew()
                            },label: {
                                Image(systemName: "newspaper")
                                Text("What's New")
                                    .minimumScaleFactor(0.6)
                            })
                                .padding(.horizontal)
                                .background(.white)
                                .cornerRadius(10)
                                .opacity(0.8)
                            if switchEnabled {
                                HStack {
                                    Image(systemName: "switch.2")
                                        .foregroundColor(.blue)
                                    if #available(iOS 15.0, *) {
                                        HStack {
                                            Text("Type: ")
                                                .minimumScaleFactor(0.6)
                                            Picker("", selection: $rawPicktType) {
                                                ForEach(picktTypeOpt, id: \.self) { type in
                                                    Text(type)
                                                }
                                            }
                                            .pickerStyle(.menu)
                                            .minimumScaleFactor(0.6)
                                            .onChange(of: self.rawPicktType) { type in
                                                print("rawPicktType = \(type)")
                                                if type == "Entertainment" {
                                                    picktType = .media
                                                }else {
                                                    picktType = .restaurants
                                                }
                                            }
                                        }
                                    }else {
                                        Picker("Type: ", selection: $rawPicktType) {
                                            ForEach(picktTypeOpt, id: \.self) { type in
                                                Text(type)
                                            }
                                        }
                                        .minimumScaleFactor(0.6)
                                        .pickerStyle(.menu)
                                        .onChange(of: self.rawPicktType) { type in
                                            print("rawPicktType = \(type)")
                                            if type == "Entertainment" {
                                                picktType = .media
                                            }else {
                                                picktType = .restaurants
                                            }
                                        }
                                    }
                                }
                                .padding(.horizontal)
                                .background(Color.white)
                                .cornerRadius(5)
                                .opacity(0.8)
                            }
                        }
                    })
                    .alert(isPresented: $disabledAlert, content: {
                        Alert(title: Text("Uh Oh"), message: Text("You aren't connected to the internet, please connect to use Pickt."), dismissButton: .default(Text("Ok"), action: {
                            disabledAlert = false
                        }))
                    })
                }
                //                .alert(isPresented: $noSwitch, content: {
                //                    Alert(title: Text("OS Version"), message: Text("You must be on ios 15 or newer in order to use Pickt for Entertainment."), primaryButton: .default(Text("Update"), action: {
                //                        let url = NSURL(string:"App-prefs:root=General&path=SOFTWARE_UPDATE_LINK")! as URL
                //                                UIApplication.shared.open(url)
                //                    }), secondaryButton: .default(Text("Ok"), action: {
                //                        noSwitch = false
                //                    }))
                //                })
            } //Add Alerts here
            .alert(isPresented: $errorAlert, content: {
                Alert(title: Text("Error"), message: Text(errorText), dismissButton: .default(Text("Ok"), action: {
                    errorAlert = false
                    joining = false
                }))
            })
        }
        .fullScreenCover(isPresented: $howTo, content: {
            Guide(sender: .home)
        })
        .fullScreenCover(isPresented: $showFinal, onDismiss: {
            Utilities.showFinal = false
            showFinal = false
        }, content: {
            Final_Restaurant_View(restData: [], allRestData: [], mediaData: [], allMediaData: [], devices: [], refresh: true)
        })
        .WelcomePopup(popupColor: .constant(popupColor), isShowing: $welcome, showWelcomeAgainButton: true, showWelcomeAgain: $showWelcomeAgain, onDismiss: {
            checkWelcomePopup()
        })
        .popup(isPresented: $newPopup, type: .`default`, closeOnTap: false) {
                VStack(spacing: 10) {
                    Text("What's New:")
                        .font(.title2)
                        .foregroundColor(.white)
                        .fontWeight(.bold)
                    if whatsNew != ["Unable to load what's new"] {
                        ScrollView {
                            Text("- " + whatsNew.joined(separator: "\n\n- "))
                                .multilineTextAlignment(.leading)
                                .foregroundColor(Color(red: 0.9, green: 0.9, blue: 0.9))
                        }
                    }else {
                        Text("Unable to load what's new")
                            .foregroundColor(Color(red: 0.9, green: 0.9, blue: 0.9))
                        Button(action: {
                            newRefreshIndicator = true
//                            getWhatsNew()
                        }, label: {
                            if !newRefreshIndicator {
                                Image(systemName: "arrow.counterclockwise")
                            }else {
                                Loading(selectedType: .ballClipRotatePulse, duration: 1.5)
                                    .frame(width: 20, height: 20)
                            }
                            Text("Retry")
                                .font(.system(size: 14))
                                .fontWeight(.bold)
                        })
                            .foregroundColor(.black)
                            .frame(width: 100, height: 40)
                            .background(Color.white)
                            .cornerRadius(20.0)
                    }
                    
                    //Spacer()
                    Button(action: {
                        self.newListener = false
                        self.newPopup = false
                    }) {
                        Text("Got it")
                            .font(.system(size: 14))
                            .foregroundColor(.black)
                            .fontWeight(.bold)
                    }
                    .frame(width: 100, height: 40)
                    .background(Color.white)
                    .cornerRadius(20.0)
                }
                .padding(EdgeInsets(top: 20, leading: 20, bottom: 20, trailing: 20))
                .frame(width: 275, height: whatsNewHeight)
                .background(popupColor)
                .cornerRadius(10.0)
                .shadow(color: Color(.sRGBLinear, white: 0, opacity: 0.13), radius: 10.0)
                .onDisappear {
                    UserDefaults.standard.set(Utilities.version, forKey: "version")
                }
        }
        .navigationTitle(!create ? "" : "Home")
        .navigationBarTitleDisplayMode(.inline)
        .navigationBarColor(.white)
        .navigationViewStyle(StackNavigationViewStyle())
        .onAppear(perform: {
            createText = "Creating Party"
            joinText = "Joining Party"
            if !create && !join {
                checkWhatsNew()
            }
            changeBackgroundImg()
            Utilities.fetchRemoteConfig()
            picktType = Utilities.picktType
            UserDefaults.standard.set(UserDefaults.standard.integer(forKey: "homeOpenNum") + 1, forKey: "homeOpenNum")
            print("homeOpenNum = \(welcomePopup)")
            Messaging.messaging().token { token, error in
                if let error = error {
                    print("Error fetching FCM registration token: \(error)")
                } else if let token = token {
                    print("FCM registration token: \(token)")
                }
            }
            checkForLinks()
            name = Utilities.name
            if NetworkMonitor.shared.isConnected {
                print("checking for join")
                print("mock = \(restMock)")
                restMock = setMock
                if showPicker {
                    //                    creating = true
                }else {
                    creating = false
                }
                disabledAlert = false
            }else {
                print("Not Connected")
                disabledAlert = true
            }
//            switchEnabled = Utilities.remoteConfig["switchEnabled"].boolValue
            welcomePopup = Utilities.welcomePopup
            print("welcomePopup = \(welcomePopup)")
            DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(50)) {
                if welcomePopup {
                    welcome = true
                }else {
                    welcome = false
                }
                print("switchEnabled = \(Utilities.switchEnabled)")
            }
        })
    }
}

struct Content_View_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(join: false, create: false, showPicker: false, setMock: .constant([]))
    }
}

This pattern is not recommended with didSet subscribe to their changes instead. The patterns in the code don't follow the SwiftUI paradigm.

@State var whatsNew = Array<String>() {
didSet {
print("what's new array set, newRefreshIndicator = \(newRefreshIndicator)")
newRefreshIndicator = false
if !newPopup {
newPopup = true
}
}
}
@Binding var setMock: [Restaurants] {
didSet {
print("dataSet")
// yes.restList.removeAll()
joining = false
print("searchRest = \(search)")
print("mock = \(restMock)")
search = true
creating = false
joining = false
}
}
@Binding in App structure not updating view
 
 
Q