getConversation method

Future<V2TimValueCallback<V2TimConversation>> getConversation({
  1. required String conversationID,
})

Implementation

Future<V2TimValueCallback<V2TimConversation>> getConversation({
  required String conversationID,
}) async {
  if (!TIMManager.instance.isInitSDK()) {
    return V2TimValueCallback<V2TimConversation>(code: TIMErrCode.ERR_SDK_NOT_INITIALIZED.value, desc: "sdk not init");
  }

  String cConversationID = '';
  TIMConvType cConversationType = TIMConvType.kTIMConv_Group;
  if (conversationID.startsWith('c2c_')) {
    cConversationType = TIMConvType.kTIMConv_C2C;
    cConversationID = conversationID.substring(4);
  } else if (conversationID.startsWith('group_')) {
    cConversationType = TIMConvType.kTIMConv_Group;
    cConversationID = conversationID.substring(6);
  } else {
    print('invalid conversation id: $conversationID');
  }

  if (cConversationID.isEmpty) {
    return V2TimValueCallback<V2TimConversation>(code: TIMErrCode.ERR_INVALID_PARAMETERS.value, desc: "invalid conversation id");
  }

  String userData = Tools.generateUserData('getConversation');
  Completer<V2TimValueCallback<V2TimConversation>> completer = Completer();
  Future<void> handleApiCallback (Map jsonResult) async {
    V2TimValueCallback<List<V2TimConversation>> result = V2TimValueCallback.fromJson(jsonResult);
    V2TimConversation? conversation = result.data!.isNotEmpty ? result.data![0] : null;
    // C 接口 TIMConvGetConvInfo 底层调用的是 GetConversationInfoList 接口,本地不存在的会话不会创建。
    // 因此这里如果底层没有的话,在上层创建一个会话对象来暂时规避此问题。
    if (conversation == null) {
      conversation = V2TimConversation(conversationID: conversationID);
      conversation.type = cConversationType.value;
      if (cConversationType == TIMConvType.kTIMConv_C2C) {
        conversation.userID = cConversationID;
        await supplyUserInfo(cConversationID, conversation);
      } else if (cConversationType == TIMConvType.kTIMConv_Group) {
        conversation.groupID = cConversationID;
        await supplyGroupInfo(cConversationID, conversation);
      }
    }

    completer.complete(V2TimValueCallback<V2TimConversation>(code: result.code, desc: result.desc, data: conversation));
  }
  NativeLibraryManager.timApiValueCallback2Future(userData, handleApiCallback);

  List<Map<String, dynamic>> param = [{
    'get_conversation_list_param_conv_type' : cConversationType.value,
    'get_conversation_list_param_conv_id' : cConversationID,
  }];
  Pointer<Char> pParam= Tools.string2PointerChar(json.encode(param));
  Pointer<Void> pUserData = Tools.string2PointerVoid(userData);

  NativeLibraryManager.bindings.DartGetConversation(pParam, pUserData);

  return completer.future;
}