উন্নত স্থান বিবরণ উপাদান
প্লেস ডিটেইলস কম্পোনেন্টের অ্যাডভান্সড ভার্সনটি প্লেস ডিটেইলস এসেনশিয়ালস-এর মতোই ফিচারগুলো প্রদান করে। এটি আপনাকে কম্পোনেন্টটির অ্যাকশন বাটনগুলো কনফিগার করতে এবং প্রদর্শিত রিভিউ ও মিডিয়ার ওপর সার্চ ও ফিল্টারিং অপশন প্রয়োগ করতেও দেয়।
উন্নত স্থান বিবরণ কনফিগারেশন
উন্নত বৈশিষ্ট্যগুলো অ্যাক্সেস করতেAdvancedPlaceDetailsView অথবা AdvancedPlaceDetailsCompactView ব্যবহার করুন।অ্যাকশন বাটন কনফিগার করুন
অ্যাকশন বাটনগুলো অপসারণ বা কাস্টমাইজ করতে AdvancedPlaceDetailsView অথবা AdvancedPlaceDetailsCompactView এর .cornerActions এবং .mainActions মেথডগুলো ব্যবহার করুন।
চাক্ষুষ অ্যাট্রিবিউশনের প্রয়োজনীয়তা
গুরুত্বপূর্ণ: যখন কোনো কাস্টম অ্যাকশন বাটন গুগল ছাড়া অন্য কোনো তৃতীয় পক্ষের সাথে ব্যবহারকারীর তথ্য শেয়ার করবে, তখন আপনাকে তা ব্যবহারকারীদের কাছে স্পষ্টভাবে জানিয়ে দিতে হবে। ভিজ্যুয়াল অ্যাট্রিবিউশনের আবশ্যকতাগুলো দেখুন।
ডানদিকের উদাহরণটিতে একটি কাস্টম ছবি দেখানো হয়েছে, যা থেকে স্পষ্ট বোঝা যায় যে ব্যবহারকারীর তথ্য "Altostrat"-এ পাঠানো হবে।
অনুসন্ধান এবং ফিল্টারিং বিকল্পগুলি প্রয়োগ করুন
মিডিয়া বা রিভিউ অনুসন্ধান ও ফিল্টার করার সুবিধা চালু করতে AdvancedPlaceDetailsView অথবা AdvancedPlaceDetailsCompactView এর .searchMediaOptions এবং .searchReviewOptions মেথডগুলো ব্যবহার করুন।
উন্নত স্থানের বিবরণের উদাহরণ
অ্যাকশন বাটনগুলি সরান
সুইফট
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: AdvancedPlaceDetailsView.allContent, theme: PlacesMaterialTheme() ), placeDetailsCallback: { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } ) .mainActions{ _ in return [] } } }
কাস্টম এবং পূর্বনির্ধারিত অ্যাকশন যোগ করুন
এই নমুনাটি পূর্বনির্ধারিত 'মানচিত্রে খুলুন' (Open in Maps) অ্যাকশনটির পাশাপাশি ব্যবহারকারীকে কোনো স্থানকে পছন্দের তালিকায় যুক্ত বা বাদ দেওয়ার একটি বিকল্প যোগ করে।
সুইফট
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) @State var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: AdvancedPlaceDetailsView.allContent, theme: PlacesMaterialTheme() ), placeDetailsCallback: { result in if let place = result.place { print("Place: \(place.description)") } else { print("Error: \(String(describing: result.error))") } } ) .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 } .cornerActions { place in var actions: [CornerPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( CornerPlaceAction( image: Image(systemName: "heart.fill"), accessibilityLabel: "Unfavorite", ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( CornerPlaceAction( image: Image(systemName: "heart"), accessibilityLabel: "Favorite", ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
পর্যালোচনা এবং মিডিয়া ফিল্টার করুন
এই কোড নমুনাটি শুধুমাত্র সেইসব মিডিয়া এবং রিভিউ দেখায় যেগুলিতে 'কফি'র উল্লেখ আছে।
সুইফট
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee") let searchReviewsOptions = SearchReviewsOptions(query: "coffee") 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)") } } } }