উন্নত স্থান অনুসন্ধান উপাদান
প্লেস সার্চ কম্পোনেন্টের অ্যাডভান্সড ভার্সনটি প্লেস সার্চ এসেনশিয়ালস-এর মতোই ফিচারগুলো প্রদান করে। এটি আপনাকে কম্পোনেন্টটির অ্যাকশন বাটনগুলো কনফিগার করতে এবং প্রদর্শিত রিভিউ ও মিডিয়ার ওপর সার্চ ও ফিল্টারিং অপশন প্রয়োগ করতেও দেয়।
উন্নত স্থান অনুসন্ধান কনফিগারেশন
উন্নত বৈশিষ্ট্যগুলি অ্যাক্সেস করতেAdvancedPlaceSearchView ব্যবহার করুন।অ্যাকশন বাটন কনফিগার করুন
অ্যাকশন বাটনগুলো অপসারণ বা কাস্টমাইজ করতে AdvancedPlaceSearchView এর .cornerActions এবং .mainActions মেথডগুলো ব্যবহার করুন।
চাক্ষুষ অ্যাট্রিবিউশনের প্রয়োজনীয়তা
গুরুত্বপূর্ণ: যখন কোনো কাস্টম অ্যাকশন বাটন গুগল ছাড়া অন্য কোনো তৃতীয় পক্ষের সাথে ব্যবহারকারীর তথ্য শেয়ার করবে, তখন আপনাকে অবশ্যই ব্যবহারকারীদের কাছে তা স্পষ্ট করে জানাতে হবে। ভিজ্যুয়াল অ্যাট্রিবিউশনের আবশ্যকতাগুলো দেখুন।
উদাহরণটিতে একটি কাস্টম ছবি দেখানো হয়েছে, যা থেকে স্পষ্ট বোঝা যায় যে ব্যবহারকারীর তথ্য "Altostrat"-এ পাঠানো হবে।
অনুসন্ধান এবং ফিল্টারিং বিকল্পগুলি প্রয়োগ করুন
মিডিয়া বা রিভিউ অনুসন্ধান ও ফিল্টার করার সুবিধা চালু করতে AdvancedPlaceSearchView এর .searchMediaOptions এবং .searchReviewOptions মেথডগুলো ব্যবহার করুন।
উন্নত স্থান অনুসন্ধানের উদাহরণ
একটি প্রধান অ্যাকশন বাটন তৈরি করুন এবং কোণার অ্যাকশনগুলো সরিয়ে দিন।
এই কোড নমুনাটি কোনো স্থানকে পছন্দের তালিকায় যুক্ত করতে বা তালিকা থেকে বাদ দিতে একটি প্রধান অ্যাকশন বাটন তৈরি করে। এটি আরও নিশ্চিত করে যে কোনো কর্নার অ্যাকশন কনফিগার করা নেই।
সুইফট
struct AdvancedPlaceSearchDemoView: View { private let configuration = AdvancedPlaceSearchConfiguration( content: [.address(), .rating(), .type()], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top mediaSize = .medium, // default is .small selectable: true // default is false ) // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var placeSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) ) @State private var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceSearchView( orientation: .horizontal, // default is vertical request: placeSearchViewRequest, configuration: configuration ) .onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place, index in print("place: \(place)") print("index: \(index)") } .mainActions { place in var actions: [MainPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart.fill"), label: "Unfavorite" ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart"), label: "Favorite" ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } // Ensures that there are no corner actions. .cornerActions { _ in return [] } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
পর্যালোচনা এবং মিডিয়া ফিল্টার করুন
এই কোড নমুনাটি অনুসন্ধানের ফলাফল ফিল্টার করে শুধুমাত্র সেইসব মিডিয়া এবং রিভিউ দেখায়, যেগুলিতে 'কফি' শব্দটির উল্লেখ আছে।
সুইফট
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" // Query for loading the place details component. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest) let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: [.media(), .reviews()], theme: PlacesMaterialTheme() ), placeDetailsCallback: { _ in } ) .searchMediaOptions(searchMediaOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } .searchReviewsOptions(searchReviewsOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } }