【发布时间】:2018-07-11 07:29:33
【问题描述】:
我有一个 SQLite 数据库,可以从中查询数据。从这些数据中,我创建了必要的小部件并将它们存储在一个列表中。将列表传递给 ListView.builder 我从列表中创建项目。一切看起来都不错,除非我将新数据添加到小部件列表中。如果我使用insert,什么都不会显示。如果我使用add 没有问题。这是sn-p。
List<MessageItem> _messageItems = <MessageItem>[];
// Reads the data and creates the widgets (all OK here)
// Called when reading the data <<<
_readDBMessages() async {
List<Map> messages = await readMessages(_threadID);
List<MessageItem> holderList = <MessageItem>[];
for (final msg in messages) {
holderList.add(new MessageItem(
msg['message'],
msg['timestamp'],
msg['status'],
_contactData['photo']));
}
_messageItems.clear();
setState(() {
_messages = msges;
_messageItems = holderList;
});
}
// When I use _messageItems.add(new MessageItem()); the item shows as expected but it
// it's located on top of the list. Since my ListView is reverse
// I instead use _messagesInsert(0, new MessageItem()); in doing so
// The list is not updated. Scrolling up/down will than proceed to
// show the item as expected.
// Called when storing the data <<<
_storeNewMessage(String message) {
int timestamp = new DateTime.now().millisecondsSinceEpoch;
storeMessage(_threadID, message, _me, 'sending', timestamp, 'text').then((onValue) {
// _readDBMessages();
setState(() {
_messageItems.add(
new MessageItem(
message, timestamp, 'sending', null
)
);
print('Message inserted ---------------');
});
});
}
// Here's my listView constructor <<<
new Expanded(
child: new ListView.builder(
reverse: true,
padding: const EdgeInsets.all(12.0),
itemCount: (_messageItems == null) ? 0 : _messageItems.length,
itemBuilder: (context, i) => _messageItems[i]
)
),
根据 Flutter 医生的说法,一切正常,感谢您的帮助 ;-)
【问题讨论】:
-
什么是
_messagesInsert(0, new MessageItem)?应该是_messagItems(0, new MessageItem());? -
@GünterZöchbauer 对不起,这是我评论中的一个懒惰的错字。我确实按照你的建议做。
-
无法想象为什么它不起作用。
标签: dart flutter flutter-layout