flutter/lib/IM/global_badge.dart

61 lines
1.9 KiB
Dart
Raw Normal View History

2025-07-21 15:46:30 +08:00
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();
}
}