From bc9e0d0285133e8fa5c505704e9ad028d2daf040 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 20 Apr 2021 12:44:22 +0200 Subject: [PATCH] migrate code --- packages/stream_chat/lib/src/api/channel.dart | 88 +++++++++---------- .../lib/src/models/channel_model.dart | 2 +- packages/stream_chat/lib/src/models/user.dart | 16 +--- packages/stream_chat/lib/stream_chat.dart | 1 + 4 files changed, 47 insertions(+), 60 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 63fc5595..cc205772 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -81,7 +81,7 @@ class Channel { /// Channel configuration as a stream Stream? get configStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.config); + return state?.channelStateStream.map((cs) => cs.channel?.config); } /// Channel user creator @@ -93,7 +93,7 @@ class Channel { /// Channel user creator as a stream Stream? get createdByStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.createdBy); + return state?.channelStateStream.map((cs) => cs.channel?.createdBy); } /// Channel frozen status @@ -105,7 +105,7 @@ class Channel { /// Channel frozen status as a stream Stream? get frozenStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.frozen); + return state?.channelStateStream.map((cs) => cs.channel?.frozen); } /// Channel creation date @@ -117,7 +117,7 @@ class Channel { /// Channel creation date as a stream Stream? get createdAtStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.createdAt); + return state?.channelStateStream.map((cs) => cs.channel?.createdAt); } /// Channel last message date @@ -131,7 +131,7 @@ class Channel { Stream? get lastMessageAtStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.lastMessageAt); + return state?.channelStateStream.map((cs) => cs.channel?.lastMessageAt); } /// Channel updated date @@ -145,7 +145,7 @@ class Channel { Stream? get updatedAtStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.updatedAt); + return state?.channelStateStream.map((cs) => cs.channel?.updatedAt); } /// Channel deletion date @@ -159,7 +159,7 @@ class Channel { Stream? get deletedAtStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.deletedAt); + return state?.channelStateStream.map((cs) => cs.channel?.deletedAt); } /// Channel member count @@ -173,7 +173,7 @@ class Channel { Stream? get memberCountStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.memberCount); + return state?.channelStateStream.map((cs) => cs.channel?.memberCount); } /// Channel id @@ -195,7 +195,7 @@ class Channel { /// Channel extra data as a stream Stream?>? get extraDataStream { _checkInitialized(); - return state?.channelStateStream.map((cs) => cs!.channel?.extraData); + return state?.channelStateStream.map((cs) => cs.channel?.extraData); } /// The main Stream chat client @@ -842,7 +842,7 @@ class Channel { messages: state?.messages?..remove(oldMessage), )); } else { - oldMessage = state!.threads!.values + oldMessage = state!.threads.values .expand((messages) => messages) .firstWhereOrNull((m) => m.id == messageId); if (oldMessage?.parentId != null) { @@ -853,8 +853,8 @@ class Channel { state!.addMessage(parentMessage.copyWith( replyCount: parentMessage.replyCount! - 1)); } - state!.updateThreadInfo(oldMessage!.parentId, - state!.threads![oldMessage.parentId!]!..remove(oldMessage)); + state!.updateThreadInfo(oldMessage!.parentId!, + state!.threads[oldMessage.parentId!]!..remove(oldMessage)); } } @@ -1333,7 +1333,7 @@ class ChannelClientState { final _subscriptions = []; void _computeInitialUnread() { - final userRead = channelState?.read.firstWhereOrNull( + final userRead = channelState.read.firstWhereOrNull( (r) => r.user.id == _channel._client.state.user?.id, ); if (userRead != null) { @@ -1372,9 +1372,9 @@ class ChannelClientState { void _listenMemberAdded() { _subscriptions.add(_channel.on(EventType.memberAdded).listen((Event e) { final member = e.member; - updateChannelState(channelState!.copyWith( + updateChannelState(channelState.copyWith( members: [ - ...channelState!.members, + ...channelState.members, member!, ], )); @@ -1384,9 +1384,9 @@ class ChannelClientState { void _listenMemberRemoved() { _subscriptions.add(_channel.on(EventType.memberRemoved).listen((Event e) { final user = e.user; - updateChannelState(channelState!.copyWith( + updateChannelState(channelState.copyWith( members: List.from( - channelState!.members..removeWhere((m) => m.userId == user!.id)), + channelState.members..removeWhere((m) => m.userId == user!.id)), )); })); } @@ -1394,7 +1394,7 @@ class ChannelClientState { void _listenChannelUpdated() { _subscriptions.add(_channel.on(EventType.channelUpdated).listen((Event e) { final channel = e.channel!; - updateChannelState(channelState!.copyWith( + updateChannelState(channelState.copyWith( channel: channel, members: channel.members, )); @@ -1416,14 +1416,14 @@ class ChannelClientState { /// This flag should be managed by UI sdks. /// When false, any new message (received by WebSocket event /// - [EventType.messageNew]) will not be pushed on to message list. - bool get isUpToDate => _isUpToDateController.value!; + bool get isUpToDate => _isUpToDateController.value ?? true; set isUpToDate(bool isUpToDate) => _isUpToDateController.add(isUpToDate); /// [isUpToDate] flag count as a stream - Stream get isUpToDateStream => _isUpToDateController.stream; + Stream get isUpToDateStream => _isUpToDateController.stream; - final BehaviorSubject _isUpToDateController = + final BehaviorSubject _isUpToDateController = BehaviorSubject.seeded(true); /// The retry queue associated to this channel @@ -1432,7 +1432,7 @@ class ChannelClientState { /// Retry failed message Future retryFailedMessages() async { final failedMessages = - [...messages, ...threads!.values.expand((v) => v)] + [...messages, ...threads.values.expand((v) => v)] .where( (message) => message.status != MessageSendingStatus.sent && @@ -1549,7 +1549,7 @@ class ChannelClientState { } if (message.parentId != null) { - updateThreadInfo(message.parentId, [message]); + updateThreadInfo(message.parentId!, [message]); } } @@ -1592,14 +1592,14 @@ class ChannelClientState { /// Channel message list as a stream Stream?> get messagesStream => - channelStateStream.map((cs) => cs!.messages); + channelStateStream.map((cs) => cs.messages); /// Channel pinned message list List? get pinnedMessages => _channelState.pinnedMessages.toList(); /// Channel pinned message list as a stream Stream?> get pinnedMessagesStream => - channelStateStream.map((cs) => cs!.pinnedMessages.toList()); + channelStateStream.map((cs) => cs.pinnedMessages.toList()); /// Get channel last message Message? get lastMessage => _channelState.messages.isNotEmpty == true @@ -1618,7 +1618,7 @@ class ChannelClientState { /// Channel members list as a stream Stream> get membersStream => CombineLatestStream.combine2< List?, Map, List>( - channelStateStream.map((cs) => cs!.members), + channelStateStream.map((cs) => cs.members), _channel.client.state.usersStream, (members, users) => members!.map((e) => e!.copyWith(user: users[e.user!.id])).toList(), @@ -1629,7 +1629,7 @@ class ChannelClientState { /// Channel watcher count as a stream Stream get watcherCountStream => - channelStateStream.map((cs) => cs!.watcherCount); + channelStateStream.map((cs) => cs.watcherCount); /// Channel watchers list List get watchers => _channelState.watchers @@ -1639,7 +1639,7 @@ class ChannelClientState { /// Channel watchers list as a stream Stream> get watchersStream => CombineLatestStream.combine2< List?, Map, List>( - channelStateStream.map((cs) => cs!.watchers), + channelStateStream.map((cs) => cs.watchers), _channel.client.state.usersStream, (watchers, users) => watchers!.map((e) => users[e.id] ?? e).toList(), ); @@ -1648,8 +1648,7 @@ class ChannelClientState { List? get read => _channelState.read; /// Channel read list as a stream - Stream?> get readStream => - channelStateStream.map((cs) => cs!.read); + Stream?> get readStream => channelStateStream.map((cs) => cs.read); final BehaviorSubject _unreadCountController = BehaviorSubject.seeded(0); @@ -1672,17 +1671,17 @@ class ChannelClientState { } /// Update threads with updated information about messages - void updateThreadInfo(String? parentId, List? messages) { - final newThreads = Map?>.from(threads!); + void updateThreadInfo(String parentId, List messages) { + final newThreads = Map>.from(threads); if (newThreads.containsKey(parentId)) { newThreads[parentId] = [ ...newThreads[parentId] - ?.where((newMessage) => - !messages!.any((m) => m.id == newMessage.id)) + ?.where( + (newMessage) => !messages.any((m) => m.id == newMessage.id)) .toList() ?? [], - ...messages!, + ...messages, ]; newThreads[parentId]! @@ -1768,11 +1767,10 @@ class ChannelClientState { ChannelState get _channelState => _channelStateController.value!; /// The channel state related to this client as a stream - Stream get channelStateStream => - _channelStateController.stream; + Stream get channelStateStream => _channelStateController.stream; /// The channel state related to this client - ChannelState? get channelState => _channelStateController.value; + ChannelState get channelState => _channelStateController.value!; late BehaviorSubject _channelStateController; final Debounce _debouncedUpdatePersistenceChannelState; @@ -1783,19 +1781,19 @@ class ChannelClientState { } /// The channel threads related to this channel - Map>? get threads => _threadsController.value - ?.map((key, value) => MapEntry(key ?? '', value ?? [])); + Map> get threads => + _threadsController.value!.map((key, value) => MapEntry(key, value)); /// The channel threads related to this channel as a stream - Stream?>> get threadsStream => + Stream>> get threadsStream => _threadsController.stream; - final BehaviorSubject?>> _threadsController = + final BehaviorSubject>> _threadsController = BehaviorSubject.seeded({}); - set _threads(Map?> v) { + set _threads(Map> v) { _channel._client.chatPersistenceClient?.updateMessages( _channel.cid!, - v.values.expand((v) => v!).toList(), + v.values.expand((v) => v).toList(), ); _threadsController.add(v); } @@ -1888,7 +1886,7 @@ class ChannelClientState { void _startCleaningPinnedMessages() { _pinnedMessagesTimer = Timer.periodic(const Duration(seconds: 30), (_) { final now = DateTime.now(); - var expiredMessages = channelState!.pinnedMessages + var expiredMessages = channelState.pinnedMessages .where((m) => m.pinExpires?.isBefore(now) == true) .toList(); if (expiredMessages.isNotEmpty) { diff --git a/packages/stream_chat/lib/src/models/channel_model.dart b/packages/stream_chat/lib/src/models/channel_model.dart index d68edbde..2bc17761 100644 --- a/packages/stream_chat/lib/src/models/channel_model.dart +++ b/packages/stream_chat/lib/src/models/channel_model.dart @@ -27,7 +27,7 @@ class ChannelModel { createdAt = createdAt ?? DateTime.now(), updatedAt = updatedAt ?? DateTime.now(), assert( - cid != null || (id != null && type != null), + (cid != null && cid.contains(':')) || (id != null && type != null), 'provide either a cid or an id and type', ), id = id ?? cid!.split(':')[1], diff --git a/packages/stream_chat/lib/src/models/user.dart b/packages/stream_chat/lib/src/models/user.dart index 67fc99f0..3f4c37ef 100644 --- a/packages/stream_chat/lib/src/models/user.dart +++ b/packages/stream_chat/lib/src/models/user.dart @@ -8,7 +8,7 @@ part 'user.g.dart'; class User { /// Constructor used for json serialization User({ - this.id = '', + required this.id, this.role = '', DateTime? createdAt, DateTime? updatedAt, @@ -24,18 +24,6 @@ class User { factory User.fromJson(Map json) => _$UserFromJson( Serialization.moveToExtraDataFromRoot(json, topLevelFields)); - /// Use this named constructor to create a new user instance - User.init( - this.id, { - this.online = false, - this.extraData = const {}, - required this.createdAt, - required this.updatedAt, - this.teams = const [], - required this.role, - }) : lastActive = null, - banned = false; - /// Known top level fields. /// Useful for [Serialization] methods. static const topLevelFields = [ @@ -94,7 +82,7 @@ class User { int get hashCode => id.hashCode; /// Shortcut for user name - String? get name => + String get name => (extraData.containsKey('name') == true && extraData['name'] != '') ? extraData['name'] : id; diff --git a/packages/stream_chat/lib/stream_chat.dart b/packages/stream_chat/lib/stream_chat.dart index f491c39a..ef146180 100644 --- a/packages/stream_chat/lib/stream_chat.dart +++ b/packages/stream_chat/lib/stream_chat.dart @@ -3,6 +3,7 @@ library stream_chat; export 'package:async/async.dart'; export 'package:dio/src/dio_error.dart'; export 'package:dio/src/multipart_file.dart'; +export 'package:dio/src/options.dart'; export 'package:dio/src/options.dart' show ProgressCallback; export 'package:logging/logging.dart' show Logger, Level;