mirror of
https://github.com/lakaola/chat-flutter.git
synced 2026-07-02 13:14:19 +08:00
88 lines
2.1 KiB
Dart
88 lines
2.1 KiB
Dart
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();
|
||
});
|
||
}
|
||
}
|