diff --git a/lib/controller/mine/login_controller.dart b/lib/controller/mine/login_controller.dart index d2c0f0e..e502737 100644 --- a/lib/controller/mine/login_controller.dart +++ b/lib/controller/mine/login_controller.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:dating_touchme_app/controller/global.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -110,14 +111,14 @@ class LoginController extends GetxController { if (response.data.isSuccess) { // 保存token和用户信息 if (response.data.data != null) { - final loginData = response.data.data!; - await storage.write('token', loginData.token); - await storage.write('userId', loginData.userId); - // 保存用户信息 - await storage.write('userInfo', loginData.toJson()); + final result = response.data.data!; + GlobalData().userId = result.userId; + GlobalData().qnToken = result.token; + await storage.write('token', result.token); + // await storage.write('userId', result.userId); // 登录成功后获取用户信息 - await _handleUserInfoRetrieval(loginData.userId); + await _handleUserInfoRetrieval(result.userId); } } else { SmartDialog.showToast(response.data.message); diff --git a/lib/controller/mine/user_controller.dart b/lib/controller/mine/user_controller.dart index 5fc0a31..31fc56e 100644 --- a/lib/controller/mine/user_controller.dart +++ b/lib/controller/mine/user_controller.dart @@ -85,9 +85,8 @@ class UserController extends GetxController { if (response.data.isSuccess && response.data.data != null) { // 成功获取基础信息后,调用获取婚姻信息详情接口 final baseInfo = response.data.data!; - final result = await _userApi.getMarriageInformationDetail(); - print(result.data); + // print(result.data); if (result.data.isSuccess) { if(result.data.data == null){ if(isMain){ diff --git a/lib/controller/mine/user_info_controller.dart b/lib/controller/mine/user_info_controller.dart index 358398b..d0cedc3 100644 --- a/lib/controller/mine/user_info_controller.dart +++ b/lib/controller/mine/user_info_controller.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'package:dating_touchme_app/controller/global.dart'; import 'package:dating_touchme_app/oss/oss_manager.dart'; import 'package:flustars/flustars.dart'; import 'package:get/get.dart'; @@ -6,6 +7,7 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:image_picker/image_picker.dart'; +import '../../model/mine/user_data.dart'; import '../../network/user_api.dart'; import '../../pages/main/main_page.dart'; @@ -25,7 +27,12 @@ class UserInfoController extends GetxController { // GetStorage实例,用于存储用户信息 final storage = GetStorage(); - + Map educationCodeMap = { + '大专以下': '0', + '大专': '1', + '本科': '2', + '硕士及以上': '3', + }; // UserApi实例 late UserApi _userApi; @@ -221,12 +228,7 @@ class UserInfoController extends GetxController { } // 学历代码映射 - Map educationCodeMap = { - '大专以下': '0', - '大专': '1', - '本科': '2', - '硕士及以上': '3', - }; + return { 'birthYear': birthYear, @@ -243,18 +245,13 @@ class UserInfoController extends GetxController { if (!_validateForm()) { return; } - isSubmitting.value = true; - try { - - // 构建请求参数 final params = _buildSubmitParams(); if (avatarUrl.value.isNotEmpty) { params['avatarUrl'] = avatarUrl.value; } - // 打印提交的信息 print('提交用户信息参数: $params'); @@ -264,40 +261,17 @@ class UserInfoController extends GetxController { // 处理响应 if (response.data.isSuccess) { // 获取 miId(资料id) - String miId = ''; - final regData = response.data.data; - if (regData != null) { - miId = regData; - await storage.write('miId', miId); - } else { - // 尝试从本地存储获取 - final stored = storage.read('miId'); - if (stored is String && stored.isNotEmpty) { - miId = stored; - } else { - SmartDialog.showToast('获取资料ID失败,请重试'); - return; - } - } - + String miId = response.data.data; // 先调用认证审核保存接口(保存头像,authenticationCode=8) try { - final payload = { - 'miId': miId, - 'authenticationCode': '8', - 'value': '0', - 'imgUrl': avatarUrl.value.isNotEmpty ? [avatarUrl.value] : ['0'], - }; - - final auditResp = await _userApi.saveCertificationAudit(payload); - if (auditResp.data.isSuccess) { - - } - else{ - - SmartDialog.showToast(auditResp.data.message); - - return; + if(avatarUrl.value.isNotEmpty){ + final payload = { + 'miId': miId, + 'authenticationCode': '8', + 'value': '0', + 'imgUrl': avatarUrl.value.isNotEmpty ? [avatarUrl.value] : ['0'], + }; + await _userApi.saveCertificationAudit(payload); } } catch (e) { print('保存认证审核失败: $e'); @@ -306,23 +280,18 @@ class UserInfoController extends GetxController { } // 更新本地存储的用户信息 - final currentUserInfo = storage.read('userInfo') ?? {}; - if (currentUserInfo is Map) { - currentUserInfo.addAll({ - 'gender': gender.value, - 'nickname': nickname.value, - 'birthday': birthday.value, - 'education': education.value, - 'avatarUrl': avatarUrl.value, - }); - await storage.write('userInfo', currentUserInfo); - } - + GlobalData().userData!.id = miId; + GlobalData().userData!.nickName = nickname.value; + GlobalData().userData!.profilePhoto = avatarUrl.value; + GlobalData().userData!.education = education.value; + final code = educationCodeMap[education.value] ?? '0'; + GlobalData().userData!.educationCode = int.parse(code); // 显示成功提示 - SmartDialog.showToast('信息提交成功!'); - + SmartDialog.showToast('信息提交成功'); // 延迟后跳转 - Future.delayed(const Duration(milliseconds: 1500), () { + // await storage.write('token', GlobalData().qnToken); + await storage.write('userId', GlobalData().userId); + Future.delayed(const Duration(milliseconds: 100), () { // 跳转到主页面(根据登录流程,应该跳转到MainPage) Get.offAll(() => MainPage()); }); diff --git a/lib/main.dart b/lib/main.dart index 265b61e..ef1113c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -84,10 +84,10 @@ class MyApp extends StatelessWidget { // 判断token是否为空 final storage = GetStorage(); - final token = storage.read('token'); + final userId = storage.read('userId'); // 如果token不为空,显示主页;如果token为空,显示登录页面 - if (token != null && token.isNotEmpty) { + if (userId != null && userId.isNotEmpty) { return MainPage(); } else { return LoginPage(); diff --git a/lib/model/mine/user_data.dart b/lib/model/mine/user_data.dart index 65b50f3..2f6ea69 100644 --- a/lib/model/mine/user_data.dart +++ b/lib/model/mine/user_data.dart @@ -1,9 +1,9 @@ // 用户详细信息实体类 class UserData { - final String? id; - final String? nickName; + String? id; + String? nickName; final String? name; - final String? profilePhoto; + String? profilePhoto; String? identityCard; final int? genderCode; final String? genderValue; @@ -23,8 +23,8 @@ class UserData { final String? chineseZodiac; final int? height; final int? weight; - final int? educationCode; - final String? education; + int? educationCode; + String? education; final int? maritalStatusCode; final String? maritalStatusName; final int? minimumIncome; diff --git a/lib/pages/mine/login_controller.dart b/lib/pages/mine/login_controller.dart deleted file mode 100644 index ba34f49..0000000 --- a/lib/pages/mine/login_controller.dart +++ /dev/null @@ -1,174 +0,0 @@ -// import 'dart:async'; -// import 'package:dating_touchme_app/pages/main/main_page.dart'; -// import 'package:get/get.dart'; -// import 'package:get_storage/get_storage.dart'; -// import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -// import 'package:dating_touchme_app/network/user_api.dart'; -// import 'package:dating_touchme_app/pages/mine/user_info_page.dart'; -// -// -// class LoginController extends GetxController { -// // 手机号输入 -// final phoneNumber = ''.obs; -// // 验证码输入 -// final verificationCode = ''.obs; -// // 是否正在发送验证码 -// final isSendingCode = false.obs; -// // 倒计时秒数 -// final countdownSeconds = 0.obs; -// // 是否正在登录中 -// final isLoggingIn = false.obs; -// -// // 从GetX依赖注入中获取UserApi实例 -// late UserApi _userApi; -// // GetStorage实例,用于存储token等信息 -// final storage = GetStorage(); -// -// @override -// void onInit() { -// super.onInit(); -// // 从全局依赖中获取UserApi -// _userApi = Get.find(); -// } -// -// // 获取验证码 -// Future getVerificationCode() async { -// // 验证手机号格式 -// if (phoneNumber.value.isEmpty || phoneNumber.value.length != 11) { -// SmartDialog.showToast('请输入正确的手机号'); -// return; -// } -// -// isSendingCode.value = true; -// -// try { -// // 构建请求参数 -// final params = { -// 'purpose': 1, // 认证 -// 'verifiableAccount': phoneNumber.value, -// 'verifiableAccountType': 1, // 手机 -// }; -// -// // 调用UserApi中的验证码接口 -// final response = await _userApi.getVerificationCode(params); -// -// // 处理响应 -// if (response.data.isSuccess) { -// // 生产环境移除打印,可考虑使用正式的日志框架 -// // print('验证码发送成功'); -// // 开始倒计时 -// startCountdown(); -// } else { -// SmartDialog.showToast(response.data.message); -// } -// } catch (e) { -// SmartDialog.showToast('网络请求失败,请重试'); -// } finally { -// isSendingCode.value = false; -// } -// } -// -// // 开始倒计时 -// void startCountdown() { -// countdownSeconds.value = 60; -// Timer.periodic(const Duration(seconds: 1), (timer) { -// countdownSeconds.value--; -// if (countdownSeconds.value <= 0) { -// timer.cancel(); -// } -// }); -// } -// -// // 清除错误信息 - 由于使用SmartDialog,此方法不再需要 -// // void clearErrorMessage() {} -// -// -// // 登录方法 -// Future login() async { -// // 验证输入 -// if (phoneNumber.value.isEmpty || phoneNumber.value.length != 11) { -// SmartDialog.showToast('请输入正确的手机号'); -// return; -// } -// -// if (verificationCode.value.isEmpty) { -// SmartDialog.showToast('请输入验证码'); -// return; -// } -// -// isLoggingIn.value = true; -// -// try { -// // 构建登录请求参数 -// final params = { -// 'account': phoneNumber.value, -// 'accountType': 2, // 手机号类型 -// 'captcha': verificationCode.value, -// }; -// -// // 调用登录接口 -// final response = await _userApi.login(params); -// -// // 处理响应 -// if (response.data.isSuccess) { -// // 保存token和用户信息 -// if (response.data.data != null) { -// final loginData = response.data.data!; -// await storage.write('token', loginData.token); -// await storage.write('userId', loginData.userId); -// // 保存用户信息 -// await storage.write('userInfo', loginData.toJson()); -// -// // 登录成功后获取用户基础信息 -// await _getBaseUserInfo(loginData.userId); -// } -// } else { -// SmartDialog.showToast(response.data.message); -// } -// } catch (e) { -// SmartDialog.showToast('网络请求失败,请检查网络连接'); -// } finally { -// isLoggingIn.value = false; -// } -// } -// -// // 获取用户基础信息 -// Future _getBaseUserInfo(String userId) async { -// try { -// final response = await _userApi.getBaseUserInfo(userId); -// -// if (response.data.isSuccess && response.data.data != null) { -// // 成功获取基础信息后,调用获取婚姻信息详情接口 -// await _getMarriageInformationDetail(); -// } else { -// SmartDialog.showToast(response.data.message); -// } -// } catch (e) { -// // 获取用户信息失败不影响登录流程 -// SmartDialog.showToast('获取用户信息失败'); -// } -// } -// -// // 获取用户婚姻信息详情 -// Future _getMarriageInformationDetail() async { -// try { -// final response = await _userApi.getMarriageInformationDetail(); -// if (response.data.isSuccess) { -// // 检查data是否为null或者是空对象 -// if(response.data.data == null){ -// //跳转到完善信息 -// SmartDialog.showToast('转到完善信息'); -// // 导航到完善信息页面 -// Get.offAll(() => UserInfoPage()); -// }else{ -// Get.offAll(MainPage()); -// } -// } else { -// // 获取婚姻信息失败不影响登录流程 -// } -// } catch (e) { -// // 获取婚姻信息失败不影响登录流程 -// print('获取婚姻信息异常: $e'); -// } -// } -// } \ No newline at end of file diff --git a/lib/pages/mine/mine_page.dart b/lib/pages/mine/mine_page.dart index c9df4aa..7e1ed7d 100644 --- a/lib/pages/mine/mine_page.dart +++ b/lib/pages/mine/mine_page.dart @@ -7,9 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; -import '../../extension/router_service.dart'; import '../discover/visitor_list_page.dart'; class MinePage extends StatefulWidget { diff --git a/lib/pages/mine/user_info_page.dart b/lib/pages/mine/user_info_page.dart index 50ed079..cbb7903 100644 --- a/lib/pages/mine/user_info_page.dart +++ b/lib/pages/mine/user_info_page.dart @@ -1,42 +1,74 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:dating_touchme_app/generated/assets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:dating_touchme_app/controller/mine/user_info_controller.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; class UserInfoPage extends StatelessWidget { - const UserInfoPage({Key? key}) : super(key: key); - + UserInfoPage({super.key}); // 显示头像选择选项 - void _showAvatarOptions(UserInfoController controller) { - showCupertinoModalPopup( - context: Get.context!, - builder: (context) => CupertinoActionSheet( - title: const Text('选择头像'), - actions: [ - CupertinoActionSheetAction( - child: const Text('拍照'), - onPressed: () async { - Navigator.pop(context); - await controller.handleCameraCapture(); - }, - ), - CupertinoActionSheetAction( - child: const Text('从相册选择'), - onPressed: () async { - Navigator.pop(context); - await controller.handleGallerySelection(); - }, - ), - ], - cancelButton: CupertinoActionSheetAction( - child: const Text('取消'), - isDestructiveAction: true, - onPressed: () { - Navigator.pop(context); - }, - ), - ), + void _showAvatarPopup(UserInfoController controller){ + Navigator.of(Get.context!).push( + TDSlidePopupRoute( + slideTransitionFrom: SlideTransitionFrom.bottom, + builder: (context) { + return Container( + // color: TDTheme.of(context).bgColorContainer, + height: 490, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(12.0), + topRight: Radius.circular(12.0), + ), + ), + child: Column( + children: [ + const SizedBox(height: 4), + CachedNetworkImage(imageUrl: 'https://dating-agency-prod.oss-cn-shenzhen.aliyuncs.com/1A437A945667.jpg', width: 375, height: 314), + const TDDivider(), + TDCell( + arrow: false, + titleWidget: Center( + child: Text('拍照', style: TextStyle(fontSize: 16.w, color: const Color.fromRGBO(51, 51, 51, 1))), + ), + onClick: (cell) async{ + Navigator.pop(context); + await controller.handleCameraCapture(); + }, + ), + const TDDivider(), + TDCell( + arrow: false, + titleWidget: Center( + child: Text('从相册选择'), + ), + onClick: (cell) async{ + Navigator.pop(context); + await controller.handleGallerySelection(); + }, + ), + Expanded( + child: Container( + color: Color(0xFFF3F3F3), + ), + ), + TDCell( + arrow: false, + titleWidget: Center( + child: Text('取消'), + ), + onClick: (cell){ + Navigator.pop(context); + }, + ), + ], + ), + ); + }), ); } @@ -228,7 +260,7 @@ class UserInfoPage extends StatelessWidget { title: const Text( '完善信息', style: TextStyle( - fontSize: 20, + fontSize: 16, fontWeight: FontWeight.bold, color: Color.fromRGBO(51, 51, 51, 1), ), @@ -255,10 +287,9 @@ class UserInfoPage extends StatelessWidget { child: Column( children: [ const SizedBox(height: 25), - // 头像 GestureDetector( - onTap: () => _showAvatarOptions(controller), + onTap: () => _showAvatarPopup(controller), child: Stack( children: [ Container( @@ -369,7 +400,7 @@ class UserInfoPage extends StatelessWidget { ), ], ), - const SizedBox(height: 25), + const SizedBox(height: 20), // 昵称 const Align( @@ -408,7 +439,7 @@ class UserInfoPage extends StatelessWidget { ], ), ), - const SizedBox(height: 25), + const SizedBox(height: 20), // 出生日期 const Align( @@ -452,7 +483,7 @@ class UserInfoPage extends StatelessWidget { ), ), ), - const SizedBox(height: 25), + const SizedBox(height: 20), // 学历 const Align( @@ -496,7 +527,7 @@ class UserInfoPage extends StatelessWidget { ), ), ), - const SizedBox(height: 25), + const SizedBox(height: 20), // 邀请码 const Align( @@ -528,7 +559,7 @@ class UserInfoPage extends StatelessWidget { ), ), ), - const SizedBox(height: 50), + const SizedBox(height: 24), // 开始交友按钮 SizedBox( @@ -562,7 +593,7 @@ class UserInfoPage extends StatelessWidget { ), ), ), - const SizedBox(height: 30), + const SizedBox(height: 20), ], ), ),