61 lines
1.9 KiB
Dart
61 lines
1.9 KiB
Dart
import 'package:get/get.dart';
|
||
import 'package:loopin/IM/controller/chat_controller.dart';
|
||
import 'package:loopin/IM/controller/tab_bar_controller.dart';
|
||
import 'package:loopin/IM/im_core.dart';
|
||
import 'package:loopin/models/tab_type.dart';
|
||
import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart';
|
||
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
|
||
|
||
class GlobalBadge extends GetxController {
|
||
/// 全局未读消息总数
|
||
RxInt totalUnread = 0.obs;
|
||
|
||
/// 监听器对象(用于 add/remove)
|
||
late final V2TimConversationListener _listener;
|
||
|
||
@override
|
||
void onInit() {
|
||
super.onInit();
|
||
_listener = V2TimConversationListener(
|
||
onTotalUnreadMessageCountChanged: (int count) {
|
||
logger.i('未读数发生变化$count');
|
||
totalUnread.value = count;
|
||
Get.find<TabBarController>().setBadge(TabType.chat, totalUnread.value);
|
||
// 更新会话列表
|
||
Get.find<ChatController>().getConversationList();
|
||
},
|
||
);
|
||
_initUnreadCount();
|
||
_addListener();
|
||
}
|
||
|
||
/// 初始化时获取一次未读总数
|
||
void _initUnreadCount() async {
|
||
final res = await TencentImSDKPlugin.v2TIMManager.getConversationManager().getTotalUnreadMessageCount();
|
||
if (res.code == 0) {
|
||
totalUnread.value = res.data ?? 0;
|
||
Get.find<TabBarController>().setBadge(TabType.chat, totalUnread.value);
|
||
final to = res.data;
|
||
logger.i('初始化未读消息数$to');
|
||
}
|
||
}
|
||
|
||
/// 添加会话未读数监听器
|
||
void _addListener() {
|
||
TencentImSDKPlugin.v2TIMManager.getConversationManager().addConversationListener(listener: _listener);
|
||
logger.i('未读数监听器注册成功');
|
||
}
|
||
|
||
/// 手动更新total
|
||
Future<void> refreshUnreadCount() async {
|
||
_initUnreadCount();
|
||
}
|
||
|
||
/// 移除监听器,防止重复注册
|
||
@override
|
||
void onClose() {
|
||
TencentImSDKPlugin.v2TIMManager.getConversationManager().removeConversationListener(listener: _listener);
|
||
super.onClose();
|
||
}
|
||
}
|