directChatMatrixID property

String? directChatMatrixID

If this room is a direct chat, this is the matrix ID of the user. Returns null otherwise.

Implementation

String? get directChatMatrixID {
  // Calculating the directChatMatrixId can be expensive. We cache it and
  // validate the cache instead every time.
  final cache = _cachedDirectChatMatrixId;
  if (cache != null) {
    final roomIds = client.directChats[cache];
    if (roomIds is List && roomIds.contains(id)) {
      return cache;
    }
  }

  if (membership == Membership.invite) {
    final userID = client.userID;
    if (userID == null) return null;
    final invitation = getState(EventTypes.RoomMember, userID);
    if (invitation != null && invitation.content['is_direct'] == true) {
      return _cachedDirectChatMatrixId = invitation.senderId;
    }
  }

  final mxId = client.directChats.entries
      .firstWhereOrNull((MapEntry<String, dynamic> e) {
    final roomIds = e.value;
    return roomIds is List<dynamic> && roomIds.contains(id);
  })?.key;
  if (mxId?.isValidMatrixId == true) return _cachedDirectChatMatrixId = mxId;
  return _cachedDirectChatMatrixId = null;
}