What's do I make my scrollview refreshable?

Viewed 23

I have a view that fetches data from a database when the view appears using .OnAppear. I want to make the scrollview run the function when the user "pulls to refresh". I have tried using .refreshable but I believe this only works on lists.

I want to scroll view to have pull to refresh functionality.

Any ideas?

struct MarketplaceProductView: View {
   
    @StateObject var MarketplaceModel = MarketplaceViewModel() 
    @Namespace var animation : Namespace.ID  
    @State var showDetailProduct = false
    @State var selectedProduct : Product!
       
    var body: some View {
                
        ZStack{
            
            VStack {
                                        
                    HStack{
                        
                        Image(systemName: "magnifyingglass")
             
                        TextField("Search", text: $MarketplaceModel.search)
                        
                      }                    
                }
                            
                if MarketplaceModel.products.isEmpty{
                 
                    ProgressView()                                     
                }
                else{
                    
                    //THIS IS WHERE I WANT PULL TO REFRESH...
                    ScrollView(.vertical, showsIndicators: false, content: {
                                           
                        LazyVGrid(columns: Array(repeating: GridItem(.flexible(),spacing: 10), count: 2),spacing: 20){
                            
                            ForEach(MarketplaceModel.filteredProduct){product in
                                
                                // Product Tile View...                               
                                ProductView(productData: product)
 
                                    .onTapGesture {
                                        
                                        withAnimation {
                                            
                                            selectedProduct = product
                                            showDetailProduct.toggle()

                                        }
                                    }
                            }
                        }
                    })
                }
            }
            if selectedProduct != nil && showDetailProduct{
                
                ProductDetailView2(showDetailProduct: $showDetailProduct, productData: selectedProduct, product_id: string)
                          
            }
            
        } 
        .onAppear(perform: {
            let defaults = UserDefaults.standard
            let stringOne = defaults.string(forKey: "key")!         
            self.MarketplaceModel.fetchProductData(key: stringOne)
        })

}
0 Answers
Related