loadMessagesWithKeyword method

Future<List<EMMessage>> loadMessagesWithKeyword(
  1. String keywords,
  2. {String? sender,
  3. int timestamp = -1,
  4. int count = 20,
  5. MessageSearchScope searchScope = MessageSearchScope.All,
  6. EMSearchDirection direction = EMSearchDirection.Up}
)

根据消息中的关键词、消息时间戳、要搜索的消息条数、搜索范围和搜索方向从 SDK 本地数据库中搜索指定数量的消息。

注意:若搜索的消息条数非常大,需要考虑内存消耗。

Param keywords 搜索消息中的关键词。

Param sender 消息发送方的用户 ID。若不设置该参数,SDK 搜索消息时会忽略该参数。

Param timestamp 搜索的起始消息时间戳。

Param count 搜索的消息条数。

Param searchScope 消息搜索范围,详见 MessageSearchScope

Param direction 消息搜索方向。

Return 消息列表。

Throws 如果有异常会在这里抛出,包含错误码和错误描述,详见 EMError

Implementation

Future<List<EMMessage>> loadMessagesWithKeyword(
  String keywords, {
  String? sender,
  int timestamp = -1,
  int count = 20,
  MessageSearchScope searchScope = MessageSearchScope.All,
  EMSearchDirection direction = EMSearchDirection.Up,
}) async {
  Map req = Map();
  req["keywords"] = keywords;
  req['count'] = count;
  req['timestamp'] = timestamp;
  req['searchScope'] = MessageSearchScope.values.indexOf(searchScope);
  req['direction'] = direction == EMSearchDirection.Up ? "up" : "down";
  req.putIfNotNull("from", sender);

  Map result =
      await ChatChannel.invokeMethod(ChatMethodKeys.searchChatMsgFromDB, req);
  try {
    EMError.hasErrorFromResult(result);
    List<EMMessage> list = [];
    result[ChatMethodKeys.searchChatMsgFromDB]?.forEach((element) {
      list.add(EMMessage.fromJson(element));
    });
    return list;
  } on EMError catch (e) {
    throw e;
  }
}