import 'package:flutter/material.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:get/get.dart'; import 'package:openim_common/openim_common.dart'; import 'package:pull_to_refresh_new/pull_to_refresh.dart'; import '../conversation/conversation_logic.dart'; class GlobalSearchLogic extends CommonSearchLogic { final conversationLogic = Get.find(); final textMessageRefreshCtrl = RefreshController(); final fileMessageRefreshCtrl = RefreshController(); final contactsList = [].obs; final groupList = [].obs; final textSearchResultItems = [].obs; final fileMessageList = [].obs; final index = 0.obs; final tabs = [ StrRes.globalSearchAll, StrRes.globalSearchContacts, StrRes.globalSearchGroup, StrRes.globalSearchChatHistory, StrRes.globalSearchChatFile, ]; int textMessagePageIndex = 1; int fileMessagePageIndex = 1; int count = 20; switchTab(int index) { this.index.value = index; } @override void clearList() { contactsList.clear(); groupList.clear(); textSearchResultItems.clear(); fileMessageList.clear(); } } abstract class CommonSearchLogic extends GetxController { final searchCtrl = TextEditingController(); final focusNode = FocusNode(); void clearList(); @override void onInit() { searchCtrl.addListener(_clearInput); super.onInit(); } @override void onClose() { focusNode.dispose(); searchCtrl.dispose(); super.onClose(); } _clearInput() { if (searchKey.isEmpty) { clearList(); } } String get searchKey => searchCtrl.text.trim(); Future> searchFriend() => Apis.searchFriendInfo(searchCtrl.text.trim()) .then((list) => list.map((e) => FriendInfo.fromJson(e.toJson())).toList()); Future> searchGroup() => OpenIM.iMManager.groupManager .searchGroups(keywordList: [searchCtrl.text.trim()], isSearchGroupName: true, isSearchGroupID: true); Future searchTextMessage({ int pageIndex = 1, int count = 20, }) => OpenIM.iMManager.messageManager.searchLocalMessages( keywordList: [searchKey], messageTypeList: [MessageType.text, MessageType.atText], pageIndex: pageIndex, count: count, ); Future searchFileMessage({ int pageIndex = 1, int count = 20, }) => OpenIM.iMManager.messageManager.searchLocalMessages( keywordList: [searchKey], messageTypeList: [MessageType.file], pageIndex: pageIndex, count: count, ); String? parseID(e) { if (e is ConversationInfo) { return e.isSingleChat ? e.userID : e.groupID; } else if (e is GroupInfo) { return e.groupID; } else if (e is UserInfo) { return e.userID; } else if (e is FriendInfo) { return e.userID; } else { return null; } } String? parseNickname(e) { if (e is ConversationInfo) { return e.showName; } else if (e is GroupInfo) { return e.groupName; } else if (e is UserInfo) { return e.nickname; } else if (e is FriendInfo) { return e.nickname; } else { return null; } } String? parseFaceURL(e) { if (e is ConversationInfo) { return e.faceURL; } else if (e is GroupInfo) { return e.faceURL; } else if (e is UserInfo) { return e.faceURL; } else if (e is FriendInfo) { return e.faceURL; } else { return null; } } }