Щелкните здесь, чтобы увидеть предыдущую версию, хорошо решенный мной и другими, вопрос
Я хочу отсортировать элементы в модели, которая представляет документы firebase в частности Коллекции.Также эта модель содержит идентификаторы документов пользователей (, которые будут отсортированы в соответствии с расстоянием ) из коллекции «пользователи», и я принесу эти документы только от «пользователей» сбор. Я рассчитал расстояния от текущего пользователя до других пользователей и хочу привести ближайших пользователей к этому пользователю. Я пробовал следующий код:
ScreenShot: [ В области розового поля все расчеты выполнены и назначены, а документы доставлены из firebase ] [] 2
Получена ошибка:
Получена эта ошибка: «Необработанное исключение: PlatformException (error, Invalid Query. ' in 'фильтры не могут содержать' null 'в массиве значений., null) "-
Подробный код:
Модель Temp:
class certainrangeusers {
final String id;
final double away;
final GeoPoint userpoint;
certainrangeusers({this.id, this.away, this.userpoint});
}
Переменные:
List<certainrangeusers> info= [];
код:
getUsers() async
{
double radius = 0.3;
String field = "GeoPosition";
print(currentUser.point.longitude);
GeoFirePoint center = geo.point(latitude: currentUser.point.latitude,
longitude: currentUser.point.longitude);
var collectionRef = Firestore.instance.collection('user_locations').document(currentUser.pincode)
.collection('Users_comp lete_address_and_geopoint');
this.stream = geo.collection(collectionRef: collectionRef)
.within(center: center, radius: radius, field: field, strictMode: false);
Future<List<certainrangeusers>> users1 = stream.first.then((documents) => documents.map((doc) =>
certainrangeusers(
id: doc['userPhone'],
userpoint : doc['GeoPosition']['geopoint'],
)
).toList());
users1.then((val) async{
for(var value in val){
info.add(certainrangeusers(
//away: await Geolocator().distanceBetween(currentUser.point.latitude,currentUser.point.longitude, value.userpoint.latitude, value.userpoint.longitude),
away: center.distance(lat: value.userpoint.latitude,lng: value.userpoint.longitude),
));
info.sort((a,b) => a.away.compareTo(b.away));
}
List ids = [];
for(var value in info){
ids.add(value.id);
}
QuerySnapshot snapshot = await Firestore.instance.collection('users').where('id', whereIn: ids).getDocuments();
List<User> users = snapshot.documents.map((doc) => User.fromDocument(doc)).toList();
setState(() {
this.users = users;
});
});
}