查询 "The operator '[]' isn't defined for the type 'Object'." 时遇到以下错误
Faced following error for querying "The operator '[]' isn't defined for the type 'Object'."
我在为我的聊天应用程序编写聊天屏幕时遇到了上述错误,该屏幕将显示与另一个用户的实时聊天。
class _ChatState extends State<Chat> { late Stream <QuerySnapshot<Object?>> chats; late QuerySnapshot<Map<String, dynamic>> snapshot; TextEditingController messageEditingController = new TextEditingController();
Widget chatMessages() {
return StreamBuilder<QuerySnapshot>(
stream: chats,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: snapshot.data?.docs.length,
itemBuilder: (context, index) {
return MessageTile(
message: snapshot.data?.docs[index].data()!["message"], //error line
sendByMe: Constants.myName ==
snapshot.data?.docs[index].data()!["sendBy"], //error line
);
})
: Container();
},
); }
addMessage() {
if (messageEditingController.text.isNotEmpty) {
Map<String, dynamic> chatMessageMap = {
"sendBy": Constants.myName,
"message": messageEditingController.text,
'time': DateTime.now().millisecondsSinceEpoch,
};
DatabaseMethods().addMessage(widget.chatRoomId, chatMessageMap);
setState(() {
messageEditingController.text = "";
});
}
}
如果有人帮助我并向我解释为什么会这样,我会很高兴。
总的来说, 回答有帮助。简而言之:“您不能在对象上调用索引器 []”。
在你的情况下,你不能在两行中的对象上使用索引器。解决此问题的一种可能方法是将对象转换为 Map 或 List,然后再应用索引器。
类似于:
var list = snapshot.data? as List;
var map = list[index] as Map;
然后:
message: map["message"]
这是一个想法。您可能需要稍微调整一下才能使其正常工作。
我在为我的聊天应用程序编写聊天屏幕时遇到了上述错误,该屏幕将显示与另一个用户的实时聊天。
class _ChatState extends State<Chat> { late Stream <QuerySnapshot<Object?>> chats; late QuerySnapshot<Map<String, dynamic>> snapshot; TextEditingController messageEditingController = new TextEditingController();
Widget chatMessages() {
return StreamBuilder<QuerySnapshot>(
stream: chats,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: snapshot.data?.docs.length,
itemBuilder: (context, index) {
return MessageTile(
message: snapshot.data?.docs[index].data()!["message"], //error line
sendByMe: Constants.myName ==
snapshot.data?.docs[index].data()!["sendBy"], //error line
);
})
: Container();
},
); }
addMessage() {
if (messageEditingController.text.isNotEmpty) {
Map<String, dynamic> chatMessageMap = {
"sendBy": Constants.myName,
"message": messageEditingController.text,
'time': DateTime.now().millisecondsSinceEpoch,
};
DatabaseMethods().addMessage(widget.chatRoomId, chatMessageMap);
setState(() {
messageEditingController.text = "";
});
}
}
如果有人帮助我并向我解释为什么会这样,我会很高兴。
总的来说,
在你的情况下,你不能在两行中的对象上使用索引器。解决此问题的一种可能方法是将对象转换为 Map 或 List,然后再应用索引器。
类似于:
var list = snapshot.data? as List;
var map = list[index] as Map;
然后:
message: map["message"]
这是一个想法。您可能需要稍微调整一下才能使其正常工作。