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();
|
|||
|
}
|
|||
|
}
|