Как отфильтровать список в Dart - PullRequest
1 голос
/ 09 июля 2019

Я получаю свои DocumentSnapshots от Firebase, и я пытаюсь удалить документ, в котором совпадает идентификатор пользователя, но userList всегда возвращает 4 записи.

List<DocumentSnapshot> userList = new List<DocumentSnapshot>();

                        userList = snapshot.data.documents.map((DocumentSnapshot docSnapshot) {
                          //print("ACTUAL USER :: " + docSnapshot.data['userId']);
                          if (docSnapshot.data['userId'] != id) {
                            return docSnapshot;
                          } else {
                            print('FOUND IT: ' + id);
                            userList.remove(docSnapshot.data);
                            //userList.removeWhere((docSnapshot) => 'userId' == id);
                          }
                        }).toList();

print('userList Size: ' + userList.length.toString());

Проверка работает ("Найденоэто "), но ни в одном из моих тестов не удалось удалить пользователя из списка документов.

Может кто-нибудь посоветовать, пожалуйста?

1 Ответ

0 голосов
/ 10 июля 2019

Вы пытаетесь удалить элемент из List еще до того, как он был добавлен.
В частности, функция map назначит List вашей переменной userList после того, как отобразит снимки.
По вашему коду я могу сказать, что вы на самом деле не хотите выполнять отображение , а только фильтрацию .

В Dart вы можете фильтровать, используя Iterable.where.
В вашем случае это будет выглядеть примерно так:

final List<DocumentSnapshot> userList = snapshot.data.documents
      .where((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();

Я предполагаю, что вам нужны только документы, которые не имеют a userId из id, в противном случае вам придется использовать оператор ==.

Вы также можете использовать List.removeWhere, назначив сначала все документы вашему userList, а затем позвонив removeWhere:

final List<DocumentSnapshot> userList = snapshot.data.documents;

userList.removeWhere((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...