I'm thinking how to conditionally permit to start NavigationLink when user has tapped it. In UIKit it is just obvious but in SwiftUI this seems to me a huge problem. I know that I could declare NavigationLink somewhere in my view i.e.
@State private var isFired = false
/* (...) */
NavigationLink(destination: AnotherView(), isActive: $isFired) { EmptyView() }
and call it like this
Button(action: {
if /* check condition */ {
self.isFired = true
} else {
print("condition is not fulfilled")
}
}) {
Image("my-image")
}
but... the problem is: my navigation links are created dynamically in a loop and are wrapping images in ScrollView, i.e.
ScrollView(.vertical) {
ForEach(photos, id: \.self) { element in
NavigationLink(destination: ImagePreviewView(photo: element)) {
Image(uiImage: element.image)
}
}
}
How to conditionally allow to start the navigation link in the code above? For example: user tapps an image -> a password request is presented -> if the password is correct the navigation link fires, if not the app does something else (presents alert etc. doesn't matter)