flutter/lib/IM/global_badge.dart
2025-07-21 15:46:30 +08:00

61 lines
1.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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