I am showing array of images in Grid. now i want to pass selected image index to GalleryPrevIewView to show that particular image first in that TabView.
code: so i have tried to take selectedImageIndex
in both view and tried to pass from GalleryDetailsView to GalleryPrevIewView. but got error. please guide.
struct GalleryDetailsView: View {
@State private var gotoPreview = false
@StateObject private var viewModel = GalleryViewModel()
@State var selectedDataID: String = ""
@State private var selectedImageIndex: Int?
var body: some View {
ZStack {
Color.hexF4F4FC
.ignoresSafeArea()
VStack(spacing: 0) {
VStack {
VStack {
ScrollView {
LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 4), count: 4), spacing: 4) {
ForEach(0..<viewModel.photos.count, id: .self) { ind in
Button {
selectedImageIndex = ind
gotoPreview = true
} label: {
let width = ((screenWidth - 24) / 4) - 2
URLImageView(url: viewModel.photos[ind].photoPath ?? "N/A" , placeholder: "PhotogalleryPlaceholder", width: width, height: width)
.scaledToFill()
.clipped()
}
.buttonStyle(.plain)
}
}
}
}
}
}
.navigationDestination(isPresented: $gotoPreview) {
GalleryPrevIewView(selectedImageIndex: $selectedImageIndex, selectedDataID: self.selectedDataID)
.toolbar(.hidden, for: .navigationBar)
}
.onAppear{
viewModel.getPhotosAlbumDetails(ID: selectedDataID, pg: 1) { status in
}
}
}
}
}
error:
Cannot convert value of type ‘Binding<Int?>’ to expected argument type ‘Binding’
code of GalleryPrevIewView:
struct GalleryPrevIewView: View {
@Environment(.dismiss) var dismiss
@Binding var selectedImageIndex: Int
@StateObject private var viewModel = GalleryViewModel()
@State var selectedDataID: String = ""
var body: some View {
ZStack {
Color.black
.ignoresSafeArea()
VStack {
TabView(selection: $selectedImageIndex) {
ForEach(0..<viewModel.photos.count, id: .self) { index in
ZStack(alignment: .topLeading) {
URLImageView(url: viewModel.photos[index].photoPath ?? "N/A" , placeholder: "PhotogalleryPlaceholder")
.clipped()
.tag(index)
.frame(width: screenWidth)
}
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
.onAppear{
viewModel.getPhotosAlbumDetails(ID: selectedDataID, pg: 1) { status in
}
}
}
}
#Preview {
GalleryPrevIewView(selectedImageIndex: .constant(0))
}