Как отсортировать определенные элементы в модели, которые представляют документы firebase определенной коллекции? (PS: нажмите ниже, чтобы получить ответ на вопрос) - PullRequest
0 голосов
/ 04 мая 2020

Щелкните здесь, чтобы увидеть предыдущую версию, хорошо решенный мной и другими, вопрос

Я хочу отсортировать элементы в модели, которая представляет документы firebase в частности Коллекции.Также эта модель содержит идентификаторы документов пользователей (, которые будут отсортированы в соответствии с расстоянием ) из коллекции «пользователи», и я принесу эти документы только от «пользователей» сбор. Я рассчитал расстояния от текущего пользователя до других пользователей и хочу привести ближайших пользователей к этому пользователю. Я пробовал следующий код:

ScreenShot: [ В области розового поля все расчеты выполнены и назначены, а документы доставлены из firebase ] [In the pink box area, whole calculation is done and assigned and documents brought from 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;
                 });
              });
          }

1 Ответ

2 голосов
/ 05 мая 2020

Сообщение об ошибке сообщает вам, что у вас не может быть нулевого значения в массиве, который вы используете для этого запроса:

Firestore.instance
    .collection('users')
    .where('id', whereIn: ids)
    .getDocuments();

Вам нужно будет выяснить, почему ids содержит нулевое значение и исправьте это. Мы не можем понять, откуда это происходит, исходя из того, что вы здесь показываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...