You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
315 lines
10 KiB
315 lines
10 KiB
import 'package:dating_touchme_app/controller/discover/room_controller.dart';
|
|
import 'package:dating_touchme_app/controller/message/conversation_controller.dart';
|
|
import 'package:dating_touchme_app/controller/overlay_controller.dart';
|
|
import 'package:dating_touchme_app/extension/ex_widget.dart';
|
|
import 'package:dating_touchme_app/generated/assets.dart';
|
|
import 'package:dating_touchme_app/im/im_manager.dart';
|
|
import 'package:dating_touchme_app/oss/oss_manager.dart';
|
|
import 'package:dating_touchme_app/pages/mine/login_page.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import 'package:get_storage/get_storage.dart';
|
|
import '../../model/mine/authentication_data.dart';
|
|
import '../../model/mine/user_data.dart';
|
|
import '../../network/user_api.dart';
|
|
import '../../pages/mine/user_info_page.dart';
|
|
import '../../pages/main/main_page.dart';
|
|
import '../global.dart';
|
|
|
|
class UserController extends GetxController {
|
|
|
|
// UserApi实例
|
|
late UserApi _userApi;
|
|
final storage = GetStorage();
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
// 从全局依赖中获取UserApi
|
|
_userApi = Get.find<UserApi>();
|
|
}
|
|
|
|
/// 获取环信用户token
|
|
Future<String?> getHxUserToken() async {
|
|
|
|
try {
|
|
// 调用获取环信用户token接口
|
|
final response = await _userApi.getHxUserToken();
|
|
|
|
// 处理响应
|
|
if (response.data.isSuccess) {
|
|
// 保存token到本地存储
|
|
String? token = response.data.data;
|
|
if (token != null) {
|
|
// 打印获取的token
|
|
print('获取环信用户token成功: $token');
|
|
// 等待登录完成
|
|
final loginSuccess = await IMManager.instance.login(token);
|
|
if (loginSuccess) {
|
|
print('✅ IM登录成功');
|
|
} else {
|
|
print('⚠️ IM登录失败');
|
|
}
|
|
return token;
|
|
} else {
|
|
SmartDialog.showToast('获取的环信用户token为空');
|
|
return null;
|
|
}
|
|
} else {
|
|
SmartDialog.showToast(response.data.message);
|
|
return null;
|
|
}
|
|
} catch (e) {
|
|
print('获取环信用户token失败: $e');
|
|
SmartDialog.showToast('获取环信用户token失败,请重试');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
bool _checkInformation(UserData information){
|
|
if(information.id == null){
|
|
return true;
|
|
}
|
|
if(information.id!.isEmpty){
|
|
return true;
|
|
}
|
|
if(information.genderCode == null){
|
|
return true;
|
|
}
|
|
if(information.genderCode!.isNaN){
|
|
return true;
|
|
}
|
|
if(information.birthYear == null){
|
|
return true;
|
|
}
|
|
if(information.nickName == null){
|
|
return true;
|
|
}
|
|
if(information.nickName!.isEmpty){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
void logout() async {
|
|
// 退出直播间
|
|
if (Get.isRegistered<RoomController>()) {
|
|
try {
|
|
final roomController = Get.find<RoomController>();
|
|
await roomController.leaveChannel();
|
|
} catch (e) {
|
|
print('退出直播间失败: $e');
|
|
}
|
|
}
|
|
|
|
// 取消小窗口
|
|
if (Get.isRegistered<OverlayController>()) {
|
|
try {
|
|
final overlayController = Get.find<OverlayController>();
|
|
overlayController.hide(); // 隐藏直播房间小窗
|
|
overlayController.hideVideoCall(); // 隐藏视频通话小窗
|
|
} catch (e) {
|
|
print('取消小窗口失败: $e');
|
|
}
|
|
}
|
|
|
|
// 先退出 IM 登录
|
|
if(IMManager.instance.isInitialized){
|
|
await IMManager.instance.logout();
|
|
}
|
|
// 清除会话列表和用户信息缓存
|
|
if (Get.isRegistered<ConversationController>()) {
|
|
final conversationController = Get.find<ConversationController>();
|
|
conversationController.clearConversations();
|
|
}
|
|
// App清除本地存储,有待处理,
|
|
// storage.erase();
|
|
storage.remove('userId');
|
|
storage.remove('token');
|
|
// storage.write('hasAgreedUserAgreement', true);
|
|
// 清除全局数据
|
|
GlobalData().logout();
|
|
Get.offAll(() => LoginPage());
|
|
}
|
|
|
|
static const statusMap = {
|
|
1: '3天',
|
|
2: '7天',
|
|
3: '15天',
|
|
4: '30天',
|
|
5: '永久',
|
|
};
|
|
|
|
/// 获取用户基础信息
|
|
Future<void> getBaseUserInfo(String userId, bool isMain) async {
|
|
try {
|
|
final response = await _userApi.getBaseUserInfo(userId);
|
|
|
|
if (response.data.isSuccess && response.data.data != null) {
|
|
// 成功获取基础信息后,调用获取婚姻信息详情接口
|
|
final baseInfo = response.data.data!;
|
|
if(baseInfo.isForbidden == true){
|
|
|
|
final storage = GetStorage();
|
|
final userId = storage.read<String>('userId');
|
|
if (userId != null && userId.isNotEmpty) {
|
|
|
|
logout();
|
|
}
|
|
SmartDialog.dismiss();
|
|
|
|
|
|
|
|
SmartDialog.show(
|
|
onDismiss: (){
|
|
SmartDialog.dismiss();
|
|
},
|
|
builder: (context) {
|
|
return ClipRRect(
|
|
borderRadius: BorderRadius.all(Radius.circular(16.w)),
|
|
child: Material(
|
|
color: Colors.white,
|
|
child: Container(
|
|
width: 311.w,
|
|
height: 256.w,
|
|
padding: EdgeInsets.only(
|
|
top: 18.w,
|
|
right: 19.w,
|
|
left: 19.w
|
|
),
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0xFFFFFFFF),
|
|
Color(0xFFF4F2FF),
|
|
],
|
|
),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
Image.asset(
|
|
Assets.imagesLoginWarning,
|
|
width: 44.w,
|
|
height: 44.w,
|
|
),
|
|
SizedBox(height: 4.w,),
|
|
Text(
|
|
"账号已限制登录",
|
|
textAlign: TextAlign.center,
|
|
style: TextStyle(
|
|
fontSize: 16.w
|
|
),
|
|
),
|
|
SizedBox(height: 10.w,),
|
|
Text(
|
|
"你的账号涉嫌违规已被系统封禁,如需申诉,请点击右上角联系客服进行反馈。\n"
|
|
"封禁时间:${statusMap[baseInfo.forbiddenCycle] ?? "未知"}\n"
|
|
"${baseInfo.forbiddenCycle != 5 ? "解除时间:${baseInfo.forbiddenEndTime}" : ""}",
|
|
style: TextStyle(
|
|
fontSize: 13.w
|
|
),
|
|
),
|
|
SizedBox(height: 12.w,),
|
|
Container(
|
|
width: 128.w,
|
|
height: 40.w,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.all(Radius.circular(12.w)),
|
|
color: const Color.fromRGBO(117, 98, 249, 1)
|
|
),
|
|
child: Center(
|
|
child: Text(
|
|
"知道了",
|
|
style: TextStyle(
|
|
fontSize: 14.w,
|
|
color: Colors.white
|
|
),
|
|
),
|
|
),
|
|
).onTap(() {
|
|
|
|
// 隐藏 overlay
|
|
SmartDialog.dismiss();
|
|
})
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
return ;
|
|
}
|
|
final result = await _userApi.getMarriageInformationDetail();
|
|
// print(result.data);
|
|
if (result.data.isSuccess) {
|
|
if(result.data.data == null){
|
|
var information = UserData();
|
|
|
|
if(baseInfo.liveMatchmaker != null && baseInfo.liveMatchmaker!.enable!){
|
|
information.matchmakerFlag = true;
|
|
information.matchmakerType = baseInfo.liveMatchmaker!.type;
|
|
} else {
|
|
information.matchmakerFlag = false;
|
|
}
|
|
|
|
// information.matchmakerFlag = baseInfo.matchmakerFlag;
|
|
// if(information.matchmakerFlag!){
|
|
// information.matchmakerType = baseInfo.matchmakerType;
|
|
// }
|
|
information.realName = baseInfo.realName;
|
|
information.phone = baseInfo.phone;
|
|
GlobalData().userData = information;
|
|
if(isMain){
|
|
SmartDialog.showToast('转到完善信息');
|
|
Get.to(() => UserInfoPage());
|
|
} else {
|
|
Get.offAll(() => UserInfoPage());
|
|
}
|
|
// await storage.write('userId', GlobalData().userId);
|
|
return;
|
|
}
|
|
final information = result.data.data!;
|
|
if(baseInfo.liveMatchmaker != null && baseInfo.liveMatchmaker!.enable!){
|
|
information.matchmakerFlag = true;
|
|
information.matchmakerType = baseInfo.liveMatchmaker!.type;
|
|
information.code = baseInfo.liveMatchmaker!.code;
|
|
} else {
|
|
information.matchmakerFlag = false;
|
|
}
|
|
information.realName = baseInfo.realName;
|
|
information.phone = baseInfo.phone;
|
|
GlobalData().userData = information;
|
|
// await storage.write('userId', GlobalData().userId);
|
|
if (_checkInformation(information)) {
|
|
//跳转到完善信息
|
|
SmartDialog.showToast('转到完善信息');
|
|
// 导航到完善信息页面
|
|
if(isMain){
|
|
SmartDialog.showToast('转到完善信息');
|
|
Get.to(() => UserInfoPage());
|
|
} else {
|
|
Get.offAll(() => UserInfoPage());
|
|
}
|
|
} else if(!isMain){
|
|
await storage.write('userId', userId);
|
|
Get.offAll(MainPage());
|
|
}
|
|
}
|
|
} else {
|
|
SmartDialog.showToast(response.data.message);
|
|
}
|
|
} catch (e) {
|
|
// 获取用户信息失败不影响登录流程
|
|
SmartDialog.showToast('获取用户信息失败');
|
|
print('获取用户信息失败: $e');
|
|
}
|
|
}
|
|
|
|
}
|