Reputation: 598
I'm building a view router that switch views based on "currentPage" stored in the model.
struct RouterView: View {
@EnvironmentObject var routerViewModel: RouterViewModel
var body: some View {
if routerViewModel.currentPage == .login {
LoginView()
.transition(.scale)
}
else if routerViewModel.currentPage == .companySelect {
CompanySelectView()
.transition(.scale)
}
...
ModalViewWillBeHere() <-------
}
I have modal views prepared for different situations in child views. I need to display them conditionally in the place marked in the code above. What I'm trying to do is define @ViewBuilder? var in the RouterView, which I will be able to override in the child view (for example LoginView) do display required.
I'm coming from UIKit and OOP world, so maybe I'm missing something or the logic is not following MVVM.
Upvotes: 0
Views: 177
Reputation: 614
Is this what you want?
struct RouterView: View {
@EnvironmentObject var routerViewModel: RouterViewModel
var body: some View {
if routerViewModel.currentPage == .login {
LoginView()
.transition(.scale)
}
else if routerViewModel.currentPage == .companySelect {
CompanySelectView()
.transition(.scale)
}
ModalViewWillBeHere()
}
@ViewBuilder
private func ModalViewWillBeHere() -> some View {
if ... {
YourView1()
} else if ... {
YourView2()
} else {
EmptyView()
}
}
}
Upvotes: 1