پلتفرم را انتخاب کنید: Android iOS JavaScript

جزء اصلی تکمیل خودکار مکان

جزء اصلی تکمیل خودکار مکان از Places UI Kit به شما امکان می دهد یک مؤلفه رابط کاربری جداگانه اضافه کنید که وقتی کاربر مکانی را انتخاب می کند، شناسه مکان را برمی گرداند. کامپوننت یک پوشش تمام صفحه است که یک نوار جستجو را برای کاربران فراهم می کند تا درخواستی را وارد کنند. همانطور که کاربر تایپ می کند، لیستی از نتایج تکمیل خودکار در زیر نوار جستجو نشان داده می شود. هنگامی که کاربر روی یک مکان ضربه می زند، یک شی مکان تنها با شناسه مکان به توسعه دهنده بازگردانده می شود. این جزء قابل تنظیم است.

این مؤلفه مرزهای جغرافیایی و سایر پارامترهای جستجو را از طریق ساختار AutocompleteFilter می گیرد.

پاسخ یک ساختار Place را ارائه می دهد که فقط قسمت شناسه placeID پر شده است.

جزء اصلی تکمیل خودکار مکان دارای گزینه‌های سفارشی‌سازی زیر است: چگالی فهرست، و اینکه آیا نمادهای مکان را شامل شود یا خیر. از ساختار AutocompleteUICustomization برای سفارشی کردن کامپوننت استفاده کنید.

می‌توانید از مؤلفه «تکمیل خودکار مکان پایه» به‌طور مستقل یا در ارتباط با سایر APIها و سرویس‌های پلتفرم Google Maps استفاده کنید.

صورتحساب

هر بار که کامپوننت باز می شود و درخواستی انجام می شود، صورتحساب دریافت می کنید. برای آن جلسه دیگر صورت حسابی از شما دریافت نمی شود مگر اینکه جلسه منقضی شود یا مکانی از لیست انتخاب شود.

کامپوننت Basic Autocomplete را به برنامه خود اضافه کنید

پارامترهای فیلتر تکمیل خودکار (به عنوان مثال، انواع برای بازگشت، کشور برای محدود کردن نتایج، مختصات منطقه برای نتایج، و اطلاعات فاصله در صورت تنظیم مبدا کاربر) را مانند استفاده از تکمیل خودکار مکان (جدید) بدون کیت UI مکان‌ها تنظیم کنید. برای دستورالعمل‌های کامل و نمونه‌ای از کد ایجاد فیلتر تکمیل خودکار، به مستندات تکمیل خودکار مکان (جدید) مراجعه کنید.

هنگامی که فیلتر تکمیل خودکار خود را ایجاد کردید، می توانید یک ساختار با سفارشی سازی های UI خود ایجاد کنید. گزینه ها و دستورالعمل های سفارشی سازی را ببینید .

سپس، دکمه‌ای ایجاد کنید که مؤلفه تکمیل خودکار پایه سفارشی‌شده شما را راه‌اندازی می‌کند.

سویفت

  Button("Search for a place") {
    showWidget.toggle()
  }
  .basicPlaceAutocomplete(
    show: $showWidget
     // ...
  )

نمونه کامل را ببینید .

کامپوننت Basic Autocomplete را سفارشی کنید

چگالی فهرست

می توانید انتخاب کنید که یک لیست دو خطی یا چند خطی نمایش داده شود. از گزینه های AutocompleteListDensity ( .twoLine یا .multiLine ) در کلاس AutocompleteUICustomization استفاده کنید. اگر چگالی لیست را مشخص نکنید، مؤلفه یک لیست دو خطی نمایش می دهد.

نماد موقعیت مکانی

شما می توانید انتخاب کنید که آیا نماد مکان پیش فرض در لیست نتایج نمایش داده شود یا خیر. از گزینه های AutocompleteUIIcon ( .defaultIcon یا .noIcon ) در کلاس AutocompleteUICustomization استفاده کنید.

سفارشی‌سازی‌ها را به مولفه Basic Autocomplete اضافه کنید

از کلاس AutocompleteUICustomization برای سفارشی کردن جزء Basic Autocomplete استفاده کنید.

سویفت

let uiCustomization = AutocompleteUICustomization(
    listDensity: .multiLine,
    listItemIcon: .noIcon,
)

مثال

این مثال یک کامپوننت Basic Autocomplete سفارشی را با یک دکمه ایجاد می کند. نماد پیش‌فرض و چگالی فهرست دو خطی انتخاب شده‌اند. فیلتر تکمیل خودکار برای یافتن مکان های مرتبط با حسابداری در لاس وگاس و نزدیک آن تنظیم شده است.

سویفت

  // Note: You must provide an API key in your app entry point first.
  // A demo view of the basic place autocomplete widget.
  public struct BasicPlaceAutocompleteView: View {
    @State private var fetchedPlace: Place?
    @State private var placesError: PlacesError?
    @State private var showWidget = false
    public var body: some View {
      let types: Set<PlaceType> = [.accounting]
      let countries: Set<String> = ["US"]
      let origin = CLLocation(latitude: 36.19030535579595, longitude: -115.25397680618019)
      let coordinateRegion = RectangularCoordinateRegion(
        northEast: CLLocationCoordinate2D(
          latitude: 36.25290087640495, longitude: -115.08025549571225),
        southWest: CLLocationCoordinate2D(latitude: 36.06607422287787, longitude: -115.33431432920293)
      )
      let regionCode = "US"
      let inputOffset = 10
      let filter = AutocompleteFilter(
        types: types,
        countries: countries,
        origin: origin,
        coordinateRegionBias: coordinateRegion,
        regionCode: regionCode)
      let uiCustomization = AutocompleteUICustomization(
        listDensity: .multiLine,
        listItemIcon: .noIcon)
      VStack {
        Button("Search for a place") {
          showWidget.toggle()
        }
        .basicPlaceAutocomplete(
          filter: filter,
          uiCustomization: uiCustomization ?? AutocompleteUICustomization(),
          show: $showWidget,
          onSelection: { place in
            guard let placeID = place.placeID else {
              self.placesError = .internal(
                "Could not fetch place details because place ID from selected suggestion not found."
              )
              return
            }
            Task {
              let placesClient = await PlacesClient.shared
              let fetchPlaceRequest = FetchPlaceRequest(
                placeID: placeID,
                placeProperties: [.displayName, .formattedAddress]
              )
              switch await placesClient.fetchPlace(with: fetchPlaceRequest) {
              case .success(let place):
                print("Fetched place: \(place)")
                self.fetchedPlace = place
              case .failure(let placesError):
                print("Failed to fetch place: \(placesError)")
                self.placesError = placesError
              }
            }
          },
          onError: { placesError in
            self.placesError = placesError
          }
        )
        if let placesError = $placesError.wrappedValue {
          Text(placesError.localizedDescription)
            .frame(maxWidth: .infinity, alignment: .leading)
        } else if let fetchedPlace = $fetchedPlace.wrappedValue {
          Text("\(fetchedPlace)")
            .frame(maxWidth: .infinity, alignment: .leading)
        }
      }
    }
  }