1

我正在尝试开发一个消息传递应用程序,它总是抛出异常

'type '_InternalLinkedHashMap<String, dynamic>' 不是类型 'String' 的子类型

当我试图为消息赋予背景颜色时。它还显示

renderflex 溢出 99335 像素

在列表而不是列表中使用 MessageBubble 时。

                        final messages = snapshot.data.docs;
                        List<**MessageBubble**> messageBubbles = [];
                        for  (var message in messages){
                          final messageText = message.data();
                          final messageSender = message.data();
                          final messageBubble = MessageBubble(sender: messageSender, text: 
                          messageText,);
                          messageBubbles.add(messageBubble);
                        }
                        return Expanded(
                          child: ListView(
                            padding: EdgeInsets.symmetric(horizontal: 10,vertical: 20),
                            children : messageBubbles,
                          ),
                        );
                    },
                  ),
                  Container(
                    decoration: kMessageContainerDecoration,
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        Expanded(
                          child: TextField(
                            onChanged: (value) {
                              messageText = value;
                            },
                            decoration: kMessageTextFieldDecoration,
                          ),
                        ),
                        FlatButton(
                          onPressed: () {
                            _fireStore.collection('messages').add({
                              'text': messageText,
                              'sender': loggedInUser.email,
                            }
                            );
                          },
                          child: Text(
                            'Send',
                            style: kSendButtonTextStyle,
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          );
        }
    }
    
    class MessageBubble extends StatelessWidget {
    
      MessageBubble({this.sender, this.text});
    
      String sender;
      String text;
    
      @override
      Widget build(BuildContext context) {
        return Material(
          color: Colors.blueAccent,
          child: Text(
            '$text from $sender',
            style: TextStyle(
              fontSize: 50,
              color: Colors.white,
            ),
          ),
        );;
      }
    }
    
4

1 回答 1

0

这是因为根据您的模型MessageBubble需要两个字符串 [sender和]。text但是当你通过时:

 final messageText = message.data();

message.data() 这里是一个Map<String,dynamic>. 包含此地图中文本的字段是什么?例如,如果在 Firebase 中调用此字段textField,则需要使用:

 final messageText = message.get('textField');
于 2021-08-21T19:33:16.037 回答