better performance of the chat list

This commit is contained in:
otsmr 2025-03-27 18:03:01 +01:00
parent a407a3fbea
commit 4b441533e0

View file

@ -32,6 +32,14 @@ class ChatListView extends StatefulWidget {
} }
class _ChatListViewState extends State<ChatListView> { class _ChatListViewState extends State<ChatListView> {
late Stream<List<Contact>> contactListStream;
@override
void initState() {
super.initState();
contactListStream = twonlyDatabase.contactsDao.watchContactsForChatList();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -86,7 +94,7 @@ class _ChatListViewState extends State<ChatListView> {
], ],
), ),
body: StreamBuilder( body: StreamBuilder(
stream: twonlyDatabase.contactsDao.watchContactsForChatList(), stream: contactListStream,
builder: (context, snapshot) { builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == null) { if (!snapshot.hasData || snapshot.data == null) {
return Container(); return Container();
@ -157,12 +165,18 @@ class _UserListItem extends State<UserListItem> {
int lastMessageInSeconds = 0; int lastMessageInSeconds = 0;
MessageSendState state = MessageSendState.send; MessageSendState state = MessageSendState.send;
Message? currentMessage; Message? currentMessage;
late Stream<List<Message>> lastMessageStream;
late Stream<List<Message>> notOpenedMessageStream;
Timer? updateTime; Timer? updateTime;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
lastMessageStream =
twonlyDatabase.messagesDao.watchLastMessage(widget.user.userId);
notOpenedMessageStream =
twonlyDatabase.messagesDao.watchMessageNotOpened(widget.user.userId);
lastUpdateTime(); lastUpdateTime();
} }
@ -196,8 +210,7 @@ class _UserListItem extends State<UserListItem> {
child: ListTile( child: ListTile(
title: Text(getContactDisplayName(widget.user)), title: Text(getContactDisplayName(widget.user)),
subtitle: StreamBuilder( subtitle: StreamBuilder(
stream: stream: lastMessageStream,
twonlyDatabase.messagesDao.watchLastMessage(widget.user.userId),
builder: (context, lastMessageSnapshot) { builder: (context, lastMessageSnapshot) {
if (!lastMessageSnapshot.hasData) { if (!lastMessageSnapshot.hasData) {
return Container(); return Container();
@ -207,8 +220,7 @@ class _UserListItem extends State<UserListItem> {
} }
final lastMessage = lastMessageSnapshot.data!.first; final lastMessage = lastMessageSnapshot.data!.first;
return StreamBuilder( return StreamBuilder(
stream: twonlyDatabase.messagesDao stream: notOpenedMessageStream,
.watchMessageNotOpened(widget.user.userId),
builder: (context, notOpenedMessagesSnapshot) { builder: (context, notOpenedMessagesSnapshot) {
if (!lastMessageSnapshot.hasData) { if (!lastMessageSnapshot.hasData) {
return Container(); return Container();