> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-audit-content-webhooks.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Overview of Overview in CometChat.

This guide demonstrates how to add chat to a Flutter application. Before you begin, we strongly recommend you read the [Key Concepts](/sdk/flutter/3.0/key-concepts) guide.

#### I want to integrate with my app

1. [Get your application keys](./overview#get-your-application-keys)
2. [Add the CometChat dependency](./overview#add-the-cometchat-dependency)
3. [Initialize CometChat](./overview#initialise-cometchat)
4. [Register and Login your user](./overview#register-and-login-your-user)

#### I want to explore a sample app

Follow the steps mentioned in the `README.md` file to run the sample app

[Flutter Chat App](https://github.com/cometchat-pro/flutter-chat-app/)

## Get your Application Keys

[Signup for CometChat](https://app.cometchat.com/) and then:

1. Create a new app
2. Head over to the **API Keys** section and note the **Auth Key**, **App ID** & **Region**

<Note>
  Minimum Requirements

  * Android API Level 21
  * AndroidX Compatibility
  * iOS 11 or higher
  * Flutter SDK 1.2 or higher
</Note>

### Add the CometChat Dependency

1. Add the following code in your `pubspec.yaml` file and run `pub get` command.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    cometchat: any
    ```
  </Tab>
</Tabs>

2. For iOS change iOS deployment target to 11 or higher.
3. Add the following code to podfile inside iOS section of your app.

<Tabs>
  <Tab title="Ruby">
    ```rb theme={null}
    post_install do |installer|

    installer.pods_project.targets.each do |target|

    flutter_additional_ios_build_settings(target)

    //Copy from here------->

    target.build_configurations.each do |build_configuration|

    build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 i386'

    end

    //Copy TILL here------->

    end

    end
    ```
  </Tab>
</Tabs>

<Warning>
  **Apple Silicon (M1/M2/M3) users:** Excluding `arm64` from the simulator build prevents the app from running natively on Apple Silicon Macs. If you are developing on an Apple Silicon Mac, consider excluding only `i386` instead of `arm64 i386` to enable native simulator builds.
</Warning>

4. For iOS navigate to your iOS folder in terminal or CMD and do `pod install` . For apple chip system use rosetta terminal.
5. import CometChat SDK using the following code in dart.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    import 'package:cometchat/cometchat_sdk.dart';
    ```
  </Tab>
</Tabs>

### Initialise CometChat

The `init()` method initialises the settings required for CometChat. The `init()` method takes the below parameters:

1. appID - You CometChat App ID
2. appSettings - An object of the AppSettings class can be created using the AppSettingsBuilder class. The region field is mandatory and can be set using the `setRegion()` method.

The `AppSettings` class allows you to configure three settings:

* **Region**: The region where you app was created.
* [User Presence](/sdk/flutter/3.0/user-presence) Presence Subscription: Represents the subscription type for user presence (real-time online/offline status)
* **autoEstablishSocketConnection(boolean value)**: This property takes a boolean value which when set to true informs the SDK to manage the web-socket connection internally. If set to false, it informs the SDK that the web-socket connection will be managed manually. The default value for this parameter is true. For more information on this, please check the [Managing Web-Socket connections manually](/sdk/flutter/3.0/advanced-managing-web-sockets-connections-manually) section. The default value for this property is **true.**
* **adminHost(adminHost: string)**: This method takes the admin URL as input and uses this admin URL instead of the default admin URL. This can be used in case of dedicated deployment of CometChat.
* **clientHost(clientHost: string)**: This method takes the client URL as input and uses this client URL instead of the default client URL. This can be used in case of dedicated deployment of CometChat.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    String region = "REGION";
    String appId = "APP_ID";

    AppSettings appSettings= (AppSettingsBuilder()
            ..subscriptionType = CometChatSubscriptionType.allUsers
            ..region= region
    				..adminHost = "" //optional
    				..clientHost = "" //optional
            ..autoEstablishSocketConnection =  true
     ).build();

    CometChat.init(appId, appSettings, 
    	onSuccess: (String successMessage) {
    		debugPrint("Initialization completed successfully  $successMessage");
    	}, onError: (CometChatException excep) {
    		debugPrint("Initialization failed with exception: ${excep.message}");
    	}
    );
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    String region = "REGION";
    String appId = "APP_ID";

    AppSettings appSettings= (AppSettingsBuilder()
            ..subscriptionType = CometChatSubscriptionType.allUsers
            ..region= region
            ..autoEstablishSocketConnection =  true
     ).build();

    CometChat.init(appId, appSettings, 
    	onSuccess: (String successMessage) {
    		debugPrint("Initialization completed successfully  $successMessage");
    	}, onError: (CometChatException excep) {
    		debugPrint("Initialization failed with exception: ${excep.message}");
    	}
    );
    ```
  </Tab>
</Tabs>

Make sure you replace the `APP_ID` with your CometChat **App ID** and `region` with your **App Region** in the above code.

### Register and Login your User

Once initialisation is successful, you will need to create a user.

To create users on the fly, you can use the `createUser()` method. This method takes an `User` object and the `Auth Key` as input parameters and returns the created `User` object if the request is successful.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    String authKey = "AUTH_KEY";//Replace with the auth key of app
    User user = User( uid: "usr1", name: "Kevin" );//Replace with name and uid of user

    CometChat.createUser(user,  authKey, 
    	onSuccess: (User user){
    		debugPrint("Create User succesful ${user}");
    	}, onError: (CometChatException e){
    		debugPrint("Create User Failed with exception ${e.message}");
    	}
    );
    ```
  </Tab>
</Tabs>

Make sure that `UID` and `name` are specified as these are mandatory fields to create a user.

Once you have created the user successfully, you will need to log the user into CometChat using the `login()` method.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    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}");
    		}
    	);
    }
    ```
  </Tab>
</Tabs>

We recommend you call the CometChat `login()` method once your user logs into your app. The `login()` method needs to be called only once.
