【发布时间】:2021-05-01 10:21:26
【问题描述】:
你能帮我解决这个问题吗?我正在尝试从存储在 sqflite 中的数据返回 FutureBuilder,返回它并用它构建一个小部件列表,但我遇到了一个小问题,我无法弄清楚如何以正确的方式返回列表:
我得到的错误是:
以下 NoSuchMethodError 被抛出构建 FutureBuilder
(脏,状态: _FutureBuilderState
#7e2ff):类 'List' 没有实例 getter 'messageToJson'。接收方:实例(长度:8) '_GrowableList' 尝试调用: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;
}
【问题讨论】:
-
你可以在问题中添加
dbHelper.getMessages()方法吗? -
@fartem,刚刚做了。谢谢!