Потихоньку осваиваю Флаттера и Дартса в качестве моего нового хобби. Любой совет или помощь, которую вы можете дать, всегда приветствуется! Я пытаюсь внедрить простую систему друзей, где вы можете искать другого пользователя и добавлять его в друзья.
Ожидаемый результат:
- Зарегистрированный пользователь переходит в профиль друга и нажимает кнопку «Добавить друга».
- Firestore имеет коллекцию пользователей. В этой коллекции есть документ для каждого пользователя с информацией профиля, включая массив «друзья». Нажав кнопку «Добавить друга», вы добавите UID зарегистрированных пользователей в массив «друзей» этого второго человека.
- Затем на экране «Друзья» я использую StreamBuilder и Listview.builder, чтобы показать всех пользователей как карточки. , которые имеют UID зарегистрированного пользователя в массиве своих друзей.
Для этого я хочу использовать .where ('friends', arrayContains: 'user.uid') в потоке StreamBuilder, чтобы отображать только те пользовательские карты в списке на экране.
Вот код, который я написал:
class friendsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return
StreamBuilder(
stream: Firestore.instance
.collection('users')
.where('friends', arrayContains: user.uid).snapshots(),
builder: (context, documents) {
if (documents.hasData) {
return
Container(
height: 180,
child:
ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 1,
itemBuilder: (context, index) {
DocumentSnapshot friends = documents.data.documents[index];
Однако, когда я go для запуска моего приложения отображается сообщение об ошибке:
`The following RangeError was thrown building:
RangeError (index): Invalid value: Valid value range is empty: 0
When the exception was thrown, this was the stack
List.[](dart:core-patch/growable_array.dart:149:60)
friendsList.build.<anonymous closure>.<anonymous closure>
Примечания:
- itemCount жестко запрограммирован на 1 прямо сейчас. Я ожидаю, что во время тестирования вернется только 1 пользователь. Я заполнил Firestore большим количеством пользователей, как только все это заработало.
- Когда я поменяю массивом, содержит что-то более простое, например .where ('displayName', isEqualTo: 'My Name'). Snapshots (), , приложение работает без ошибок
- user.uid был протестирован и содержит намеченную строку
- Массивы присутствуют со значениями в Firestore (см. Ссылку внизу поста)
- Я настроил индекс для значений, которые я использую в 'users'
Кто-нибудь знает, что я могу сделать с этой ошибкой, и получаю документы, которые имеют массив друзей с UID вошедшего в систему пользователя?
Опять любые советы и помощь приветствуется. Снимок экрана Cloud Firestore здесь