setTencentImParamsAndLoginByCached function

Future<void> setTencentImParamsAndLoginByCached({
  1. int? sdkAppId,
  2. bool initCall = true,
  3. GlobalKey<NavigatorState>? navigatorKey,
  4. EventChatListenerConfig? eventChatListener,
  5. EventCallListenerConfig? eventCallListener,
})

从缓存中初始化参数

从缓存中初始化 imSdkAppID、initCall、imLoginInfo


也可以传入新的 initCall、eventChatListener、eventCallListener

如果传入了 sdkAppId 参数,则自动直接执行方法:doImTencentWebPluginInitWhenApplicationInit

navigatorKey 如果你选择初始化了音视频通话,那么这个参数必须传。作用是当接收到音视频通话邀请的时候,显示全局的浮层展示通话邀请与展开音视频通话

// 你的程序入口或许是这样
MaterialApp(
  navigatorKey: xxx,
  ...
)

Implementation

Future<void> setTencentImParamsAndLoginByCached({
  int? sdkAppId,
  bool initCall = true,
  GlobalKey<NavigatorState>? navigatorKey,
  EventChatListenerConfig? eventChatListener,
  EventCallListenerConfig? eventCallListener,
}) async {
  String? imSdkAppId = sdkAppId?.toString().trimEmptyToNull() ?? await getCatch('imSdkAppID');
  if (imSdkAppId != null) {
    ImState.setImSdkAppID(int.parse(imSdkAppId));
    ImState.setInitCallInstance(initCall);
    ImState.setChatEventChatListenerConfig(eventChatListener);
    ImState.setCallEventCallListenerConfig(eventCallListener);

    ImState.applicationNavigatorKey = navigatorKey;

    await ImPluginTencent.initSdk(
      sdkAppID: int.parse(imSdkAppId),
      initCall: initCall,
      eventChatListener: eventChatListener,
      eventCallListener: eventCallListener,
    );

    try {
      String? imLoginInfoStr = await getCatch('imLoginInfo');
      if (imLoginInfoStr != null) {
        ImLoginInfoEntity imLoginInfo = ImLoginInfoEntity.fromJson(jsonDecode(imLoginInfoStr));

        try {
          await ImPluginTencent.login(userID: imLoginInfo.userId, userSig: imLoginInfo.userSig);
        } catch(e, stackTrace) {
          throw ImException(code: 203, err: e, stackTrace: stackTrace);
        }
      } else {
        throw ImException(code: 201, message: '缓存中不存在 imLoginInfo');
      }
    } catch(e) {
      throw ImException(code: 202, message: '解析 imLoginInfo 缓存出错');
    }
  } else {
    throw ImException(code: 101, message: '未找到可用的 imSdkAppID 参数');
  }
}