struct ContentView: View { @StateObject var locationManager = LocationManager() @EnvironmentObject private var inAppPurchaseManager: InAppPurchaseManager @Environment(\.requestReview) var requestReview @State private var visibleRegion: MKCoordinateRegion? @State private var searchResults: [MKMapItem] = [] @State private var selectedResult: MKMapItem? @State private var route: MKRoute? @State private var selectedTabBarButton = "" @State var isShowingBottomSheet = false @State private var cameraPosition: MapCameraPosition = .userLocation(followsHeading: true, fallback: .automatic) @State var isLocationDeniedViewShown = false @State private var defaultSearchText = "EV Charging Points" private let onboardingTip = OnboardingTip() var body: some View { if locationManager.state == .notDetermined { // User doesn't give location and their first time open the app LocationRequestView() .task { _ = Task { do { try await inAppPurchaseManager.loadProducts() } catch { print(error) } } } } else if locationManager.state == .denied && !isLocationDeniedViewShown { // User doesn't give location and isLocationDeniedViewShown is false LocationRequestDeniedView(isLocationDeniedViewShown: $isLocationDeniedViewShown) .task { _ = Task { do { try await inAppPurchaseManager.loadProducts() } catch { print(error) } } } } else if locationManager.state == .denied && isLocationDeniedViewShown { // User doesn't give location and isLocationDeniedViewShown is true if !inAppPurchaseManager.hasUnlockedPro { VStack(spacing: 0) { BannerAd(unitID: "ca-app-pub-2327375927149500/2020038616") .background(Color.bannerBG) .frame(maxWidth: .infinity, maxHeight: 50) } .frame(maxWidth: .infinity, maxHeight: 50) .background(Color.bannerBG) .padding(.bottom, -10) } LocationRequestDeniedMapView( cameraPosition: $cameraPosition, searchResults: $searchResults, selectedResult: $selectedResult, route: $route, visibleRegion: $visibleRegion, defaultSearchText: $defaultSearchText, isLocationDeniedViewShown: $isLocationDeniedViewShown, isShowingBottomSheet: $isShowingBottomSheet ) .task { _ = Task { do { try await inAppPurchaseManager.loadProducts() } catch { print(error) } } } } else { // User give location permission if !inAppPurchaseManager.hasUnlockedPro { VStack(spacing: 0) { BannerAd(unitID: "ca-app-pub-2327375927149500/2020038616") .background(Color.bannerBG) .frame(maxWidth: .infinity, maxHeight: 50) } .frame(maxWidth: .infinity, maxHeight: 50) .background(Color.bannerBG) .padding(.bottom, -10) } LocationRequestIsOnView( cameraPosition: $cameraPosition, searchResults: $searchResults, selectedResult: $selectedResult, route: $route, visibleRegion: $visibleRegion, defaultSearchText: $defaultSearchText, isLocationDeniedViewShown: $isLocationDeniedViewShown, isShowingBottomSheet: $isShowingBottomSheet ) .task { _ = Task { do { try await inAppPurchaseManager.loadProducts() } catch { print(error) } } } } } }