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().setBadge(TabType.chat, totalUnread.value); // 更新会话列表 Get.find().getConversationList(); }, ); _initUnreadCount(); _addListener(); } /// 初始化时获取一次未读总数 void _initUnreadCount() async { final res = await TencentImSDKPlugin.v2TIMManager.getConversationManager().getTotalUnreadMessageCount(); if (res.code == 0) { totalUnread.value = res.data ?? 0; Get.find().setBadge(TabType.chat, totalUnread.value); final to = res.data; logger.i('初始化未读消息数$to'); } } /// 添加会话未读数监听器 void _addListener() { TencentImSDKPlugin.v2TIMManager.getConversationManager().addConversationListener(listener: _listener); logger.i('未读数监听器注册成功'); } /// 手动更新total Future refreshUnreadCount() async { _initUnreadCount(); } /// 移除监听器,防止重复注册 @override void onClose() { TencentImSDKPlugin.v2TIMManager.getConversationManager().removeConversationListener(listener: _listener); super.onClose(); } }