Migrated llc Lists to be nullable instead of being an empty array

This commit is contained in:
Ayush Shekhar
2022-04-26 21:11:24 +05:30
parent 381e1c06f5
commit b6bb3608e5
23 changed files with 178 additions and 153 deletions
@@ -98,8 +98,9 @@ class HomeScreen extends StatelessWidget {
AsyncSnapshot<ChannelState?> snapshot,
) {
if (snapshot.hasData && snapshot.data != null) {
final _messages = snapshot.data!.messages ?? [];
return MessageView(
messages: snapshot.data!.messages.reversed.toList(),
messages: _messages.reversed.toList(),
channel: channel,
);
} else if (snapshot.hasError) {
@@ -34,14 +34,20 @@ class MemberDao extends DatabaseAccessor<DriftChatDatabase>
bulkUpdateMembers({cid: memberList});
/// Bulk updates the members data of multiple channels
Future<void> bulkUpdateMembers(Map<String, List<Member>> channelWithMembers) {
Future<void> bulkUpdateMembers(
Map<String, List<Member>?> channelWithMembers,
) {
final entities = channelWithMembers.entries
.map((entry) => entry.value.map(
.map((entry) =>
(entry.value?.map(
(member) => member.toEntity(cid: entry.key),
))
)) ??
[])
.expand((it) => it)
.toList(growable: false);
return batch((batch) => batch.insertAllOnConflictUpdate(members, entities));
return batch(
(batch) => batch.insertAllOnConflictUpdate(members, entities),
);
}
/// Deletes all the members whose [Members.channelCid] is present in [cids]
@@ -183,12 +183,14 @@ class MessageDao extends DatabaseAccessor<DriftChatDatabase>
/// Bulk updates the message data of multiple channels
Future<void> bulkUpdateMessages(
Map<String, List<Message>> channelWithMessages,
Map<String, List<Message>?> channelWithMessages,
) {
final entities = channelWithMessages.entries
.map((entry) => entry.value.map(
.map((entry) =>
entry.value?.map(
(message) => message.toEntity(cid: entry.key),
))
) ??
[])
.expand((it) => it)
.toList(growable: false);
return batch(
@@ -183,12 +183,14 @@ class PinnedMessageDao extends DatabaseAccessor<DriftChatDatabase>
/// Bulk updates the message data of multiple channels
Future<void> bulkUpdateMessages(
Map<String, List<Message>> channelWithMessages,
Map<String, List<Message>?> channelWithMessages,
) {
final entities = channelWithMessages.entries
.map((entry) => entry.value.map(
.map((entry) =>
entry.value?.map(
(message) => message.toPinnedEntity(cid: entry.key),
))
) ??
[])
.expand((it) => it)
.toList(growable: false);
return batch(
@@ -33,11 +33,13 @@ class ReadDao extends DatabaseAccessor<DriftChatDatabase> with _$ReadDaoMixin {
bulkUpdateReads({cid: readList});
/// Bulk updates the reads data of multiple channels
Future<void> bulkUpdateReads(Map<String, List<Read>> channelWithReads) {
Future<void> bulkUpdateReads(Map<String, List<Read>?> channelWithReads) {
final entities = channelWithReads.entries
.map((entry) => entry.value.map(
.map((entry) =>
entry.value?.map(
(read) => read.toEntity(cid: entry.key),
))
) ??
[])
.expand((it) => it)
.toList(growable: false);
return batch((batch) => batch.insertAllOnConflictUpdate(reads, entities));
@@ -56,7 +56,7 @@ class DriftChatDatabase extends _$DriftChatDatabase {
// you should bump this number whenever you change or add a table definition.
@override
int get schemaVersion => 6;
int get schemaVersion => 7;
@override
MigrationStrategy get migration => MigrationStrategy(
@@ -295,21 +295,21 @@ class StreamChatPersistenceClient extends ChatPersistenceClient {
}
@override
Future<void> bulkUpdateMembers(Map<String, List<Member>> members) {
Future<void> bulkUpdateMembers(Map<String, List<Member>?> members) {
assert(_debugIsConnected, '');
_logger.info('bulkUpdateMembers');
return _readProtected(() => db!.memberDao.bulkUpdateMembers(members));
}
@override
Future<void> bulkUpdateMessages(Map<String, List<Message>> messages) {
Future<void> bulkUpdateMessages(Map<String, List<Message>?> messages) {
assert(_debugIsConnected, '');
_logger.info('bulkUpdateMessages');
return _readProtected(() => db!.messageDao.bulkUpdateMessages(messages));
}
@override
Future<void> bulkUpdatePinnedMessages(Map<String, List<Message>> messages) {
Future<void> bulkUpdatePinnedMessages(Map<String, List<Message>?> messages) {
assert(_debugIsConnected, '');
_logger.info('bulkUpdatePinnedMessages');
return _readProtected(
@@ -334,7 +334,7 @@ class StreamChatPersistenceClient extends ChatPersistenceClient {
}
@override
Future<void> bulkUpdateReads(Map<String, List<Read>> reads) {
Future<void> bulkUpdateReads(Map<String, List<Read>?> reads) {
assert(_debugIsConnected, '');
_logger.info('bulkUpdateReads');
return _readProtected(() => db!.readDao.bulkUpdateReads(reads));
@@ -61,10 +61,10 @@ void main() {
);
expect(channelState, isA<ChannelState>());
expect(channelState.members.length, members.length);
expect(channelState.read.length, reads.length);
expect(channelState.messages.length, messages.length);
expect(channelState.pinnedMessages.length, messages.length);
expect(channelState.members?.length, members.length);
expect(channelState.read?.length, reads.length);
expect(channelState.messages?.length, messages.length);
expect(channelState.pinnedMessages?.length, messages.length);
final channelModel = channelState.channel!;
expect(channelModel.id, entity.id);
@@ -219,10 +219,10 @@ void main() {
.thenAnswer((_) async => messages);
final fetchedChannelState = await client.getChannelStateByCid(cid);
expect(fetchedChannelState.messages.length, messages.length);
expect(fetchedChannelState.pinnedMessages.length, messages.length);
expect(fetchedChannelState.members.length, members.length);
expect(fetchedChannelState.read.length, reads.length);
expect(fetchedChannelState.messages?.length, messages.length);
expect(fetchedChannelState.pinnedMessages?.length, messages.length);
expect(fetchedChannelState.members?.length, members.length);
expect(fetchedChannelState.read?.length, reads.length);
expect(fetchedChannelState.channel!.cid, channel.cid);
verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(1);
@@ -277,10 +277,10 @@ void main() {
for (var i = 0; i < fetchedChannelStates.length; i++) {
final original = channelStates[i];
final fetched = fetchedChannelStates[i];
expect(fetched.members.length, original.members.length);
expect(fetched.messages.length, original.messages.length);
expect(fetched.pinnedMessages.length, original.pinnedMessages.length);
expect(fetched.read.length, original.read.length);
expect(fetched.members?.length, original.members?.length);
expect(fetched.messages?.length, original.messages?.length);
expect(fetched.pinnedMessages?.length, original.pinnedMessages?.length);
expect(fetched.read?.length, original.read?.length);
expect(fetched.channel!.cid, original.channel!.cid);
}