import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:get/get.dart'; import 'package:openim_common/openim_common.dart'; import '../pages/chat/group_setup/edit_name/edit_name_logic.dart'; import '../pages/chat/group_setup/group_member_list/group_member_list_logic.dart'; import '../pages/contacts/add_by_search/add_by_search_logic.dart'; import '../pages/contacts/group_profile_panel/group_profile_panel_logic.dart'; import '../pages/contacts/select_contacts/select_contacts_logic.dart'; import '../pages/mine/edit_my_info/edit_my_info_logic.dart'; import 'app_pages.dart'; class AppNavigator { AppNavigator._(); static void startLogin() { Get.offAllNamed(AppRoutes.login); } static void startBackLogin() { Get.until((route) => Get.currentRoute == AppRoutes.login); } static void startMain({bool isAutoLogin = false, List? conversations}) { Get.offAllNamed( AppRoutes.home, arguments: {'isAutoLogin': isAutoLogin, 'conversations': conversations}, ); } static void startSplashToMain({bool isAutoLogin = false, List? conversations}) { Get.offAndToNamed( AppRoutes.home, arguments: {'isAutoLogin': isAutoLogin, 'conversations': conversations}, ); } static void startBackMain() { Get.until((route) => Get.currentRoute == AppRoutes.home); } static startOANtfList({required ConversationInfo info}) { return Get.toNamed(AppRoutes.oaNotificationList, arguments: info); } static Future? startChat({ required ConversationInfo conversationInfo, bool offUntilHome = true, String? draftText, Message? searchMessage, }) async { GetTags.createChatTag(); final arguments = { 'draftText': draftText, 'conversationInfo': conversationInfo, 'searchMessage': searchMessage, }; return offUntilHome ? Get.offNamedUntil( AppRoutes.chat, (route) => route.settings.name == AppRoutes.home, arguments: arguments, ) : Get.toNamed( AppRoutes.chat, arguments: arguments, preventDuplicates: false, ); } static startMyQrcode() => Get.toNamed(AppRoutes.myQrcode); static startFavoriteMange() => Get.toNamed(AppRoutes.favoriteManage); static startAddContactsMethod() => Get.toNamed(AppRoutes.addContactsMethod); static startScan() => Permissions.camera(() => Get.to( () => const QrcodeView(), transition: Transition.cupertino, popGesture: true, )); static startAddContactsBySearch({required SearchType searchType}) => Get.toNamed( AppRoutes.addContactsBySearch, arguments: {"searchType": searchType}, ); static startUserProfilePane({ required String userID, String? groupID, String? nickname, String? faceURL, bool offAllWhenDelFriend = false, bool offAndToNamed = false, bool forceCanAdd = false, }) { GetTags.createUserProfileTag(); final arguments = { 'groupID': groupID, 'userID': userID, 'nickname': nickname, 'faceURL': faceURL, 'offAllWhenDelFriend': offAllWhenDelFriend, 'forceCanAdd': forceCanAdd, }; return offAndToNamed ? Get.offAndToNamed(AppRoutes.userProfilePanel, arguments: arguments) : Get.toNamed( AppRoutes.userProfilePanel, arguments: arguments, preventDuplicates: false, ); } static startPersonalInfo({ required String userID, }) => Get.toNamed(AppRoutes.personalInfo, arguments: { 'userID': userID, }); static startFriendSetup({ required String userID, }) => Get.toNamed(AppRoutes.friendSetup, arguments: { 'userID': userID, }); static startSetFriendRemark() => Get.toNamed(AppRoutes.setFriendRemark, arguments: {}); static startSendVerificationApplication({ String? userID, String? groupID, JoinGroupMethod? joinGroupMethod, }) => Get.toNamed(AppRoutes.sendVerificationApplication, arguments: { 'joinGroupMethod': joinGroupMethod, 'userID': userID, 'groupID': groupID, }); static startGroupProfilePanel({ required String groupID, required JoinGroupMethod joinGroupMethod, bool offAndToNamed = false, }) => offAndToNamed ? Get.offAndToNamed(AppRoutes.groupProfilePanel, arguments: { 'joinGroupMethod': joinGroupMethod, 'groupID': groupID, }) : Get.toNamed(AppRoutes.groupProfilePanel, arguments: { 'joinGroupMethod': joinGroupMethod, 'groupID': groupID, }); static startMyInfo() => Get.toNamed(AppRoutes.myInfo); static startEditMyInfo({EditAttr attr = EditAttr.nickname, int? maxLength}) => Get.toNamed(AppRoutes.editMyInfo, arguments: {'editAttr': attr, 'maxLength': maxLength}); static startAccountSetup() => Get.toNamed(AppRoutes.accountSetup); static startBlacklist() => Get.toNamed(AppRoutes.blacklist); static startLanguageSetup() => Get.toNamed(AppRoutes.languageSetup); static startUnlockSetup() => Get.toNamed(AppRoutes.unlockSetup); static startChangePassword() => Get.toNamed(AppRoutes.changePassword); static startAboutUs() => Get.toNamed(AppRoutes.aboutUs); static startChatSetup({ required ConversationInfo conversationInfo, }) => Get.toNamed(AppRoutes.chatSetup, arguments: { 'conversationInfo': conversationInfo, }); static startGroupChatSetup({ required ConversationInfo conversationInfo, }) => Get.toNamed(AppRoutes.groupChatSetup, arguments: { 'conversationInfo': conversationInfo, }); static startGroupManage({ required GroupInfo groupInfo, }) => Get.toNamed(AppRoutes.groupManage, arguments: { 'groupInfo': groupInfo, }); static startEditGroupName({required EditNameType type, String? faceUrl}) => Get.toNamed(AppRoutes.editGroupName, arguments: { 'type': type, 'faceUrl': faceUrl, }); static Future? startGroupMemberList({ required GroupInfo groupInfo, GroupMemberOpType opType = GroupMemberOpType.view, }) => Get.toNamed(AppRoutes.groupMemberList, preventDuplicates: false, arguments: { 'groupInfo': groupInfo, 'opType': opType, }); static startSearchGroupMember({ required GroupInfo groupInfo, GroupMemberOpType opType = GroupMemberOpType.view, }) => Get.toNamed(AppRoutes.searchGroupMember, arguments: { 'groupInfo': groupInfo, 'opType': opType, }); static startGroupQrcode() => Get.toNamed(AppRoutes.groupQrcode); static startFriendRequests() => Get.toNamed(AppRoutes.friendRequests); static startProcessFriendRequests({ required FriendApplicationInfo applicationInfo, }) => Get.toNamed(AppRoutes.processFriendRequests, arguments: { 'applicationInfo': applicationInfo, }); static startGroupRequests() => Get.toNamed(AppRoutes.groupRequests); static startProcessGroupRequests({ required GroupApplicationInfo applicationInfo, }) => Get.toNamed(AppRoutes.processGroupRequests, arguments: { 'applicationInfo': applicationInfo, }); static startFriendList() => Get.toNamed(AppRoutes.friendList); static startGroupList() => Get.toNamed(AppRoutes.groupList); static startSearchFriend() => Get.toNamed(AppRoutes.searchFriend); static startSearchGroup() => Get.toNamed(AppRoutes.searchGroup); static startSelectContacts({ required SelAction action, List? defaultCheckedIDList, List? checkedList, List? excludeIDList, bool openSelectedSheet = false, String? groupID, String? ex, }) => Get.toNamed(AppRoutes.selectContacts, arguments: { 'action': action, 'defaultCheckedIDList': defaultCheckedIDList, 'checkedList': IMUtils.convertCheckedListToMap(checkedList), 'excludeIDList': excludeIDList, 'openSelectedSheet': openSelectedSheet, 'groupID': groupID, 'ex': ex, }); static startSelectContactsFromFriends() => Get.toNamed(AppRoutes.selectContactsFromFriends); static startSelectContactsFromGroup() => Get.toNamed(AppRoutes.selectContactsFromGroup); static startSelectContactsFromSearchFriends() => Get.toNamed(AppRoutes.selectContactsFromSearchFriends); static startSelectContactsFromSearchGroup() => Get.toNamed(AppRoutes.selectContactsFromSearchGroup); static startSelectContactsFromSearch() => Get.toNamed(AppRoutes.selectContactsFromSearch); static startCreateGroup({ List defaultCheckedList = const [], }) async { final result = await startSelectContacts( action: SelAction.crateGroup, defaultCheckedIDList: defaultCheckedList.map((e) => e.userID!).toList(), ); final list = IMUtils.convertSelectContactsResultToUserInfo(result); if (list is List) { return Get.toNamed( AppRoutes.createGroup, arguments: {'checkedList': list, 'defaultCheckedList': defaultCheckedList}, ); } return null; } static startGlobalSearch() => Get.toNamed(AppRoutes.globalSearch); static startExpandChatHistory({ required SearchResultItems searchResultItems, required String defaultSearchKey, }) => Get.toNamed(AppRoutes.expandChatHistory, arguments: { 'searchResultItems': searchResultItems, 'defaultSearchKey': defaultSearchKey, }); static startRegister() => Get.toNamed(AppRoutes.register); static void startVerifyPhone({ String? phoneNumber, String? email, required String areaCode, required int usedFor, String? invitationCode, }) => Get.toNamed(AppRoutes.verifyPhone, arguments: { 'phoneNumber': phoneNumber, 'email': email, 'areaCode': areaCode, 'usedFor': usedFor, 'invitationCode': invitationCode, }); static void startSetPassword({ String? phoneNumber, String? email, required String areaCode, required int usedFor, required String verificationCode, String? invitationCode, }) => Get.toNamed(AppRoutes.setPassword, arguments: { 'phoneNumber': phoneNumber, 'email': email, 'areaCode': areaCode, 'usedFor': usedFor, 'verificationCode': verificationCode, 'invitationCode': invitationCode }); static void startSetSelfInfo({ String? phoneNumber, String? email, String? account, required String areaCode, required password, required int usedFor, required String verificationCode, String? invitationCode, }) => Get.toNamed(AppRoutes.setSelfInfo, arguments: { 'phoneNumber': phoneNumber, 'email': email, 'account': account, 'areaCode': areaCode, 'password': password, 'usedFor': usedFor, 'verificationCode': verificationCode, 'invitationCode': invitationCode }); static startForgetPassword() => Get.toNamed(AppRoutes.forgetPassword); static void startResetPassword({ String? phoneNumber, String? email, String? account, required String areaCode, required String verificationCode, }) => Get.toNamed(AppRoutes.resetPassword, arguments: { 'phoneNumber': phoneNumber, 'email': email, 'account': account, 'areaCode': areaCode, 'usedFor': 2, 'verificationCode': verificationCode, }); static startSelectContactsFromTag() => Get.toNamed(AppRoutes.selectContactsFromTag); }