Метод «forEach» не определен для типа «Объект»

#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); } которых не определена