//没有为类型'Object'定义运算符'[]'。? [复制]

Posted

技术标签:

【中文标题】//没有为类型\'Object\'定义运算符\'[]\'。? [复制]【英文标题】://The operator '[]' isn't defined for the type 'Object'.? [duplicate]//没有为类型'Object'定义运算符'[]'。? [复制] 【发布时间】:2021-11-09 15:03:49 【问题描述】:

我在项目中更新了 Cloud Firestore 依赖项,但出现了旧代码。

错误:

没有为“对象”类型定义运算符“[]”。?

model.dart

Product.fromSnapshot(DocumentSnapshot snapshot)
  _featured = snapshot.data()[FEATURED];//error occurs here
  _brand = snapshot.data()[BRAND];//error occurs here
  _category = snapshot.data()[CATEGORY];//error occurs here

update.dart

 FutureBuilder<QuerySnapshot>(future: FirebaseFirestore.instance.
            collection("items").where("shortInfo",whereIn: snapshots.
            data.docs[index].data()[EcommerceApp.productID]).
            get(),//occure error
              builder: (c,snap)
              
                return snap.hasData?AdminOrderCard(
                  itemCount: snap.data.docs.length,
                  data:snap.data.docs,
                  orderId: snapshots.data.docs[index].id,
                  orderBy:snapshots.data.docs[index].data()["orderBy"],//occure error
                  addressID:snapshots.data.docs[index].data()
                  ["addressID"],//occure error
                )
                    :Center(child: circularProgress(),);
              ,

            );
 List<DropdownMenuItem<String>> getCategoriesDropdown()
    List<DropdownMenuItem<String>> items = new List();
    for(int i = 0; i < categories.length; i++)

      setState(() 
          print(i);
        items.insert(0, DropdownMenuItem(child: Text(categories[i].data()['category']),
            value: categories[i].data()['category']));
      );
    
    return items;
  
  

   _currentCategory = categories[0].data()['category'];  //The operator '[]' isn't defined for the type 'Object'. (Documentation)

pro.dart:

Future<void> getMobileandTabIconData() async 
  List<CategoryIcon> newList = [];
  QuerySnapshot dressSnapShot = await FirebaseFirestore.instance
      .collection("categoryicon")
      .doc("MhZyArOf2zrOmPO7R3y6")
      .collection("mobile&tablets")
      .get();
  dressSnapShot.docs.forEach(
        (element) 
      mobileandtabiconData = CategoryIcon(image: element.data()["image"]);//error occure 
      newList.add(mobileandtabiconData);
    ,
  );
  mobileandtabIcon = newList;
  notifyListeners();

【问题讨论】:

您能说明类别的来源吗? 【参考方案1】:

试试这个。希望我涵盖了你所有的错误。

Product.fromSnapshot(DocumentSnapshot snapshot) 
  Map<String, dynamic> json = snapshot.data();
  // FEATURED, BRAND AND CATEGORY SHOULD BE Strings
  _featured = json[FEATURED];
  _brand = json[BRAND];
  _category = json[CATEGORY];

...
Map<String, dynamic> data = data.docs[index].data();
// EcommerceApp.productID should be a string
FirebaseFirestore.instance
    .collection("items")
    .where("shortInfo", whereIn: snapshots.data[EcommerceApp.productID])
    .get();
...
Map<String, dynamic> data1 = snapshots.data.docs[index].data();
return snap.hasData?AdminOrderCard(
    itemCount: snap.data.docs.length,
    data:snap.data.docs,
    orderId: snapshots.data.docs[index].id,
    orderBy: data1["orderBy"],
    addressID: data1["addressID"],
  );
...
Map<String, dynamic> categoryDoc = categories[0].data();
_currentCategory = categoryDoc['category'];
...
Map<String, dynamic> imageDoc = element.data();
mobileandtabiconData = CategoryIcon(image: imageDoc["image"]);

【讨论】:

【参考方案2】:

确保您的 categories 变量键入为 List

实现这一点的最简单(虽然有点笨拙)的方法是将您的代码行更改为以下内容。

 _currentCategory = (categories as List)[0].data()['category'];  //The operator '[]' isn't defined for the type 'Object'. (Documentation)

【讨论】:

每一行的实际错误是什么? 兄弟多行代码在代码上方显示相同的错误我还没有找到解决方案? 像我上面显示的那样投射它并不能解决比行的错误? 您的投射已成功解决类别错误,但我有未来的生成器功能,这是发生错误 错误是什么?【参考方案3】:

确保您从 API 返回的数据与预期的数据类型相同,这对我有用.. 就像将其类型转换为(如 List;)

【讨论】:

以上是关于//没有为类型'Object'定义运算符'[]'。? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'

没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'.dartundefined_operator [重复]

没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'。在使用 listview builder 显示数据时

未为类型“Object Function()”定义运算符“[]”

没有告诉 Protobuf 网络序列化 System.Object 但仍然出现错误:没有为类型定义序列化程序:System.Object

没有为类“对象”定义运算符“[]”。扑