Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.cometchat.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

// Check existing session
User? user = await CometChat.getLoggedInUser();

// Login with Auth Key (development only)
CometChat.login("cometchat-uid-1", "AUTH_KEY",
  onSuccess: (User user) { debugPrint("Logged in: $user"); },
  onError: (CometChatException e) { debugPrint("Error: ${e.message}"); }
);

// Login with Auth Token (production)
CometChat.loginWithAuthToken("AUTH_TOKEN",
  onSuccess: (User user) { debugPrint("Logged in: $user"); },
  onError: (CometChatException e) { debugPrint("Error: ${e.message}"); }
);

// Logout
CometChat.logout(
  onSuccess: (String msg) { debugPrint("Logged out"); },
  onError: (CometChatException e) { debugPrint("Error: ${e.message}"); }
);
Create users via: Dashboard (testing) | REST API (production) Test UIDs: cometchat-uid-1 through cometchat-uid-5
After initializing the SDK, the next step is to authenticate your user. CometChat provides two login methods — Auth Key for quick development, and Auth Token for production — both accessed through the login() method.

How It Works

Before You Log In

Create a User

A user must exist in CometChat before they can log in.
  • During development: Create users from the CometChat Dashboard. Five test users are already available with UIDs cometchat-uid-1 through cometchat-uid-5.
  • In production: Call the Create User REST API when a user signs up in your app.
We have setup 5 users for testing having UIDs: cometchat-uid-1, cometchat-uid-2, cometchat-uid-3, cometchat-uid-4 and cometchat-uid-5.

Check for an Existing Session

The SDK persists the logged-in user’s session locally. Before calling login(), always check whether a session already exists — this avoids unnecessary login calls and keeps your app responsive.
User? user = await CometChat.getLoggedInUser();
if (user != null) {
  // User is already logged in — proceed to your app
}
If getLoggedInUser() returns null, no active session exists and you need to call login().
MethodReturnsDescription
CometChat.getLoggedInUser()Future<User?>Returns the currently logged-in user, or null if no session exists

Login with Auth Key

This straightforward authentication method is ideal for proof-of-concept (POC) development or during the early stages of application development. For production environments, however, we strongly recommend using an Auth Token instead of an Auth Key to ensure enhanced security.
Auth Keys are meant for development and testing only. For production, use Auth Token login instead. Never ship Auth Keys in client-side code.
String UID = "user_id"; // Replace with the UID of the user to login
String authKey = "AUTH_KEY"; // Replace with your App Auth Key

final user = await CometChat.getLoggedInUser();
if (user == null) {
await CometChat.login(UID, authKey,
		onSuccess: (User user) {
			debugPrint("Login Successful : $user" );
		}, onError: (CometChatException e) {
			debugPrint("Login failed with exception:  ${e.message}");
		});
}
ParameterTypeDescription
UIDStringThe UID of the user to log in
authKeyStringYour CometChat Auth Key
On success, the onSuccess callback receives a User object containing the logged-in user’s details.
On Success — A User object representing the logged-in user:User Object:
ParameterTypeDescriptionSample Value
uidstringUnique identifier of the user"cometchat-uid-1"
namestringDisplay name of the user"Andrew Joseph"
linkstringProfile linknull
avatarstringAvatar URL"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp"
metadataobjectCustom metadata{}
statusstringOnline status"online"
rolestringUser role"default"
statusMessagestringStatus messagenull
tagsarrayUser tags[]
hasBlockedMebooleanWhether this user has blocked the current userfalse
blockedByMebooleanWhether the current user has blocked this userfalse
lastActiveAtnumberEpoch timestamp of last activity1745554700
CometChatException:
ParameterTypeDescriptionSample Value
codestringError code identifier"ERR_UID_NOT_FOUND"
messagestringHuman-readable error message"The specified UID does not exist."
detailsstringAdditional technical details"Please verify the UID and try again."

Login with Auth Token

Auth Token login keeps your Auth Key off the client entirely. Your server generates a token via the REST API and passes it to the client.
  1. Create the user via the REST API when they sign up (first time only).
  2. Generate an Auth Token on your server and return it to the client.
  3. Pass the token to loginWithAuthToken().
String authToken = "AUTH_TOKEN";
var user = await CometChat.getLoggedInUser(onSuccess: (_){}, onError: (_){});
if (user == null) {
 if(authToken!=null){
   await  CometChat.loginWithAuthToken(authToken,
                                       onSuccess: (User loggedInUser){
                                         debugPrint("Login Successful : $user" );
                                       }, onError: ( CometChatException e){
                                         debugPrint("Login failed with exception:  ${e.message}");
                                       });
 }
}
ParameterTypeDescription
authTokenStringAuth Token generated on your server for the user
On success, the onSuccess callback receives a User object containing the logged-in user’s details.
On Success — A User object representing the logged-in user:User Object:
ParameterTypeDescriptionSample Value
uidstringUnique identifier of the user"cometchat-uid-1"
namestringDisplay name of the user"Andrew Joseph"
linkstringProfile linknull
avatarstringAvatar URL"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp"
metadataobjectCustom metadata{}
statusstringOnline status"online"
rolestringUser role"default"
statusMessagestringStatus messagenull
tagsarrayUser tags[]
hasBlockedMebooleanWhether this user has blocked the current userfalse
blockedByMebooleanWhether the current user has blocked this userfalse
lastActiveAtnumberEpoch timestamp of last activity1745554700
CometChatException:
ParameterTypeDescriptionSample Value
codestringError code identifier"ERR_UID_NOT_FOUND"
messagestringHuman-readable error message"The specified UID does not exist."
detailsstringAdditional technical details"Please verify the UID and try again."

Logout

Call logout() when your user logs out of your app. This clears the local session.
CometChat.logout( onSuccess: ( successMessage) {
    debugPrint("Logout successful with message $successMessage");
  }, onError: (CometChatException e ){
    debugPrint("Logout failed with exception:  ${e.message}");
      }
  );
On Success — A String message confirming the logout:
ParameterTypeDescriptionSample Value
messagestringSuccess confirmation message"Logout successful"
CometChatException:
ParameterTypeDescriptionSample Value
codestringError code identifier"ERR_NOT_LOGGED_IN"
messagestringHuman-readable error message"No active user session."
detailsstringAdditional technical details"Please log in before attempting to log out."

Login Listener

You can listen for login and logout events in real time using LoginListener. This is useful for updating UI state or triggering side effects when the auth state changes.
CallbackDescription
loginSuccess(User user)User logged in successfully. Provides the User object.
loginFailure(CometChatException e)Login failed. Provides a CometChatException.
logoutSuccess()User logged out successfully.
logoutFailure(CometChatException e)Logout failed. Provides a CometChatException.

Add a Listener

class Class_Name with LoginListener {

  // CometChat.addLoginListener("UNIQUE_LISTENER_ID", this); // call this in initState

  @override
  void loginSuccess(User user) {
    debugPrint("LoginListener loginSuccess: $user");
  }

  @override
  void loginFailure(CometChatException e) {
    debugPrint("LoginListener loginFailure: ${e.message}");
  }

  @override
  void logoutSuccess() {
    debugPrint("LoginListener logoutSuccess");
  }

  @override
  void logoutFailure(CometChatException e) {
    debugPrint("LoginListener logoutFailure: ${e.message}");
  }
}

Remove a Listener

CometChat.removeLoginListener("UNIQUE_LISTENER_ID");
Always remove login listeners when they’re no longer needed (e.g., on widget disposal or when navigating away). Failing to remove listeners can cause memory leaks and duplicate event handling.

Next Steps

Send Messages

Send your first text, media, or custom message

User Management

Create, update, and manage users in your app

Connection Status

Monitor the SDK connection state in real time

All Real-Time Listeners

Complete reference for all SDK event listeners