У меня есть приложение чата, и я немного волнуюсь, когда у меня, например, 10.000 сообщений (+ изображения) в моем групповом чате.Правильный ли следующий код (или загружается ли весь чат (= все сообщения) каждый раз, когда я его открываю)?Отличным решением было бы, если бы StreamBuilder загружал только самые новые сообщения и ленивые загрузки, если я прокручивал до старых.
StreamBuilder(
stream: _queryDatabase.onValue,
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data.snapshot.value != null) {
//final int documentsLength = snapshot.data.documents.length;
Map<dynamic, dynamic> map =
snapshot.data.snapshot.value;
List<dynamic> list = map.values.toList()
..sort((a, b) =>
b['timestamp'].compareTo(a['timestamp']));
final int listLength = map.values.toList().length;
// map.forEach((dynamic, v) => print(v["author"]));
//print(messages);
return ListView.builder(
padding: const EdgeInsets.all(8.0),
physics: const AlwaysScrollableScrollPhysics(),
controller: _scrollController,
itemCount: listLength,
reverse: true,
itemBuilder: (context, int index) {
_responseToText() {
setRef(
textRef: list[index]['text'],
authorRef: list[index]['author']);
}
_responseToImage() {
setRef(
imageUrl: list[index]['imageUrl'],
authorRef: list[index]['author']);
}
_responseToImageResponse() {
setRef(
textRef: list[index]['text'],
imageUrl: list[index]['imageUrl'],
authorRef: list[index]['author']);
}
return ChatMessageSingleChat(
snapshot: list,
index: index,
userId: globals.userId,
singleChat: true,
groupId: widget.groupId,
answerText: _responseToText,
answerImage: _responseToImage,
answerImageAnswer: _responseToImageResponse,
newFocusNode: _newFocusNode,
);
}); ...