【问题标题】:The method 'forEach' isn't defined for the type 'Object'没有为“对象”类型定义方法“forEach”
【发布时间】:2021-11-16 06:18:55
【问题描述】:

我制作了一个视频播放器应用程序,我从这个 YouTube 视频中看到了一个示例。 https://www.youtube.com/watch?v=3gU1OLKBcys&t=739s

但我面临这个问题

没有为“Object”类型定义“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;
            }));
  }
}

【问题讨论】:

  • 您是否尝试过强制转换特定类型:(value.data()? as Map).forEach...
  • 你试过在 forEach() 之前添加 .toList()
  • 感谢 cmets,您有示例或指南吗?我已经尝试修复它,但它不起作用。我是初学者

标签: flutter dart foreach


【解决方案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();
});

【讨论】:

  • 当我映射部分数据时,if (!videoID.contains(value)) { videoID.add(value); } 未定义
猜你喜欢
  • 2022-01-25
  • 2021-09-02
  • 2022-11-21
  • 2021-09-20
  • 1970-01-01
  • 2021-10-19
  • 2020-12-14
  • 2021-07-19
  • 2021-09-01
相关资源
最近更新 更多