import 'dart:async'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:get/get.dart'; import 'package:openim_common/openim_common.dart'; import '../../../core/controller/app_controller.dart'; import '../../../core/controller/im_controller.dart'; import '../../../routes/app_navigator.dart'; import '../chat_logic.dart'; class ChatSetupLogic extends GetxController { final chatLogic = Get.find(tag: GetTags.chat); final appLogic = Get.find(); final imLogic = Get.find(); late Rx conversationInfo; late StreamSubscription ccSub; late StreamSubscription fcSub; String get conversationID => conversationInfo.value.conversationID; bool get isPinned => conversationInfo.value.isPinned == true; @override void onClose() { ccSub.cancel(); fcSub.cancel(); super.onClose(); } @override void onInit() { conversationInfo = Rx(Get.arguments['conversationInfo']); final sourceID = conversationInfo.value.conversationType == ConversationType.single ? conversationInfo.value.userID : conversationInfo.value.groupID; OpenIM.iMManager.conversationManager .getOneConversation(sourceID: sourceID!, sessionType: conversationInfo.value.conversationType!) .then((value) { conversationInfo.value = value; }); ccSub = imLogic.conversationChangedSubject.listen((newList) { for (var newValue in newList) { if (newValue.conversationID == conversationID) { conversationInfo.update((val) { val?.burnDuration = newValue.burnDuration ?? 30; val?.isPrivateChat = newValue.isPrivateChat; val?.isPinned = newValue.isPinned; val?.recvMsgOpt = newValue.recvMsgOpt; val?.isMsgDestruct = newValue.isMsgDestruct; val?.msgDestructTime = newValue.msgDestructTime; val?.showName = newValue.showName; }); break; } } }); fcSub = imLogic.friendInfoChangedSubject.listen((value) { if (conversationInfo.value.userID == value.userID) { conversationInfo.update((val) { val?.showName = value.getShowName(); val?.faceURL = value.faceURL; }); } }); super.onInit(); } void toggleTopContacts() async { await LoadingView.singleton.wrap( asyncFunction: () => OpenIM.iMManager.conversationManager.pinConversation( conversationID: conversationID, isPinned: !isPinned, ), ); } void clearChatHistory() async { var confirm = await Get.dialog(CustomDialog( title: StrRes.confirmClearChatHistory, rightText: StrRes.clearAll, )); if (confirm == true) { await LoadingView.singleton.wrap( asyncFunction: () => OpenIM.iMManager.conversationManager.clearConversationAndDeleteAllMsg( conversationID: conversationID, ), ); chatLogic.clearAllMessage(); IMViews.showToast(StrRes.clearSuccessfully); } } void createGroup() => AppNavigator.startCreateGroup(defaultCheckedList: [ UserInfo( userID: conversationInfo.value.userID, faceURL: conversationInfo.value.faceURL, nickname: conversationInfo.value.showName, ), OpenIM.iMManager.userInfo, ]); void viewUserInfo() => AppNavigator.startUserProfilePane( userID: conversationInfo.value.userID!, nickname: conversationInfo.value.showName, faceURL: conversationInfo.value.faceURL, ); }