Удаление конкретной карты / объекта из массива в firebase - PullRequest
0 голосов
/ 28 января 2019

Я экспериментирую с массивами и картами / объектами в firestore.Я задавался вопросом, как я могу удалить конкретную карту из массива.Я пробовал что-то вроде этого:

await Firestore.instance.collection('users').document(interestedInID).get().then((val){
  return val.data['usersInterested'].removeWhere((item)=>
    item['userID'] == userID
  ); 
}).catchError((e){
  print(e);
});

, но я получаю эту ошибку в терминале:

Unsupported operation: Cannot remove from a fixed-length list

Я действительно не понимаю, что это значит.Я сделал поиск в Google, и список фиксированной длины - именно то, о чем он говорит.Это список с фиксированной длиной, и его нельзя изменить, но список с фиксированной длиной должен быть объявлен явно.Растущий список, с другой стороны, не нужно объявлять.Я не объявлял список фиксированной длины в своем пожарном депо, но он продолжает говорить, что я не могу удалить элементы из него.Однако я могу добавлять / выдвигать элементы и удалять их, используя:

'key': FieldValue.arrayRemove([value])

, но я не могу понять, как удалить элемент на основе определенного условия.В этом случае userID.

Есть предложения?Большое спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Это может быть обходной путь:

  1. Вы выбираете свой конкретный Array с ключом: значения из Firebase
  2. Поместите это во временную ссылку List в дротике
  3. Удалите ваш конкретный Map из ссылки List, как вы делали раньше
  4. Обновите данные в Firebase следующим образом:
// make a reference List
List<Map> _modifiedUsersInterested = List();

// ... (fetch your Array first from Firebase, put those items in the reference List)

// remove the right Map from the reference List
_modifiedUsersInterested.removeWhere((item) => {
    item['userID'] == userID
});

// set the reference List as your array in Firebase
await Firestore.instance
.collection('users')
.document(interestedInId)
.updateData(
    {'usersInterested': _modifiedUsersInterested}
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...