你能帮我解决这个问题吗?我试图从存储在sqflite中的数据返回一个FutureBuilder,返回它并用它构建一个小部件列表,但我遇到了一个小问题,我不知道如何以正确的方式返回列表:
我得到的错误是:
下面是我的消息类:
import "dart:convert";
List<Message> messageFromJson(String str) =>
List<Message>.from(json.decode(str).map((x) => Message.fromJson(x)));
String messageToJson(List<Message> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Message {
String message;
String sender;
String date;
String contactID;
Message({this.sender, this.message, this.date, this.contactID});
factory Message.fromJson(Map<String, dynamic> json) => Message(
message: json['message'],
sender: json['sender'],
date: json['date'],
contactID: json['contactID'],
);
Map<String, dynamic> toJson() => {
"message": message,
"sender" : sender,
"date" : date,
"contactID" : contactID
};
}
我是这样称呼它的。我的问题在于我调用并试图使用快照数据的地方。然后我实例化BeautifulBubble类,我认为这是可以的。
body: new FutureBuilder(
future: dbHelper.getMessages(0),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
//Todo: Figure out how to call this:
final messages = snapshot.data.messageToJson;
List<BeautifulChatBubble> messageBubs = [];
for (var message in messages.toJson().values) {
final senderText = message.data['sender'];
final messageText = message.data['message'];
final dateText = message.data['date'];
final contactIDText = message.data['contactID'];
final messagebubble = BeautifulChatBubble(
sender: senderText,
text: messageText,
date: dateText,
isMe: false,
);
messageBubs.add(messagebubble);
}
return Expanded(
child: ListView(
reverse: true,
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
children: messageBubs,
),
);
}
)
同时添加dbhelper.getmessages
Future<List<Message>> getMessages(int chatid) async {
final db = await database;
final res = await db.query(messagetable, where: '$columnChatID = ?', whereArgs: [chatid]);
List<Message> messagelist =
res.isNotEmpty? res.map((c) => Message.fromJson(c)).toList() : [] ;
return messagelist;
}
getMessages()
方法返回实体列表,而不是单个实体。在您的案例中,数据库将数据解析到Message
类,您应该将FutureBuilder
中的数据操作为Message
类实例。
dart prettyprint-override">final messages = snapshot.data;
List<BeautifulChatBubble> messageBubs = [];
for (var message in messages) {
final senderText = message.sender;
final messageText = message.message;
final dateText = message.date;
final contactIDText = message.contactID;
final messagebubble = BeautifulChatBubble(
sender: senderText,
text: messageText,
date: dateText,
isMe: false,
);
messageBubs.add(messagebubble);
}
我是从火神那里收取数据的,我有这个,我是火神的新手,我知道的不多,所以你能帮我吗? 错误是这样的:类'AsyncSnapshot'没有实例getter'docs'。接收器:'AsyncSnapshot'的实例尝试调用:docs
我的代码中有两个流,第一个是从朋友列表中获取用户ID,第二个流是使用ID列表在Firebase中搜索用户ID的文档。 这是火力恢复代码。 我不知道为什么会发生这种情况,因为我可以显示id列表。我曾尝试将更改为,但也会产生相同的错误。 编辑:
我有一个应用程序,我想从Firestore数据库中检索uid文档中表示的消息,如下所述,这些消息存储如下:聊天室- 但我收到以下错误: 生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态:\u StreamBuilderBaseState 导致错误的相关小部件是:StreamBuilderfile:///Users/ahmedhussain/Downloads/
我正在遵循一个教程,试图创建一个水平的SingleChildScrollView,它包含带有产品描述的对象和带有两个小数的货币+价格标签。实现NumberFormat.Currency方法返回一个错误:NosuchMethodeRorr类“String”没有实例getter“is negal” 有人能帮助理解为什么它不拉“价格”价值吗?如果我对其进行硬编码,并为最终的双倍价格赋值=IE:29.90
我想显示某个区域内的用户,但使用地理查询我得到一个错误 “类别”列表 接收器:实例(长度:1)的'_GrowableList' 尝试调用:文档
我最近开始使用Firebase fiRecovery,这是一个我似乎找不到答案的错误,我在查看类似问题的答案后尝试将snapshot.data.documents编写为文档、文档和文档,但它仍然抛出相同的错误。我该怎么办?我正在使用的fiRecovery版本是cloud_firestore:^1.0.7 它引发的异常