feat(mobile-next): 导入官方 openim-flutter-demo 固定基线 3.8.3-patch.3 并完成双构建
- 上游: github.com/OpenIMSDK/openim-flutter-demo tag 3.8.3-patch.3 commit b3dfdb1e8aaeaaf6f0793e10cadd20d5c184a31f - 并行目录 mobile-next/ 原样导入(含 LICENSE),不覆盖现网 mobile/ - 锁定 Flutter 3.24.5 / Dart 3.5.4 / JDK 17 / Gradle 7.6.3 / AGP 7.3.1 - 实测 Android debug 与 release 构建均成功(见 docs/mobile-next-baseline-import.md) - 本提交可单独回退:git revert 1db1229(重写前) Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -0,0 +1,382 @@
|
||||
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<ConversationInfo>? conversations}) {
|
||||
Get.offAllNamed(
|
||||
AppRoutes.home,
|
||||
arguments: {'isAutoLogin': isAutoLogin, 'conversations': conversations},
|
||||
);
|
||||
}
|
||||
|
||||
static void startSplashToMain({bool isAutoLogin = false, List<ConversationInfo>? 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<T?>? startChat<T>({
|
||||
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<T?>? startGroupMemberList<T>({
|
||||
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<String>? defaultCheckedIDList,
|
||||
List<dynamic>? checkedList,
|
||||
List<String>? 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<UserInfo> 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<UserInfo>) {
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user