颤振镖-类没有实例getter.返回FutureBuilder



你能帮我解决这个问题吗?我试图从存储在sqflite中的数据返回一个FutureBuilder,返回它并与之构建一个小部件列表,但我有一个小问题,我不知道如何以正确的方式返回列表:

得到的错误是:

构建时抛出如下NoSuchMethodErrorFutureBuilder(脏,状态:_FutureBuilderState#7e2ff):类'List'没有实例getter 'messageToJson'。Receiver:长度为8的实例'_GrowableList' trying calling: messageToJson

这是我的消息类:

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类实例。

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);
}

最新更新