refa: whisper detail page

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-18 09:49:57 +08:00
parent ebe08c23e4
commit 261922d73a
5 changed files with 168 additions and 163 deletions

View File

@@ -1,5 +1,7 @@
import 'dart:convert';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -8,12 +10,15 @@ import 'package:PiliPlus/models/msg/session.dart';
import '../../utils/feed_back.dart';
import '../../utils/storage.dart';
class WhisperDetailController extends GetxController {
class WhisperDetailController
extends CommonListController<SessionMsgDataModel, MessageItem> {
late final ownerMid = Accounts.main.mid;
late int talkerId;
late String name;
late String face;
String? mid;
RxList<MessageItem> messageList = <MessageItem>[].obs;
//表情转换图片规则
List<dynamic>? eInfos;
@@ -25,48 +30,41 @@ class WhisperDetailController extends GetxController {
face = Get.parameters['face']!;
mid = Get.parameters['mid'];
querySessionMsg();
queryData();
}
Future querySessionMsg() async {
var res = await MsgHttp.sessionMsg(talkerId: talkerId);
if (res['status']) {
messageList.value = res['data'].messages;
if (messageList.isNotEmpty) {
if (messageList.length == 1 &&
messageList.last.msgType == 18 &&
messageList.last.msgSource == 18) {
// debugPrint(messageList.last);
// debugPrint(messageList.last.content);
//{content: [{"text":"对方主动回复或关注你前最多发送1条消息","color_day":"#9499A0","color_nig":"#9499A0"}]}
} else {
ackSessionMsg();
}
if (res['data'].eInfos != null) {
eInfos = res['data'].eInfos;
}
@override
bool customHandleResponse(
bool isRefresh, Success<SessionMsgDataModel> response) {
List<MessageItem>? messageList = response.response.messages;
if (messageList?.isNotEmpty == true) {
if (messageList!.length == 1 &&
messageList.last.msgType == 18 &&
messageList.last.msgSource == 18) {
// debugPrint(messageList.last);
// debugPrint(messageList.last.content);
//{content: [{"text":"对方主动回复或关注你前最多发送1条消息","color_day":"#9499A0","color_nig":"#9499A0"}]}
} else {
ackSessionMsg(messageList.last.msgSeqno);
}
if (response.response.eInfos != null) {
eInfos = response.response.eInfos;
}
} else {
SmartDialog.showToast(res['msg']);
}
return false;
}
// 消息标记已读
Future ackSessionMsg() async {
if (messageList.isEmpty) {
return;
}
Future ackSessionMsg(int? msgSeqno) async {
var res = await MsgHttp.ackSessionMsg(
talkerId: talkerId,
ackSeqno: messageList.last.msgSeqno,
ackSeqno: msgSeqno,
);
if (!res['status']) {
SmartDialog.showToast(res['msg']);
}
}
late final ownerMid = Accounts.main.mid;
Future sendMsg({
required String message,
dynamic picMsg,
@@ -80,16 +78,16 @@ class WhisperDetailController extends GetxController {
SmartDialog.showToast('请先登录');
return;
}
if (picMsg == null && message == '') {
SmartDialog.dismiss();
SmartDialog.showToast('请输入内容');
return;
}
if (mid == null) {
SmartDialog.dismiss();
SmartDialog.showToast('这里不能发');
return;
}
if (picMsg == null && message == '') {
SmartDialog.dismiss();
SmartDialog.showToast('请输入内容');
return;
}
var result = await MsgHttp.sendMsg(
senderUid: ownerMid,
receiverId: int.parse(mid!),
@@ -99,13 +97,13 @@ class WhisperDetailController extends GetxController {
);
SmartDialog.dismiss();
if (result['status']) {
// debugPrint(result['data']);
if (msgType == 5) {
messageList[index!].msgStatus = 1;
messageList.refresh();
List<MessageItem> list = (loadingState.value as Success).response;
list[index!].msgStatus = 1;
loadingState.refresh();
SmartDialog.showToast('撤回成功');
} else {
querySessionMsg();
queryData();
onClearText();
SmartDialog.showToast('发送成功');
}
@@ -113,4 +111,13 @@ class WhisperDetailController extends GetxController {
SmartDialog.showToast(result['msg']);
}
}
@override
List<MessageItem>? getDataList(SessionMsgDataModel response) {
return response.messages;
}
@override
Future<LoadingState<SessionMsgDataModel>> customGetData() =>
MsgHttp.sessionMsg(talkerId: talkerId);
}