import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:circle_app/app/circle/logic.dart'; import 'package:circle_app/app/minefragment/logic.dart'; import 'package:circle_app/main.dart'; import 'package:circle_app/network/api.dart'; import 'package:circle_app/network/dio_manager.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:get/get.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import '../../util/eventBus.dart'; import '../../view/notice.dart'; import '../circle/view.dart'; import '../dialog/UpdateDialog.dart'; import '../minefragment/view.dart'; import '../msg/view.dart'; import 'state.dart'; class HomeLogic extends GetxController { PageController pageController = PageController(initialPage: 1); int currentIndex = 1; Widget currentPage = Container(); final HomeState state = HomeState(); final List tabs = []; var circlePage = CirclePage(); static final MessageService _messageService = serviceLocator(); final RxString unreadSIze = "0".obs; @override void onInit() async { super.onInit(); getIMData(); tabs.add(MsgPage()); tabs.add(CirclePage()); tabs.add(MinefragmentPage()); EventBusManager.on().listen((event) { getUnreadSize(); }); getUnreadSize(); var msgListener = V2TimSimpleMsgListener(onRecvC2CTextMessage: ( msgID, userInfo, text, ) async { print("收到新消息" + text); unreadSIze.value = (int.parse(unreadSIze.value) + 1).toString(); //getUnreadSize(); }, onRecvC2CCustomMessage: ( String msgID, V2TimUserInfo sender, String customData, ) { if (sender.userID == "qpqz_dev_10_10000000000" || sender.userID == "qpqz_prod_10_10000000000") { if(customData.isEmpty){ return; } print("123123123123"+customData); Map jsonData = json.decode(customData); int event = jsonData['event']; Map content = jsonData['content']; switch(event){ case 1://关注 String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}"; if(content['isFollow']==1){//互关 showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],3,(){ pushChatPage(content['id'].toString(), content['imId'], content['nickname']); }); }else{ showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],1,(){ setLike(content['id'].toString()); }); } break; case 2://上线 String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}"; showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],2,(){ pushChatPage(content['id'].toString(), content['imId'], content['nickname']); }); break; } } }); _messageService.addSimpleMsgListener(listener: msgListener); var data = await DioManager.instance.get(url: Api.APP_VERSION); var bean = BaseResponse.fromJson( data, (data) => UpdateInfo.fromJson(data)); if (bean.isSuccess() && bean.data.update == 1) { showReportDialog(Get.context!, bean.data.constraint == 0, bean.data); } } setLike(String userId) async { var data = await DioManager.instance.post( url: "${Api.setLike + userId}/follow", params: {'status': "1"}); var bean = BaseResponse.fromJson( data, (jsonData) => jsonData, ); if (bean.isSuccess()) { update(); } showOKToast(bean.msg); } getUnreadSize() async { V2TimValueCallback getTotalUnreadMessageCountRes = await TencentImSDKPlugin.v2TIMManager .getConversationManager() .getTotalUnreadMessageCount(); print("未读数量desc=" + getTotalUnreadMessageCountRes.desc.toString() + "code=" + getTotalUnreadMessageCountRes.code.toString() + "data=" + getTotalUnreadMessageCountRes.data.toString()); if (getTotalUnreadMessageCountRes.code == 0) { unreadSIze.value = getTotalUnreadMessageCountRes.data.toString(); if (Platform.isAndroid) { setOfflinePushStatus(status: AppStatus.foreground); } } else { getUnreadSize(); } } @override Future setOfflinePushStatus( {required AppStatus status, int? totalCount}) { if (status == AppStatus.foreground) { // 当应用status为前台时,上报doForeground() return TencentImSDKPlugin.v2TIMManager .getOfflinePushManager() .doForeground(); } else { // 当应用status为后台时,上报doBackground(),并带上未读数 return TencentImSDKPlugin.v2TIMManager .getOfflinePushManager() .doBackground(unreadCount: totalCount ?? 0); } } @override void onReady() async { // TODO: implement onReady super.onReady(); FlutterNativeSplash.remove(); } void showReportDialog( BuildContext context, bool isDismiss, UpdateInfo updateInfo) { showDialog( context: context, barrierDismissible: isDismiss, builder: (BuildContext context) { return UpdateDialog( isDismiss: isDismiss, updateInfo: updateInfo, ); }); } void getIMData() async { // _coreInstance.; if (!coreInstance.isLoginSuccess) { var data = await DioManager.instance.get(url: Api.getIMInfo); if (data['code'] == 200) { loginIM( data['data']['account_id'].toString(), data['data']['user_sig']); } } } String getInfo() { return getBaseImage('image'); } updateIndex(int index) { currentIndex = index; if (index == 1) { final logic = Get.put(CircleLogic()); logic.loadCirclePeopleData(); } else if (index == 2) { final logic = Get.put(MinefragmentLogic()); logic.getMode(); } update(); } }