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;
  }

  var r1 = await _textSearch(text.trim(), params);
  yield r1;

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

    yield r2;
    r1 = r2;
  }

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

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

    r3.add(r1[i].setDistance(distance));
  }

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