struct POIButtons: View { @Binding var searchResults: [MKMapItem] @Binding var selectedTabBarButton: String @Binding var visibleRegion: MKCoordinateRegion? @Binding var route: MKRoute? @Binding var isShowingBottomSheet: Bool @Binding var defaultSearchText: String @StateObject var locationManager = LocationManager.shared @State var showSettingsView: Bool = false var body: some View { HStack { evStationButton gasStationButton NavigationStack { settingsButton } } .onAppear(perform: { if locationManager.state == .denied { search(for: defaultSearchText) } }) .labelStyle(AdaptiveLabelStyle()) } var evStationButton: some View { Button("EV Station", systemImage: "bolt.car") { search(for: "EV Charging Points") selectedTabBarButton = "EV" isShowingBottomSheet = false route = nil } .buttonStyle(PressedButtonStyle()) } var gasStationButton: some View { Button("Gas Station", systemImage: "fuelpump.circle") { search(for: "Gas Station") selectedTabBarButton = "Gas" isShowingBottomSheet = false route = nil } .buttonStyle(PressedButtonStyle()) } var settingsButton: some View { VStack { Button("Settings", systemImage: "gear.circle") { showSettingsView.toggle() selectedTabBarButton = "Settings" isShowingBottomSheet = false route = nil } .navigationDestination( isPresented: $showSettingsView) { SettingsView(isShowingBottomSheet: $isShowingBottomSheet) } .buttonStyle(PressedButtonStyle()) } } func search(for query: String) { let request = MKLocalSearch.Request() request.naturalLanguageQuery = query request.resultTypes = .pointOfInterest request.region = visibleRegion ?? MKCoordinateRegion( center: .userLocation, span: MKCoordinateSpan(latitudeDelta: 0.008, longitudeDelta: 0.008)) Task { let search = MKLocalSearch(request: request) let response = try? await search.start () searchResults = response?.mapItems ?? [] } } }