From 37768f3745f0516fe1ee1079000277aa5e1f0c90 Mon Sep 17 00:00:00 2001 From: SL Date: Tue, 5 Sep 2023 21:56:25 +0800 Subject: [PATCH] Modify Query History Message --- CHANGELOG.md | 4 ++- README.md | 2 +- example/lib/chat.dart | 64 +++++++++++++++++++++++++++++++++++++------ example/lib/http.dart | 2 +- example/lib/msg.dart | 3 +- example/pubspec.lock | 2 +- lib/db/message.dart | 2 +- lib/entity/msg.dart | 1 + pubspec.yaml | 2 +- 9 files changed, 67 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a6cd6..e4a2f3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,4 +15,6 @@ ### 1.0.7 * Support message receipts ### 1.0.8 - * Modify Query History Message \ No newline at end of file + * Modify Query History Message + ### 1.0.9 + * Optimize Query History Message \ No newline at end of file diff --git a/README.md b/README.md index 3bc2669..0b3cc2f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ #### 安装 ``` dependencies: - wukongimfluttersdk: ^1.0.8 + wukongimfluttersdk: ^1.0.9 ``` #### 引入 ```dart diff --git a/example/lib/chat.dart b/example/lib/chat.dart index 8afa4c6..abfb1e4 100644 --- a/example/lib/chat.dart +++ b/example/lib/chat.dart @@ -58,8 +58,8 @@ class ChatListDataState extends State { @override void initState() { super.initState(); - getMsgList(); initListener(); + getMsgList(50000, 0, true); } initListener() { @@ -117,16 +117,48 @@ class ChatListDataState extends State { } } - getMsgList() { - WKIM.shared.messageManager.getOrSyncHistoryMessages( - channelID, channelType, 0, true, 0, 100, 0, (list) { + getPrevious() { + var oldOrderSeq = 0; + for (var msg in msgList) { + if (oldOrderSeq == 0 || oldOrderSeq > msg.wkMsg.orderSeq) { + oldOrderSeq = msg.wkMsg.orderSeq; + } + } + getMsgList(oldOrderSeq, 0, false); + } + + getLast() { + var oldOrderSeq = 0; + for (var msg in msgList) { + if (oldOrderSeq == 0 || oldOrderSeq < msg.wkMsg.orderSeq) { + oldOrderSeq = msg.wkMsg.orderSeq; + } + } + getMsgList(oldOrderSeq, 1, false); + } + + getMsgList(int oldestOrderSeq, int pullMode, bool isReset) { + WKIM.shared.messageManager.getOrSyncHistoryMessages(channelID, channelType, + oldestOrderSeq, oldestOrderSeq == 0, pullMode, 20, 0, (list) { + List uiList = []; for (int i = 0; i < list.length; i++) { - msgList.add(UIMsg(list[i])); + print(list[i].orderSeq); + if (pullMode == 0 && !isReset) { + uiList.add(UIMsg(list[i])); + // msgList.insert(0, UIMsg(list[i])); + } else { + msgList.add(UIMsg(list[i])); + } + } + if (uiList.isNotEmpty) { + msgList.insertAll(0, uiList); } setState(() {}); - Future.delayed(const Duration(milliseconds: 300), () { - _scrollController.jumpTo(_scrollController.position.maxScrollExtent); - }); + if (isReset) { + Future.delayed(const Duration(milliseconds: 300), () { + _scrollController.jumpTo(_scrollController.position.maxScrollExtent); + }); + } }, () { print('消息同步中'); }); @@ -295,6 +327,22 @@ class ChatListDataState extends State { decoration: const InputDecoration(hintText: '请输入内容'), autofocus: true), ), + MaterialButton( + onPressed: () { + getPrevious(); + }, + color: Colors.brown, + child: + const Text("上一页", style: TextStyle(color: Colors.white)), + ), + MaterialButton( + onPressed: () { + getLast(); + }, + color: Colors.brown, + child: + const Text("下一页", style: TextStyle(color: Colors.white)), + ), MaterialButton( onPressed: () { if (content != '') { diff --git a/example/lib/http.dart b/example/lib/http.dart index b89c3d4..58d3229 100644 --- a/example/lib/http.dart +++ b/example/lib/http.dart @@ -38,7 +38,7 @@ class HttpUtils { "version": version, // 当前客户端的会话最大版本号(从保存的结果里取最大的version,如果本地没有数据则传0), "last_msg_seqs": lastSsgSeqs, // 客户端所有频道会话的最后一条消息序列号拼接出来的同步串 格式: channelID:channelType:last_msg_seq|channelID:channelType:last_msg_seq (此字段非必填,如果不填就获取全量数据,填写了获取增量数据,看你自己的需求。) - "msg_count": 20 // 每个会话获取最大的消息数量,一般为app点进去第一屏的数据 + "msg_count": 10 // 每个会话获取最大的消息数量,一般为app点进去第一屏的数据 }); WKSyncConversation conversation = WKSyncConversation(); conversation.conversations = []; diff --git a/example/lib/msg.dart b/example/lib/msg.dart index 6a14734..e5f46df 100644 --- a/example/lib/msg.dart +++ b/example/lib/msg.dart @@ -15,7 +15,8 @@ class UIMsg { if (wkMsg.wkMsgExtra != null) { readCount = wkMsg.wkMsgExtra!.readedCount; } - return "${wkMsg.messageContent!.displayText()} [是否需要回执:${wkMsg.setting.receipt}],[已读数量:$readCount]"; + return wkMsg.messageContent!.displayText(); + // return "${wkMsg.messageContent!.displayText()} [是否需要回执:${wkMsg.setting.receipt}],[已读数量:$readCount]"; } String getShowTime() { diff --git a/example/pubspec.lock b/example/pubspec.lock index 605b7ef..3820224 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -499,7 +499,7 @@ packages: path: ".." relative: true source: path - version: "1.0.8" + version: "1.0.9" x25519: dependency: transitive description: diff --git a/lib/db/message.dart b/lib/db/message.dart index 1ffcc54..e98888d 100644 --- a/lib/db/message.dart +++ b/lib/db/message.dart @@ -434,7 +434,7 @@ class MessaggeDB { Future getDeletedCount(int minMessageSeq, int maxMessageSeq, String channelID, int channelType) async { String sql = - "select count(*) num from ${WKDBConst.tableMessage} where channel_id=$channelID and channel_type=$channelType and message_seq>$minMessageSeq and message_seq<$maxMessageSeq and is_deleted=1"; + "select count(*) num from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and message_seq>$minMessageSeq and message_seq<$maxMessageSeq and is_deleted=1"; int num = 0; List> list = await WKDBHelper.shared.getDB().rawQuery(sql); diff --git a/lib/entity/msg.dart b/lib/entity/msg.dart index 09d3f92..b8a0882 100644 --- a/lib/entity/msg.dart +++ b/lib/entity/msg.dart @@ -39,6 +39,7 @@ class WKMsg { WKMessageContent? messageContent; WKMsg() { + clientSeq = 0; clientMsgNO = WKIM.shared.messageManager.generateClientMsgNo(); timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).truncate(); } diff --git a/pubspec.yaml b/pubspec.yaml index b1355ff..b6842cb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ description: wukong IM flutter sdk # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.8 +version: 1.0.9 homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK environment: