Files
chat-flutter/lib/views/msg/msg_index_controller.dart
2025-09-12 20:35:12 +08:00

88 lines
2.1 KiB
Dart
Raw Permalink 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 'dart:async';
import 'package:demo/event/event_message.dart';
import 'package:demo/event/event_setting.dart';
import 'package:demo/views/base/base_controller.dart';
import 'package:demo/tools/tools_enum.dart';
import 'package:demo/tools/tools_sqlite.dart';
import 'package:demo/tools/tools_storage.dart';
class MsgIndexController extends BaseController {
String userId = ToolsStorage().local().userId;
final Map<String, ChatMsg> _dataMap = {};
// 不显示
Future<void> setShow(String chatId) async {
// 删除
await ToolsSqlite().msg.delete(chatId);
// 移除
refreshList.remove(_dataMap[chatId]);
// 刷新
update();
}
// 删除
Future<void> setDelete(String chatId, ChatTalk chatTalk) async {
// 删除消息
await ToolsSqlite().extend.clearMsg(chatId);
// 移除消息
refreshList.remove(_dataMap[chatId]);
// 刷新
update();
}
// 消息刷新
_onRefresh() async {
// 更新
refreshList = await ToolsSqlite().msg.getList();
for (ChatMsg data in refreshList) {
_dataMap[data.chatId] = data;
}
update();
}
@override
void onInit() {
super.onInit();
// 监听消息
_listenMessage();
// 监听设置
_listenSetting();
// 消息刷新
_onRefresh();
// 定时任务
_listenTimer();
}
// 监听设置(处理最新通知/处理消息刷新)
_listenSetting() {
// 监听通知
eventStream = EventSetting().event.stream.listen((model) {
if (SettingType.message == model.setting) {
// 消息刷新
_onRefresh();
}
});
}
// 监听消息(当有新消息,显示到消息顶部)
_listenMessage() {
subscription = EventMessage().listenMsg.stream.listen((chatMsg) {
// 移除
refreshList.remove(_dataMap[chatMsg.chatId]);
// 插入
_dataMap[chatMsg.chatId] = chatMsg;
refreshList.add(chatMsg);
// 更新
update();
});
}
// 定时任务每间隔1分钟刷新一次页面时间显示
_listenTimer() {
refreshTimer?.cancel();
refreshTimer = Timer.periodic(const Duration(minutes: 1), (timer) {
update();
});
}
}