import 'package:PiliPlus/grpc/bilibili/app/im/v1.pb.dart' show Offset, Session, SessionMainReply, SessionPageType, ThreeDotItem; import 'package:PiliPlus/grpc/im.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/msg/msgfeed_unread.dart'; import 'package:PiliPlus/pages/common/common_whisper_controller.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:protobuf/protobuf.dart' show PbMap; class WhisperController extends CommonWhisperController { @override SessionPageType sessionPageType = SessionPageType.SESSION_PAGE_TYPE_HOME; late final List<({bool enabled, IconData icon, String name, String route})> msgFeedTopItems; late final RxList unreadCounts; PbMap? offset; Rx?> threeDotItems = Rx?>(null); Rx?> outsideItem = Rx?>(null); @override void onInit() { super.onInit(); msgFeedTopItems = [ const ( name: "回复我的", icon: Icons.message_outlined, route: "/replyMe", enabled: true, ), const ( name: "@我", icon: Icons.alternate_email_outlined, route: "/atMe", enabled: true, ), ( name: "收到的赞", icon: Icons.favorite_border_outlined, route: "/likeMe", enabled: !Pref.disableLikeMsg, ), const ( name: "系统通知", icon: Icons.notifications_none_outlined, route: "/sysMsg", enabled: true, ), ]; unreadCounts = List.filled(msgFeedTopItems.length, 0).obs; queryMsgFeedUnread(); queryData(); } Future queryMsgFeedUnread() async { var res = await ImGrpc.getTotalUnread(unreadType: 2); if (res.isSuccess) { final data = MsgFeedUnread.fromJson(res.data.msgFeedUnread.unread); final unreadCounts = [data.reply, data.at, data.like, data.sysMsg]; if (!listEquals(this.unreadCounts, unreadCounts)) { this.unreadCounts.value = unreadCounts; } } else { res.toast(); } } @override List? getDataList(SessionMainReply response) { offset = response.paginationParams.offsets; isEnd = !response.paginationParams.hasMore; return response.sessions; } @override bool customHandleResponse( bool isRefresh, Success response) { if (isRefresh) { threeDotItems.value = response.response.threeDotItems; outsideItem.value = response.response.outsideItem; } return false; } @override Future> customGetData() => ImGrpc.sessionMain(offset: offset); @override Future onRefresh() { offset = null; queryMsgFeedUnread(); return super.onRefresh(); } }