searchAddress method

Stream<List<GmhAddressData>> searchAddress({
  1. required String text,
  2. required GmhSearchParams params,
})

Get list of addresses based on text query

Implementation

Stream<List<GmhAddressData>> searchAddress({
  required String text,
  required GmhSearchParams params,
}) async* {
  if (text.trim().isEmpty) {
    yield [];
    return;
  }

  final temp = await _textSearch(text.trim(), params);
  yield temp;

  final List<GmhAddressData> addresses = [];
  for (int i = 0; i < temp.length; i++) {
    addresses.add(temp[i]);
    if (temp[i].types.contains('postal_code')) {
      addresses.addAll(await _searchNearby(params.apiKey, temp[i]));
    }
  }

  yield addresses;

  if (params.loc == null ||
      params.directionsKey == null ||
      addresses.length <= 5) {
    return;
  }
  temp.clear();

  final List<GmhAddressData> newAddresses = [];
  for (int i = 0; i < addresses.length; i++) {
    final distance = await _getDistance(
      params.directionsKey!,
      params.loc!,
      LatLng(addresses[i].lat, addresses[i].lng),
    );

    newAddresses.add(addresses[i].setDistance(distance));
  }

  newAddresses.sort(
    (a, b) => (a.distance ?? 10e10).compareTo(b.distance ?? 10e10),
  );
  yield newAddresses;
}