import 'dart:async'; import 'package:flutter_app_badger/flutter_app_badger.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../network/api_repository.dart'; import '../../../tools/eventBusEventManage.dart'; import 'messageList_entity.dart'; import 'messageList_state.dart'; typedef BlockDeletSuccssCallback = void Function(); class MessageListLogic extends BaseGetXController { final MessageListState state = MessageListState(); //请求消息列表 Future messageListDataRequest() async { final MessageListEntity entity = await ApiRepository.to .messageListLoadData(pageNo: pageNo.toString(), pageSize: pageSize); if (entity.errorCode!.codeIsSuccessful) { AppLog.log('消息列表数据请求成功:${entity.data!.total}'); // 设置角标(直接设置一个数值) await FlutterAppBadger.updateBadgeCount(entity.data!.unreadCount!); if (pageNo == 1) { state.itemDataList.value = entity.data!.list!; pageNo++; } else { if (entity.data!.list!.isNotEmpty) { state.itemDataList.value.addAll(entity.data!.list!); pageNo++; } } } return entity; } // 删除消息 Future deletMessageDataRequest(String messageId, BlockDeletSuccssCallback blockDeletSuccssCallback) async { final MessageListEntity entity = await ApiRepository.to.deletMessageLoadData(messageId: messageId); if (entity.errorCode!.codeIsSuccessful) { blockDeletSuccssCallback(); } } // 清空消息 Future deletAllMessageDataRequest() async { final MessageListEntity entity = await ApiRepository.to.deletAllMessageLoadData(); if (entity.errorCode!.codeIsSuccessful) { pageNo = 1; messageListDataRequest(); // 清除角标 FlutterAppBadger.removeBadge(); } } // 刷新消息列表 StreamSubscription? _readMessageRefreshUIEvent; void _readMessageRefreshUIAction() { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus _readMessageRefreshUIEvent = eventBus.on().listen((event) { pageNo = 1; messageListDataRequest(); }); } @override void onReady() { super.onReady(); // messageListDataRequest(); _readMessageRefreshUIAction(); // 收到切换语言消息,重新拉取一下列表 eventBus .on() .listen((ChangeLanguageBlockLastLanguageEvent event) { pageNo = 1; messageListDataRequest(); }); } @override void onClose() { super.onClose(); _readMessageRefreshUIEvent?.cancel(); } }