fix: parse whisper data

mod: load more pm

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-23 10:42:47 +08:00
parent 2f5a3d66fc
commit e212144250
5 changed files with 36 additions and 9 deletions

View File

@@ -372,8 +372,7 @@ class MemberHttp {
queryParameters: params,
options: Options(headers: {
HttpHeaders.userAgentHeader: Request.headerUa(type: 'pc'),
HttpHeaders.refererHeader:
'${HttpString.spaceBaseUrl}/$mid/search?keyword=$keyword',
HttpHeaders.refererHeader: '${HttpString.spaceBaseUrl}/$mid',
'origin': HttpString.spaceBaseUrl,
}),
);

View File

@@ -455,8 +455,11 @@ class MsgHttp {
}
}
static Future<LoadingState<SessionMsgDataModel>> sessionMsg(
{int? talkerId}) async {
static Future<LoadingState<SessionMsgDataModel>> sessionMsg({
int? talkerId,
beginSeqno,
endSeqno,
}) async {
Map params = await WbiSign.makSign({
'talker_id': talkerId,
'session_type': 1,
@@ -464,6 +467,8 @@ class MsgHttp {
'sender_device_id': 1,
'build': 0,
'mobi_app': 'web',
if (beginSeqno != null) 'begin_seqno': beginSeqno,
if (endSeqno != null) 'end_seqno': endSeqno,
});
var res = await Request().get(Api.sessionMsg, queryParameters: params);
if (res.data['code'] == 0) {

View File

@@ -170,8 +170,8 @@ class SessionMsgDataModel {
List<MessageItem>? messages;
int? hasMore;
int? minSeqno;
int? maxSeqno;
num? minSeqno;
num? maxSeqno;
List<dynamic>? eInfos;
SessionMsgDataModel.fromJson(Map<String, dynamic> json) {

View File

@@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -19,6 +20,8 @@ class WhisperDetailController
late String face;
String? mid;
int? msgSeqno;
//表情转换图片规则
List<dynamic>? eInfos;
@@ -38,7 +41,8 @@ class WhisperDetailController
bool isRefresh, Success<SessionMsgDataModel> response) {
List<MessageItem>? messageList = response.response.messages;
if (messageList?.isNotEmpty == true) {
if (messageList!.length == 1 &&
msgSeqno = messageList!.last.msgSeqno;
if (messageList.length == 1 &&
messageList.last.msgType == 18 &&
messageList.last.msgSource == 18) {
// debugPrint(messageList.last);
@@ -103,7 +107,7 @@ class WhisperDetailController
loadingState.refresh();
SmartDialog.showToast('撤回成功');
} else {
queryData();
onRefresh();
onClearText();
SmartDialog.showToast('发送成功');
}
@@ -114,10 +118,24 @@ class WhisperDetailController
@override
List<MessageItem>? getDataList(SessionMsgDataModel response) {
if (response.hasMore == 0) {
isEnd = true;
}
return response.messages;
}
@override
Future<LoadingState<SessionMsgDataModel>> customGetData() =>
MsgHttp.sessionMsg(talkerId: talkerId);
Future<void> onRefresh() {
msgSeqno = null;
scrollController.jumpToTop();
return super.onRefresh();
}
@override
Future<LoadingState<SessionMsgDataModel>> customGetData() =>
MsgHttp.sessionMsg(
talkerId: talkerId,
beginSeqno: msgSeqno != null ? 0 : null,
endSeqno: msgSeqno,
);
}

View File

@@ -130,7 +130,12 @@ class _WhisperDetailPageState
reverse: true,
itemCount: loadingState.response!.length,
padding: const EdgeInsets.only(bottom: 12),
physics: const AlwaysScrollableScrollPhysics(),
controller: _whisperDetailController.scrollController,
itemBuilder: (context, int index) {
if (index == loadingState.response!.length - 1) {
_whisperDetailController.onLoadMore();
}
final item = loadingState.response![index];
return ChatItem(
item: item,