Я не знаю о кешировании, но несколько общих советов было бы разделить пользователей на разделы. При использовании GPS вы обнаруживаете страну, в которой находится человек, с помощью API обратного геокодирования от Google. Более того, вы можете использовать administrator_area_level_1 , чтобы получить штат / провинцию, или вы можете найти другие близкие города или штаты с помощью Обратное геокодирование Api .
Таким образом, когда пользователь 1 входит в приложение, вы получаете координаты, используете API Google и получаете Страна: Великобритания, Ближний Город: Лондон, Ближайшие города: [Оксфорд, Кембридж, ...].
Затем напишите в firestore.
cities -> UK -> London -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Oxford -> rendomgeneratedId - {userinfo&coordinates}
cities -> UK -> Cambridge -> rendomgeneratedId - {userinfo&coordinates}
Теперь, когда пользователь 2, который живет в Оксфорде, устанавливает радиус на 10 км, приложение получает координаты пользователя 2 -> находит страну пользователя 2, текущий город и близлежащие города. И выполняет поиск в Cloud Firestore с долготой и широтой:
//Search in Oxford
cities.UK.Oxford.rendomgeneratedId.where("longitute", "<", 100)
cities.UK.Oxford.rendomgeneratedId.where("longitute", ">", 50)
//same for latitude
//Search in London
cities.UK.London.rendomgeneratedId.where("longitute", "<", 100)
cities.UK.London.rendomgeneratedId.where("longitute", ">", 50)
etc.
Я рекомендую использовать пакет Flutter LatLong для расчета пункта назначения 0,5 км от центра:
final Distance distance = const Distance();
final num distanceInMeter = (EARTH_RADIUS * math.PI / 4).round();
final p1 = new LatLng(0.0, 0.0);
final p2 = distance.offset(p1, distanceInMeter, 180);
// LatLng(latitude:-45.219848, longitude:0.0)
print(p2.round());
Flutter LatLong