//没有为类型'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