[简体中文](https://github.com/LiteAVSDK/TRTC_Flutter/blob/master/SDK/README-zh_CN.md) | English

## TRTC SDK （Flutter）

[API OverView](https://intl.cloud.tencent.com/document/product/647/39169)，[API Detailed documentation](https://pub.dev/documentation/tencent_trtc_cloud/latest/)

Demonstrates how to use RTC APIs for Flutter. [API Example](https://github.com/LiteAVSDK/TRTC_Flutter/tree/master/TRTC-API-Example)

Note: Demo does not support simulator operation. Please use real machine development and debugging.

#### Demo quick start

Please see [Demo Quick Start(Flutter)](https://intl.cloud.tencent.com/document/product/647/39243)

#### SDK quick integration

Please see [Quick integration(Flutter)](https://intl.cloud.tencent.com/document/product/647/35098)

#### SDK class files

* trtc_cloud-Tencent Cloud TRTC Core Function Interface.
* trtc_cloud_video_view-Provides widgets for rendering video `TRTCCloudVideoView`.
* tx_audio_effect_manager-Tencent Cloud Audio Effect Management Module.
* tx_beauty_manager-Beauty filter and animated effect parameter management.
* tx_device_manager-Tencent Cloud Audio Effect Management Module.
* trtc_cloud_def-TRTC key class definition Description: definitions of interfaceerated and constant values such as resolution and quality level
* trtc_cloud_listener-Tencent Cloud TRTC Event Notification Interface.

#### Sample call

1.Initialization
```
// Create TRTCCloud singleton
trtcCloud = await TRTCCloud.sharedInstance();
// Tencent Cloud Audio Effect Management Module
txDeviceManager = trtcCloud.getDeviceManager();
// Beauty filter and animated effect parameter management
txBeautyManager = trtcCloud.getBeautyManager();
// Tencent Cloud Audio Effect Management Module
txAudioManager = trtcCloud.getAudioEffectManager();
```

2.Room entry/exit
```
// Room entry/exit
trtcCloud.enterRoom(
        TRTCParams(
            sdkAppId: sdkAppId,
            userId: userId,
            userSig: userSig,
            roomId: roomId),
        TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);
// Leave a room
trtcCloud.exitRoom();
```

3.Listener registration
```
// Register a listener
trtcCloud.registerListener(onRtcListener);
onRtcListener(type, param) {
  // Callback for room entry
  if (type == TRTCCloudListener.onEnterRoom) {
    if (param > 0) {
      showToast('Entered the room successfully');
    }
  }
  // Callback for the entry of a remote user
  if (type == TRTCCloudListener.onRemoteUserEnterRoom) {
    // The parameter is the user ID of the remote user.
  }
  // Whether the remote user has a playable primary image (generally for camera)
  if (type == TRTCCloudListener.onUserVideoAvailable) {
    //param['userId'] is the user ID of the remote user
    //param['visible'] indicates whether image is enabled
  }
}
//Remove a listener
trtcCloud.unRegisterListener(onRtcListener);
```

4.Playing local video
```
// Parameters:
// frontCamera: `true`: front camera; `false`: rear camera
// viewId: view ID generated by `TRTCCloudVideoView`
TRTCCloudVideoView(
    onViewCreated: (viewId) {
      trtcCloud.startLocalPreview(true, viewId);
});
```

5.Display remote video

```
// Parameters:
// userId: Specifies the userid of the remote user
// streamType: Specifies the type of video stream to watch userid：
//* HD big picture：TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG
//* Low definition large picture：TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL
// viewId: view ID generated by `TRTCCloudVideoView`
TRTCCloudVideoView(
    onViewCreated: (viewId) {
      trtcCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId);
});
```

5.Display remote screen sharing

```
/// Parameters:
/// userId: Specifies the userid of the remote user
/// streamType: type of the remote user’s video stream to play:
///* Substream (screen sharing): TRTCCloudDe.TRTC_VIDEO_STREAM_TYPE_SUB
/// viewId: view ID generated by `TRTCCloudVideoView`
TRTCCloudVideoView(
    onViewCreated: (viewId) {
      trtcCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, viewId);
});
```

#### How do I view TRTC logs?
TRTC logs are compressed and encrypted by default with the XLOG extension. You can set setLogCompressEnabled to specify whether to encrypt logs. If a log filename contains C (compressed), the log is compressed and encrypted; if it contains R (raw), the log is in plaintext.
* iOS：Documents/log of the application sandbox
* Android
  * 6.7 or below: /sdcard/log/tencent/liteav
  * 6.8 or above: /sdcard/Android/data/package name/files/log/tencent/liteav/

#### Common problem

##### IOS cannot display video (Android is good)

Please confirm io.flutter.embedded_views_preview is `YES` in your info.plist

##### Android Manifest merge failed

Please Open '/example/android/app/src/main/AndroidManifest.xml' file。

1.Add xmlns:tools="http://schemas.android.com/tools" to manifest

2.Add tools:replace="android:label" to application

![](https://main.qcloudimg.com/raw/7a37917112831488423c1744f370c883.png)