diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index b24f5737..342f47de 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -9,6 +9,7 @@ channel update. - [[#1054]](https://github.com/GetStream/stream-chat-flutter/issues/1054) Fix `Unsupported operation: Cannot remove from an unmodifiable list`. - [[#1033]](https://github.com/GetStream/stream-chat-flutter/issues/1033) Hard delete from dashboard does not delete message from client. +- Send only `user_id` while reconnecting. ✅ Added diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index 3bec2dff..f61560ef 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -328,7 +328,9 @@ class StreamChatClient { _chatPersistenceClient = _originalChatPersistenceClient; await _chatPersistenceClient!.connect(ownUser.id); } - final connectedUser = await openConnection(); + final connectedUser = await openConnection( + includeUserDetailsInConnectCall: true, + ); return state.currentUser = connectedUser; } catch (e, stk) { if (e is StreamWebSocketError && e.isRetriable) { @@ -341,7 +343,11 @@ class StreamChatClient { } /// Creates a new WebSocket connection with the current user. - Future openConnection() async { + /// If [includeUserDetailsInConnectCall] is true it will include the current + /// user details in the connect call. + Future openConnection({ + bool includeUserDetailsInConnectCall = false, + }) async { assert( state.currentUser != null, 'User is not set on client, ' @@ -371,7 +377,10 @@ class StreamChatClient { _ws.connectionStatusStream.skip(1).listen(_connectionStatusHandler); try { - final event = await _ws.connect(user); + final event = await _ws.connect( + user, + includeUserDetails: includeUserDetailsInConnectCall, + ); return user.merge(event.me); } catch (e, stk) { logger.severe('error connecting ws', e, stk); diff --git a/packages/stream_chat/lib/src/ws/websocket.dart b/packages/stream_chat/lib/src/ws/websocket.dart index 888ba08b..de5475ce 100644 --- a/packages/stream_chat/lib/src/ws/websocket.dart +++ b/packages/stream_chat/lib/src/ws/websocket.dart @@ -147,12 +147,15 @@ class WebSocket with TimerHelper { } } - Future _buildUri({bool refreshToken = false}) async { + Future _buildUri({ + bool refreshToken = false, + bool includeUserDetails = true, + }) async { final user = _user!; final token = await tokenManager.loadToken(refresh: refreshToken); final params = { 'user_id': user.id, - 'user_details': user, + if (includeUserDetails) 'user_details': user, 'user_token': token.rawValue, 'server_determines_connection_id': true, }; @@ -176,7 +179,10 @@ class WebSocket with TimerHelper { bool _connectRequestInProgress = false; /// Connect the WS using the parameters passed in the constructor - Future connect(User user) async { + Future connect( + User user, { + bool includeUserDetails = false, + }) async { if (_connectRequestInProgress) { throw const StreamWebSocketError(''' You've called connect twice, @@ -191,7 +197,9 @@ class WebSocket with TimerHelper { connectionCompleter = Completer(); try { - final uri = await _buildUri(); + final uri = await _buildUri( + includeUserDetails: includeUserDetails, + ); _initWebSocketChannel(uri); } catch (e, stk) { _onConnectionError(e, stk); @@ -219,7 +227,10 @@ class WebSocket with TimerHelper { setTimer( Duration(milliseconds: delay), () async { - final uri = await _buildUri(refreshToken: refreshToken); + final uri = await _buildUri( + refreshToken: refreshToken, + includeUserDetails: false, + ); try { _initWebSocketChannel(uri); } catch (e, stk) { diff --git a/packages/stream_chat/test/src/fakes.dart b/packages/stream_chat/test/src/fakes.dart index b4089512..409418cd 100644 --- a/packages/stream_chat/test/src/fakes.dart +++ b/packages/stream_chat/test/src/fakes.dart @@ -124,7 +124,10 @@ class FakeWebSocket extends Fake implements WebSocket { Completer? connectionCompleter; @override - Future connect(User user) async { + Future connect( + User user, { + bool? includeUserDetails = true, + }) async { connectionStatus = ConnectionStatus.connecting; final event = Event( type: EventType.healthCheck, @@ -167,7 +170,10 @@ class FakeWebSocketWithConnectionError extends Fake implements WebSocket { Completer? connectionCompleter; @override - Future connect(User user) async { + Future connect( + User user, { + bool? includeUserDetails = true, + }) async { connectionStatus = ConnectionStatus.connecting; const error = StreamWebSocketError('Error Connecting'); connectionCompleter = Completer()..completeError(error); diff --git a/packages/stream_chat_flutter/example/android/app/build.gradle b/packages/stream_chat_flutter/example/android/app/build.gradle index 3974f949..6576512a 100644 --- a/packages/stream_chat_flutter/example/android/app/build.gradle +++ b/packages/stream_chat_flutter/example/android/app/build.gradle @@ -40,7 +40,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.example" - minSdkVersion 21 + minSdkVersion 22 targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName