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)
})
}