filip.karas
filip.karas

Reputation: 598

Swiftui pass viewbuilder to parent view

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

Answers (1)

trianglejerry00
trianglejerry00

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

Related Questions