fix example

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-04-20 21:17:43 +05:30
parent 3bb1b11ee8
commit 4e9f4baf23
5 changed files with 54 additions and 49 deletions
+4 -14
View File
@@ -1685,8 +1685,7 @@ class ChannelClientState {
...messages!,
];
newThreads[parentId]!
.sort(_sortByCreatedAt as int Function(Message, Message)?);
newThreads[parentId]!.sort(_sortByCreatedAt);
} else {
newThreads[parentId] = messages;
}
@@ -1713,7 +1712,7 @@ class ChannelClientState {
.any((newMessage) => newMessage.id == m.id) !=
true)
.toList(),
]..sort(_sortByCreatedAt as int Function(Message, Message)?);
]..sort(_sortByCreatedAt);
final newWatchers = <User>[
...updatedState.watchers,
@@ -1752,17 +1751,8 @@ class ChannelClientState {
);
}
int? _sortByCreatedAt(a, b) {
if (a.createdAt == null) {
return 1;
}
if (b.createdAt == null) {
return -1;
}
return a.createdAt.compareTo(b.createdAt);
}
int _sortByCreatedAt(Message a, Message b) =>
a.createdAt.compareTo(b.createdAt);
/// The channel state related to this client
ChannelState get _channelState => _channelStateController.value!;
@@ -7,6 +7,7 @@ import 'package:stream_chat/src/models/message.dart';
import 'package:stream_chat/src/models/reaction.dart';
import 'package:stream_chat/src/models/read.dart';
import 'package:stream_chat/src/models/user.dart';
import 'package:stream_chat/src/extensions/iterable_extension.dart';
/// A simple client used for persisting chat data locally.
abstract class ChatPersistenceClient {
@@ -78,7 +79,7 @@ abstract class ChatPersistenceClient {
return ChannelState(
members: data[0] as List<Member>,
read: data[1] as List<Read>,
channel: data[2] as ChannelModel,
channel: data[2] as ChannelModel?,
messages: data[3] as List<Message>,
pinnedMessages: data[4] as List<Message>,
);
@@ -192,17 +193,17 @@ abstract class ChatPersistenceClient {
deleteMembers,
]);
final channels = cleanedChannelStates
.map((it) => it.channel)
.where((it) => it != null) as Iterable<ChannelModel>;
final channels = cleanedChannelStates.map((it) => it.channel).withNullifyer;
final reactions =
cleanedChannelStates.expand((it) => it.messages).expand((it) => [
final reactions = cleanedChannelStates
.expand((it) => it.messages)
.expand((it) => [
if (it.ownReactions != null)
...it.ownReactions!.where((r) => r.userId != null),
if (it.latestReactions != null)
...it.latestReactions!.where((r) => r.userId != null),
]);
])
.withNullifyer;
final users = cleanedChannelStates
.map((cs) => [
@@ -220,7 +221,7 @@ abstract class ChatPersistenceClient {
...cs.members.map((m) => m.user),
])
.expand((it) => it)
.where((it) => it != null) as Iterable<User>;
.withNullifyer;
final updateMessagesFuture = cleanedChannelStates.map((it) {
final cid = it.channel!.cid;
@@ -0,0 +1,9 @@
/// Useful extension functions for [Iterable]
extension IterableX<T> on Iterable<T?> {
/// Removes all the null values
/// and converts `Iterable<T?>` into `Iterable<T>`
Iterable<T> get withNullifyer => [
for (final item in this)
if (item != null) item
];
}