#flutter #dart #foreach
Вопрос:
я создал приложение для видеоплеера, пример которого я видел в этом видео на YouTube. https://www.youtube.com/watch?v=3gU1OLKBcysamp;t=739s
но я сталкиваюсь с этой проблемой
Метод «forEach» не определен для типа «Объект». Попробуйте исправить имя на имя существующего метода или определить метод с именем «forEach».
Как я могу это исправить? или есть какой-нибудь способ помочь мне?
@override
void initState() {
linkRef = FirebaseFirestore.instance.collection('links').doc('urls');
super.initState();
getData();
print(videoID);
}
_addItemFuntion() async {
await linkRef.set({
_addItemController.text.toString(): _addItemController.text.toString()
}, SetOptions(merge: true));
Flushbar(
title: 'Added',
message: 'updating...',
duration: Duration(seconds: 3),
icon: Icon(Icons.info_outline))
..show(context);
setState(() {
videoID.add(_addItemController.text);
});
print('added');
FocusScope.of(this.context).unfocus();
_addItemController.clear();
}
getData() async {
await linkRef
.get()
.then((value) => value.data()?.forEach((key, value) {
if (!videoID.contains(value)) {
videoID.add(value);
}
}))
.whenComplete(() => setState(() {
videoID.shuffle();
showItem = true;
}));
}
}
Комментарии:
1. Вы пробовали использовать определенный тип: (значение.данные()? как карта<X, Y>).forEach…
2. Вы пробовали добавлять . ToList() перед forEach()
3. Спасибо за комментарии,у вас есть пример или руководство ? Я пытался это исправить, но это не работает. я новичок
Ответ №1:
Поскольку вы получаете один документ, данные всегда будут картой, вы должны сначала отрицать ее, если ваши данные в порядке, например:
then((value){
/// if the data is a list;
(value.data as List).forEach();
/// if the data is a map as it should be
(value.data['myList'] as List).forEach();
});
Комментарии:
1. Когда я сопоставляю данные, часть
if (!videoID.contains(value)) { videoID.add(value); }
которых не определена