show multiple received messages stacked

This commit is contained in:
otsmr 2025-03-16 22:18:49 +01:00
parent 0b084f795a
commit 644e5125d8
6 changed files with 178 additions and 67 deletions

View file

@ -149,7 +149,17 @@ class _MessageSendStateIconState extends State<MessageSendStateIcon> {
if (icons.length == 2) {
icon = Stack(
children: icons,
alignment: Alignment.center,
children: <Widget>[
// First icon (bottom icon)
icons[0],
Positioned(
top: 5.0,
left: 5.0,
child: icons[1],
),
// Second icon (top icon, slightly offset)
],
);
}

View file

@ -42,13 +42,13 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
Value<DateTime?> lastMessageSend = Value.absent();
Value<DateTime?> lastMessageReceived = Value.absent();
Value<DateTime?> lastMessage = Value.absent();
Value<DateTime?> lastFlameCounterChange = Value.absent();
if (contact.lastMessage != null) {
if (contact.lastFlameCounterChange != null) {
final now = DateTime.now();
final startOfToday = DateTime(now.year, now.month, now.day);
if (contact.lastMessage!.isBefore(startOfToday)) {
if (contact.lastFlameCounterChange!.isBefore(startOfToday)) {
// last flame update was yesterday. check if it can be updated.
bool updateFlame = false;
if (received) {
@ -62,12 +62,12 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
}
if (updateFlame) {
flameCounter += 1;
lastMessage = Value(timestamp);
lastFlameCounterChange = Value(timestamp);
}
}
} else {
// There where no message until no...
lastMessage = Value(timestamp);
lastFlameCounterChange = Value(timestamp);
}
if (received) {
@ -79,7 +79,7 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
return (update(contacts)..where((t) => t.userId.equals(contactId))).write(
ContactsCompanion(
totalMediaCounter: Value(totalMediaCounter),
lastMessage: lastMessage,
lastFlameCounterChange: lastFlameCounterChange,
lastMessageReceived: lastMessageReceived,
lastMessageSend: lastMessageSend,
flameCounter: Value(flameCounter),
@ -100,6 +100,11 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
.write(updatedValues);
}
Future newMessageExchange(int userId) {
return updateContact(
userId, ContactsCompanion(lastMessageExchange: Value(DateTime.now())));
}
Stream<List<Contact>> watchNotAcceptedContacts() {
return (select(contacts)..where((t) => t.accepted.equals(false))).watch();
// return (select(contacts)).watch();
@ -113,7 +118,7 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
Stream<List<Contact>> watchContactsForChatList() {
return (select(contacts)
..where((t) => t.accepted.equals(true) & t.blocked.equals(false))
..orderBy([(t) => OrderingTerm.desc(t.lastMessage)]))
..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)]))
.watch();
}

View file

@ -1,5 +1,6 @@
import 'package:drift/drift.dart';
import 'package:logging/logging.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/json_models/message.dart';
@ -110,6 +111,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDatabase>
Future<int?> insertMessage(MessagesCompanion message) async {
try {
await twonlyDatabase.contactsDao
.newMessageExchange(message.contactId.value);
return await into(messages).insert(message);
} catch (e) {
Logger("twonlyDatabase").shout("Error while inserting message: $e");

View file

@ -19,7 +19,9 @@ class Contacts extends Table {
DateTimeColumn get lastMessageSend => dateTime().nullable()();
DateTimeColumn get lastMessageReceived => dateTime().nullable()();
DateTimeColumn get lastMessage => dateTime().nullable()();
DateTimeColumn get lastFlameCounterChange => dateTime().nullable()();
DateTimeColumn get lastMessageExchange =>
dateTime().withDefault(currentDateAndTime)();
IntColumn get flameCounter => integer().withDefault(Constant(0))();

View file

@ -101,12 +101,20 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
late final GeneratedColumn<DateTime> lastMessageReceived =
GeneratedColumn<DateTime>('last_message_received', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _lastMessageMeta =
const VerificationMeta('lastMessage');
static const VerificationMeta _lastFlameCounterChangeMeta =
const VerificationMeta('lastFlameCounterChange');
@override
late final GeneratedColumn<DateTime> lastMessage = GeneratedColumn<DateTime>(
'last_message', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
late final GeneratedColumn<DateTime> lastFlameCounterChange =
GeneratedColumn<DateTime>('last_flame_counter_change', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _lastMessageExchangeMeta =
const VerificationMeta('lastMessageExchange');
@override
late final GeneratedColumn<DateTime> lastMessageExchange =
GeneratedColumn<DateTime>('last_message_exchange', aliasedName, false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
defaultValue: currentDateAndTime);
static const VerificationMeta _flameCounterMeta =
const VerificationMeta('flameCounter');
@override
@ -129,7 +137,8 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
totalMediaCounter,
lastMessageSend,
lastMessageReceived,
lastMessage,
lastFlameCounterChange,
lastMessageExchange,
flameCounter
];
@override
@ -200,11 +209,17 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
lastMessageReceived.isAcceptableOrUnknown(
data['last_message_received']!, _lastMessageReceivedMeta));
}
if (data.containsKey('last_message')) {
if (data.containsKey('last_flame_counter_change')) {
context.handle(
_lastMessageMeta,
lastMessage.isAcceptableOrUnknown(
data['last_message']!, _lastMessageMeta));
_lastFlameCounterChangeMeta,
lastFlameCounterChange.isAcceptableOrUnknown(
data['last_flame_counter_change']!, _lastFlameCounterChangeMeta));
}
if (data.containsKey('last_message_exchange')) {
context.handle(
_lastMessageExchangeMeta,
lastMessageExchange.isAcceptableOrUnknown(
data['last_message_exchange']!, _lastMessageExchangeMeta));
}
if (data.containsKey('flame_counter')) {
context.handle(
@ -246,8 +261,12 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
lastMessageReceived: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}last_message_received']),
lastMessage: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}last_message']),
lastFlameCounterChange: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}last_flame_counter_change']),
lastMessageExchange: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}last_message_exchange'])!,
flameCounter: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}flame_counter'])!,
);
@ -272,7 +291,8 @@ class Contact extends DataClass implements Insertable<Contact> {
final int totalMediaCounter;
final DateTime? lastMessageSend;
final DateTime? lastMessageReceived;
final DateTime? lastMessage;
final DateTime? lastFlameCounterChange;
final DateTime lastMessageExchange;
final int flameCounter;
const Contact(
{required this.userId,
@ -287,7 +307,8 @@ class Contact extends DataClass implements Insertable<Contact> {
required this.totalMediaCounter,
this.lastMessageSend,
this.lastMessageReceived,
this.lastMessage,
this.lastFlameCounterChange,
required this.lastMessageExchange,
required this.flameCounter});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
@ -312,9 +333,11 @@ class Contact extends DataClass implements Insertable<Contact> {
if (!nullToAbsent || lastMessageReceived != null) {
map['last_message_received'] = Variable<DateTime>(lastMessageReceived);
}
if (!nullToAbsent || lastMessage != null) {
map['last_message'] = Variable<DateTime>(lastMessage);
if (!nullToAbsent || lastFlameCounterChange != null) {
map['last_flame_counter_change'] =
Variable<DateTime>(lastFlameCounterChange);
}
map['last_message_exchange'] = Variable<DateTime>(lastMessageExchange);
map['flame_counter'] = Variable<int>(flameCounter);
return map;
}
@ -341,9 +364,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: lastMessageReceived == null && nullToAbsent
? const Value.absent()
: Value(lastMessageReceived),
lastMessage: lastMessage == null && nullToAbsent
lastFlameCounterChange: lastFlameCounterChange == null && nullToAbsent
? const Value.absent()
: Value(lastMessage),
: Value(lastFlameCounterChange),
lastMessageExchange: Value(lastMessageExchange),
flameCounter: Value(flameCounter),
);
}
@ -365,7 +389,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageSend: serializer.fromJson<DateTime?>(json['lastMessageSend']),
lastMessageReceived:
serializer.fromJson<DateTime?>(json['lastMessageReceived']),
lastMessage: serializer.fromJson<DateTime?>(json['lastMessage']),
lastFlameCounterChange:
serializer.fromJson<DateTime?>(json['lastFlameCounterChange']),
lastMessageExchange:
serializer.fromJson<DateTime>(json['lastMessageExchange']),
flameCounter: serializer.fromJson<int>(json['flameCounter']),
);
}
@ -385,7 +412,9 @@ class Contact extends DataClass implements Insertable<Contact> {
'totalMediaCounter': serializer.toJson<int>(totalMediaCounter),
'lastMessageSend': serializer.toJson<DateTime?>(lastMessageSend),
'lastMessageReceived': serializer.toJson<DateTime?>(lastMessageReceived),
'lastMessage': serializer.toJson<DateTime?>(lastMessage),
'lastFlameCounterChange':
serializer.toJson<DateTime?>(lastFlameCounterChange),
'lastMessageExchange': serializer.toJson<DateTime>(lastMessageExchange),
'flameCounter': serializer.toJson<int>(flameCounter),
};
}
@ -403,7 +432,8 @@ class Contact extends DataClass implements Insertable<Contact> {
int? totalMediaCounter,
Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(),
Value<DateTime?> lastFlameCounterChange = const Value.absent(),
DateTime? lastMessageExchange,
int? flameCounter}) =>
Contact(
userId: userId ?? this.userId,
@ -422,7 +452,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: lastMessageReceived.present
? lastMessageReceived.value
: this.lastMessageReceived,
lastMessage: lastMessage.present ? lastMessage.value : this.lastMessage,
lastFlameCounterChange: lastFlameCounterChange.present
? lastFlameCounterChange.value
: this.lastFlameCounterChange,
lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange,
flameCounter: flameCounter ?? this.flameCounter,
);
Contact copyWithCompanion(ContactsCompanion data) {
@ -446,8 +479,12 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: data.lastMessageReceived.present
? data.lastMessageReceived.value
: this.lastMessageReceived,
lastMessage:
data.lastMessage.present ? data.lastMessage.value : this.lastMessage,
lastFlameCounterChange: data.lastFlameCounterChange.present
? data.lastFlameCounterChange.value
: this.lastFlameCounterChange,
lastMessageExchange: data.lastMessageExchange.present
? data.lastMessageExchange.value
: this.lastMessageExchange,
flameCounter: data.flameCounter.present
? data.flameCounter.value
: this.flameCounter,
@ -469,7 +506,8 @@ class Contact extends DataClass implements Insertable<Contact> {
..write('totalMediaCounter: $totalMediaCounter, ')
..write('lastMessageSend: $lastMessageSend, ')
..write('lastMessageReceived: $lastMessageReceived, ')
..write('lastMessage: $lastMessage, ')
..write('lastFlameCounterChange: $lastFlameCounterChange, ')
..write('lastMessageExchange: $lastMessageExchange, ')
..write('flameCounter: $flameCounter')
..write(')'))
.toString();
@ -489,7 +527,8 @@ class Contact extends DataClass implements Insertable<Contact> {
totalMediaCounter,
lastMessageSend,
lastMessageReceived,
lastMessage,
lastFlameCounterChange,
lastMessageExchange,
flameCounter);
@override
bool operator ==(Object other) =>
@ -507,7 +546,8 @@ class Contact extends DataClass implements Insertable<Contact> {
other.totalMediaCounter == this.totalMediaCounter &&
other.lastMessageSend == this.lastMessageSend &&
other.lastMessageReceived == this.lastMessageReceived &&
other.lastMessage == this.lastMessage &&
other.lastFlameCounterChange == this.lastFlameCounterChange &&
other.lastMessageExchange == this.lastMessageExchange &&
other.flameCounter == this.flameCounter);
}
@ -524,7 +564,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
final Value<int> totalMediaCounter;
final Value<DateTime?> lastMessageSend;
final Value<DateTime?> lastMessageReceived;
final Value<DateTime?> lastMessage;
final Value<DateTime?> lastFlameCounterChange;
final Value<DateTime> lastMessageExchange;
final Value<int> flameCounter;
const ContactsCompanion({
this.userId = const Value.absent(),
@ -539,7 +580,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
this.totalMediaCounter = const Value.absent(),
this.lastMessageSend = const Value.absent(),
this.lastMessageReceived = const Value.absent(),
this.lastMessage = const Value.absent(),
this.lastFlameCounterChange = const Value.absent(),
this.lastMessageExchange = const Value.absent(),
this.flameCounter = const Value.absent(),
});
ContactsCompanion.insert({
@ -555,7 +597,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
this.totalMediaCounter = const Value.absent(),
this.lastMessageSend = const Value.absent(),
this.lastMessageReceived = const Value.absent(),
this.lastMessage = const Value.absent(),
this.lastFlameCounterChange = const Value.absent(),
this.lastMessageExchange = const Value.absent(),
this.flameCounter = const Value.absent(),
}) : username = Value(username);
static Insertable<Contact> custom({
@ -571,7 +614,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
Expression<int>? totalMediaCounter,
Expression<DateTime>? lastMessageSend,
Expression<DateTime>? lastMessageReceived,
Expression<DateTime>? lastMessage,
Expression<DateTime>? lastFlameCounterChange,
Expression<DateTime>? lastMessageExchange,
Expression<int>? flameCounter,
}) {
return RawValuesInsertable({
@ -588,7 +632,10 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
if (lastMessageSend != null) 'last_message_send': lastMessageSend,
if (lastMessageReceived != null)
'last_message_received': lastMessageReceived,
if (lastMessage != null) 'last_message': lastMessage,
if (lastFlameCounterChange != null)
'last_flame_counter_change': lastFlameCounterChange,
if (lastMessageExchange != null)
'last_message_exchange': lastMessageExchange,
if (flameCounter != null) 'flame_counter': flameCounter,
});
}
@ -606,7 +653,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
Value<int>? totalMediaCounter,
Value<DateTime?>? lastMessageSend,
Value<DateTime?>? lastMessageReceived,
Value<DateTime?>? lastMessage,
Value<DateTime?>? lastFlameCounterChange,
Value<DateTime>? lastMessageExchange,
Value<int>? flameCounter}) {
return ContactsCompanion(
userId: userId ?? this.userId,
@ -621,7 +669,9 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
totalMediaCounter: totalMediaCounter ?? this.totalMediaCounter,
lastMessageSend: lastMessageSend ?? this.lastMessageSend,
lastMessageReceived: lastMessageReceived ?? this.lastMessageReceived,
lastMessage: lastMessage ?? this.lastMessage,
lastFlameCounterChange:
lastFlameCounterChange ?? this.lastFlameCounterChange,
lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange,
flameCounter: flameCounter ?? this.flameCounter,
);
}
@ -666,8 +716,13 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
map['last_message_received'] =
Variable<DateTime>(lastMessageReceived.value);
}
if (lastMessage.present) {
map['last_message'] = Variable<DateTime>(lastMessage.value);
if (lastFlameCounterChange.present) {
map['last_flame_counter_change'] =
Variable<DateTime>(lastFlameCounterChange.value);
}
if (lastMessageExchange.present) {
map['last_message_exchange'] =
Variable<DateTime>(lastMessageExchange.value);
}
if (flameCounter.present) {
map['flame_counter'] = Variable<int>(flameCounter.value);
@ -690,7 +745,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
..write('totalMediaCounter: $totalMediaCounter, ')
..write('lastMessageSend: $lastMessageSend, ')
..write('lastMessageReceived: $lastMessageReceived, ')
..write('lastMessage: $lastMessage, ')
..write('lastFlameCounterChange: $lastFlameCounterChange, ')
..write('lastMessageExchange: $lastMessageExchange, ')
..write('flameCounter: $flameCounter')
..write(')'))
.toString();
@ -2400,7 +2456,8 @@ typedef $$ContactsTableCreateCompanionBuilder = ContactsCompanion Function({
Value<int> totalMediaCounter,
Value<DateTime?> lastMessageSend,
Value<DateTime?> lastMessageReceived,
Value<DateTime?> lastMessage,
Value<DateTime?> lastFlameCounterChange,
Value<DateTime> lastMessageExchange,
Value<int> flameCounter,
});
typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({
@ -2416,7 +2473,8 @@ typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({
Value<int> totalMediaCounter,
Value<DateTime?> lastMessageSend,
Value<DateTime?> lastMessageReceived,
Value<DateTime?> lastMessage,
Value<DateTime?> lastFlameCounterChange,
Value<DateTime> lastMessageExchange,
Value<int> flameCounter,
});
@ -2488,8 +2546,13 @@ class $$ContactsTableFilterComposer
column: $table.lastMessageReceived,
builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastMessage => $composableBuilder(
column: $table.lastMessage, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastFlameCounterChange,
builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange,
builder: (column) => ColumnFilters(column));
ColumnFilters<int> get flameCounter => $composableBuilder(
column: $table.flameCounter, builder: (column) => ColumnFilters(column));
@ -2564,8 +2627,13 @@ class $$ContactsTableOrderingComposer
column: $table.lastMessageReceived,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastMessage => $composableBuilder(
column: $table.lastMessage, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastFlameCounterChange,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get flameCounter => $composableBuilder(
column: $table.flameCounter,
@ -2617,8 +2685,11 @@ class $$ContactsTableAnnotationComposer
GeneratedColumn<DateTime> get lastMessageReceived => $composableBuilder(
column: $table.lastMessageReceived, builder: (column) => column);
GeneratedColumn<DateTime> get lastMessage => $composableBuilder(
column: $table.lastMessage, builder: (column) => column);
GeneratedColumn<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastFlameCounterChange, builder: (column) => column);
GeneratedColumn<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange, builder: (column) => column);
GeneratedColumn<int> get flameCounter => $composableBuilder(
column: $table.flameCounter, builder: (column) => column);
@ -2680,7 +2751,8 @@ class $$ContactsTableTableManager extends RootTableManager<
Value<int> totalMediaCounter = const Value.absent(),
Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(),
Value<DateTime?> lastFlameCounterChange = const Value.absent(),
Value<DateTime> lastMessageExchange = const Value.absent(),
Value<int> flameCounter = const Value.absent(),
}) =>
ContactsCompanion(
@ -2696,7 +2768,8 @@ class $$ContactsTableTableManager extends RootTableManager<
totalMediaCounter: totalMediaCounter,
lastMessageSend: lastMessageSend,
lastMessageReceived: lastMessageReceived,
lastMessage: lastMessage,
lastFlameCounterChange: lastFlameCounterChange,
lastMessageExchange: lastMessageExchange,
flameCounter: flameCounter,
),
createCompanionCallback: ({
@ -2712,7 +2785,8 @@ class $$ContactsTableTableManager extends RootTableManager<
Value<int> totalMediaCounter = const Value.absent(),
Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(),
Value<DateTime?> lastFlameCounterChange = const Value.absent(),
Value<DateTime> lastMessageExchange = const Value.absent(),
Value<int> flameCounter = const Value.absent(),
}) =>
ContactsCompanion.insert(
@ -2728,7 +2802,8 @@ class $$ContactsTableTableManager extends RootTableManager<
totalMediaCounter: totalMediaCounter,
lastMessageSend: lastMessageSend,
lastMessageReceived: lastMessageReceived,
lastMessage: lastMessage,
lastFlameCounterChange: lastFlameCounterChange,
lastMessageExchange: lastMessageExchange,
flameCounter: flameCounter,
),
withReferenceMapper: (p0) => p0

View file

@ -212,19 +212,35 @@ class _UserListItem extends State<UserListItem> {
if (notOpenedMessagesSnapshot.data != null &&
notOpenedMessagesSnapshot.data!.isNotEmpty) {
// filter first for only received messages
lastMessages = notOpenedMessagesSnapshot.data!
var notOpenedMessages = notOpenedMessagesSnapshot.data!;
lastMessages = notOpenedMessages
.where((x) => x.messageOtherId != null)
.toList();
if (lastMessages.isEmpty) {
lastMessages = notOpenedMessagesSnapshot.data!;
}
var media =
lastMessages.where((x) => x.kind == MessageKind.media);
if (media.isNotEmpty) {
currentMessage = media.first;
// For send images show only one
if (lastMessages.isEmpty) {
var media = notOpenedMessages
.where((x) => x.kind == MessageKind.media);
if (media.isNotEmpty) {
currentMessage = media.first;
lastMessages = [currentMessage!];
} else {
currentMessage = notOpenedMessages.first;
lastMessages = [currentMessage!];
}
} else {
currentMessage = lastMessages.first;
// there are multiple messages received
var media =
lastMessages.where((x) => x.kind == MessageKind.media);
if (media.isNotEmpty) {
currentMessage = media.first;
} else {
currentMessage = lastMessages.first;
}
}
} else {
currentMessage = lastMessage;