查询 "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"]

这是一个想法。您可能需要稍微调整一下才能使其正常工作。