import 'package:EasyDartModule/EasyDartModule.dart'; import 'package:dio/dio.dart' as dio; import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get_storage/get_storage.dart'; import 'package:img_picker/img_picker.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:vbvs_app/common/color/ServiceConstant.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/DailyLogUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/device/body_device_controller.dart'; import 'package:vbvs_app/controller/home/home_controller.dart'; import 'package:vbvs_app/controller/login/login_controller.dart'; import 'package:vbvs_app/controller/message/message_controller.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/enum/APPPackageType.dart'; import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/model/user_data.dart'; import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart'; part 'user_info_controller.g.dart'; @JsonSerializable() class UserInfoModel { int? message = 0; //消息数量 UserModel? user; //用户信息 String? token; //token值 String? runSystem; //运行系统 String? phoneVersion; //手机版本 String? deviceId; //手机唯一 String? deviceModel; //设备可见型号(如 "iPhone","iPad") String? appVersion; //app版本信息 @JsonKey(ignore: true) // Session? superbase_session; @JsonKey(ignore: true) // User? superbase_user; String? img_bucket = 'user'; int? login = 0; //0未登录 1 登录 int? deviceBindNum = 0; //绑定设备数量 int? loginPhone = 0; //0 本机号码 1其他手机号 // String? nickname; //修改昵称 // String? avatar; //修改头像地址 bool isProgrammaticPop = false; // 标记变量 UserInfoModel(); static UserInfoModel fromJson(Map json) => _$UserInfoModelFromJson(json); Map toJson() => _$UserInfoModelToJson(this); } class UserInfoController extends GetControllerEx { // 初始化实例 UserInfoController() { attr = GetModel(UserInfoModel()).obs; } RxDouble textHalfWidth = 0.0.obs; List device_bind_status = []; int device_bind_flag = 0; //0。未初始化 1.已初始化 int initLocationpermission = 0; //未初始化 FluwxCancelable? fluwxCancelable; final Fluwx fluwx = Fluwx(); Future uploadImg() async { EasyDartModule.logger.info("请求上传图片"); DailyLogUtils.writeLog("请求上传图片"); final ImagePicker picker = ImagePicker(); final XFile? image = await picker.pickImage(source: ImageSource.gallery); try { ApiResponse apiResponse = ApiResponse(code: -1, msg: "头像上传失败".tr); if (image != null) { int fileSize = await image.length(); // 获取图片大小,单位为字节 if (fileSize > 1048576 * 5) { apiResponse.msg = "头像限制".tr; return apiResponse; } String serviceAddress = ServiceConstant.service_address; String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.upload_file; String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; String? language = ""; if (languageController.selectLanguage != null) { language = languageController.selectLanguage.value!.language_code; } if (language != null && language.isNotEmpty) { if (queryUrl.contains("?")) { queryUrl += "&lang=$language"; } else { queryUrl += "?lang=$language"; } } var formData = dio.FormData.fromMap({ "type": 1, "file": await dio.MultipartFile.fromFile( image.path, // 确保 image 是 File 类型 filename: image.path.split('/').last, ), }); var response = await EasyDartModule.dio.post(queryUrl, data: formData); if (response != null) { var responseData = response.data is String ? jsonDecode(response.data) : response.data; ApiResponse res = ApiResponse.fromJson(responseData, (object) => object); MyUtils.formatResponse(res, "上传成功".tr, "头像上传失败".tr); model.user!.tmpHead = res.data['path']; updateAll(); return res; } else { return ApiResponse(code: -1, msg: "服务器失败".tr); } } else { apiResponse.msg = "未选择图片".tr; return apiResponse; } } catch (e) { EasyDartModule.logger.error("上传图片失败->$e"); DailyLogUtils.writeError("上传图片失败->$e"); return ApiResponse(code: -1, msg: "服务器失败".tr); } } //更新用户信息 Future updateData({ String? phone, String? email, String? code, }) async { EasyDartModule.logger.info("更新用户资料"); DailyLogUtils.writeLog("更新用户资料"); try { LoginController loginController = Get.find(); ApiResponse apiResponse = ApiResponse(code: -1, msg: "保存失败".tr); UserModel user = model.user!; final bool hasContactUpdate = (phone != null && phone.isNotEmpty) || (email != null && email.isNotEmpty); /// 只有在【没有更新 phone/email】时,才要求昵称不为空 if (!hasContactUpdate && (user.tmpNickName == null || user.tmpNickName!.isEmpty)) { apiResponse.msg = "昵称为空".tr; return apiResponse; } if ((phone != null && phone.isNotEmpty) || (email != null && email.isNotEmpty)) { if (loginController.model.updateCode == null || loginController.model.updateCode!.isEmpty) { apiResponse.msg = "请输验证码".tr; return apiResponse; } } String serviceAddress = ServiceConstant.service_address; String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.user_info; String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; String? language = ""; if (AppConstants().ent_type == APPPackageType.MHT.code) { if (mhLanguageController.selectLanguage != null) { language = mhLanguageController.selectLanguage.value!.language_code; } } else { if (languageController.selectLanguage != null) { language = languageController.selectLanguage.value!.language_code; } } if (language != null && language.isNotEmpty) { if (queryUrl.contains("?")) { queryUrl += "&lang=$language"; } else { queryUrl += "?lang=$language"; } } final data = { "nickName": user.tmpNickName, if (user.tmpHead != null && user.tmpHead!.isNotEmpty) "avatar": user.tmpHead, if (phone != null && phone.isNotEmpty) "phone": phone, if (email != null && email.isNotEmpty) "email": email, if (loginController.model.updateCode != null && loginController.model.updateCode!.isNotEmpty) "verify": loginController.model.updateCode, if (code != null && code.isNotEmpty) "wxCode": code, if (code != null && code.isNotEmpty) "khCode": "theh", "merge": true, }; var response = await EasyDartModule.dio.put(queryUrl, data: jsonEncode(data)); if (apiResponse != null) { var responseData = response.data is String ? jsonDecode(response.data) : response.data; ApiResponse res = ApiResponse.fromJson(responseData, (object) => object); MyUtils.formatResponse(res, "保存成功".tr, "保存失败".tr); await getUserInfo(); model.user!.tmpNickName = model.user!.nick_name; model.user!.tmpHead = model.user!.avatar; updateAll(); return res; } else { return ApiResponse(code: -1, msg: "服务器失败".tr); } } catch (e) { EasyDartModule.logger.info("更新用户资料失败->$e"); DailyLogUtils.writeLog("更新用户资料失败->$e"); return ApiResponse(code: -1, msg: "服务器失败".tr); } } //查询用户信息 Future getUserInfo() async { EasyDartModule.logger.info("查询用户资料"); DailyLogUtils.writeLog("查询用户资料"); try { ApiResponse apiResponse = ApiResponse(code: -1, msg: "查询失败".tr); String serviceAddress = ServiceConstant.service_address; String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.user_info; String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; String? language = ""; if (AppConstants().ent_type == APPPackageType.MHT.code) { if (mhLanguageController.selectLanguage != null) { language = mhLanguageController.selectLanguage.value!.language_code; } } else { if (languageController.selectLanguage != null) { language = languageController.selectLanguage.value!.language_code; } } if (language != null && language.isNotEmpty) { if (queryUrl.contains("?")) { queryUrl += "&lang=$language"; } else { queryUrl += "?lang=$language"; } } var response = await EasyDartModule.dio.get(queryUrl); if (response != null) { var responseData = response.data is String ? jsonDecode(response.data) : response.data; ApiResponse res = ApiResponse.fromJson(responseData, (object) => object); MyUtils.formatResponse(apiResponse, "保存成功".tr, "保存失败".tr); if (res.code == HttpStatusCodes.ok) { UserInfoController userInfoController = Get.find(); if (res.data['test'] != null && res.data['test'] == true) { AppConstants.is_test_account = true; } else { AppConstants.is_test_account = false; } userInfoController.model.user = UserModel.fromJson(res.data); final box = GetStorage(); box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 userInfoController.updateAll(); } return res; } else { return ApiResponse(code: -1, msg: "失败".tr); } } catch (e) { EasyDartModule.logger.info("更新用户资料失败->$e"); DailyLogUtils.writeLog("更新用户资料失败->$e"); return ApiResponse(code: -1, msg: "服务器失败".tr); } } ApiResponse logOut() { updateAppSystemNotify(false); int code = AppConstants().ent_type; if (APPPackageType.MHT.code == code) { MHTHomeController mhtHomeController = Get.find(); mhtHomeController.personnelList.value = []; } ApiResponse apiResponse = ApiResponse(code: 1, msg: "退出成功".tr); EasyDartModule.logger.info("退出登录"); DailyLogUtils.writeLog("退出登录"); model.login = 0; EasyDartModule.dio.token = null; final box = GetStorage(); box.remove("user"); box.remove("token"); BodyDeviceController bodyDeviceController = Get.find(); bodyDeviceController.bindDeviceNum.value = 0; HomeController homeController = Get.find(); homeController.sleepNum.value = 0; LoginController loginController = Get.find(); loginController.model.register_agree = null; bodyDeviceController.sleepReportData.value = {}; MessageController messageController = Get.find(); messageController.model.body_message_read = 0; messageController.model.system_message_read = 0; CountdownController countdownController = Get.find(); countdownController.countdown.value = 0; return apiResponse; } ApiResponse deleteAccount() { MHTHomeController mhtHomeController = Get.find(); ApiResponse apiResponse = ApiResponse(code: 1, msg: "注销成功".tr); EasyDartModule.logger.info("注销账号"); DailyLogUtils.writeLog("注销账号"); model.login = 0; EasyDartModule.dio.token = null; final box = GetStorage(); box.remove("user"); box.remove("token"); BodyDeviceController bodyDeviceController = Get.find(); bodyDeviceController.bindDeviceNum.value = 0; HomeController homeController = Get.find(); homeController.sleepNum.value = 0; LoginController loginController = Get.find(); loginController.model.register_agree = null; bodyDeviceController.sleepReportData.value = {}; MessageController messageController = Get.find(); messageController.model.body_message_read = 0; messageController.model.system_message_read = 0; CountdownController countdownController = Get.find(); countdownController.countdown.value = 0; mhtHomeController.personnelList.value = []; return apiResponse; } //解除微信绑定 unBindWx(BuildContext context) async { String serviceAddress = ServiceConstant.service_address; String serviceName = ServiceConstant.server_service; String serviceApi = ServiceConstant.user_info; String queryUrl = "${serviceAddress}${serviceName}${serviceApi}"; try { final data = { "wxCode": "", "khCode": "", "merge": true, }; final res = await requestWithLog( logTitle: "解除微信绑定", method: MyHttpMethod.put, queryUrl: queryUrl, data: data, onSuccess: (res) { TopSlideNotification.show( context, text: res.msg!, ); }, onFailure: (res) { TopSlideNotification.show( context, text: res.msg!, textColor: themeController.currentColor.sc9, ); }, ); } catch (e) { ef.log("微信解绑失败-》$e"); } } }