From 77152e5d8179a121d98af2677f5362492ad380db Mon Sep 17 00:00:00 2001 From: czz <862977248@qq.com> Date: Sat, 7 Jun 2025 11:44:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=89=E6=8B=A9=E5=99=A8?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/mhlangs/en_US.json | 15 + .../mh_zh_CN.json => mhlangs/zh_CN.json} | 0 lib/common/util/MyUtils.dart | 3 +- .../mh_controller/mh_language_controller.dart | 92 +++++ .../mh_language_controller.g.dart | 22 ++ .../mh_controller/muser_info_controller.dart | 317 +++++++++++------- .../setting/language/language_controller.dart | 1 + lib/main.dart | 57 ++++ lib/pages/common/selectDialog.dart | 25 +- lib/pages/mh_page/LanguagePage.dart | 64 ++-- lib/pages/mh_page/bluetooth.dart | 2 +- lib/pages/mh_page/edit_address_page.dart | 3 +- lib/pages/mh_page/edit_userinfo_page.dart | 119 ++++--- lib/pages/mh_page/new_mine_page.dart | 2 +- lib/pages/mh_page/new_settingPage.dart | 39 ++- lib/pages/mh_page/people_info.dart | 2 +- 16 files changed, 503 insertions(+), 260 deletions(-) create mode 100644 assets/mhlangs/en_US.json rename assets/{langs/mh_zh_CN.json => mhlangs/zh_CN.json} (100%) create mode 100644 lib/controller/mh_controller/mh_language_controller.dart create mode 100644 lib/controller/mh_controller/mh_language_controller.g.dart diff --git a/assets/mhlangs/en_US.json b/assets/mhlangs/en_US.json new file mode 100644 index 0000000..af2ff88 --- /dev/null +++ b/assets/mhlangs/en_US.json @@ -0,0 +1,15 @@ +{ + "语言名称": "English", + "菜单": { + "首页": "Home", + "报告": "Reports", + "控制": "Control", + "我的": "Mine" + }, + "标题": { + "智能床名称": "Smart Bed Name", + "设置": "Settings", + "详情": "Details", + "人员资料": "User Info" + } +} \ No newline at end of file diff --git a/assets/langs/mh_zh_CN.json b/assets/mhlangs/zh_CN.json similarity index 100% rename from assets/langs/mh_zh_CN.json rename to assets/mhlangs/zh_CN.json diff --git a/lib/common/util/MyUtils.dart b/lib/common/util/MyUtils.dart index a5d4098..628ea00 100644 --- a/lib/common/util/MyUtils.dart +++ b/lib/common/util/MyUtils.dart @@ -8,6 +8,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:vbvs_app/common/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; +import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart'; import 'package:vbvs_app/controller/setting/language/language_controller.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/language/AppLanguage.dart'; @@ -15,6 +16,7 @@ import 'package:vbvs_app/model/api_response.dart'; ThemeController themeController = Get.find(); LanguageController languageController = Get.find(); +MHLanguageController mhLanguageController = Get.find(); class MyUtils { static String formatDate(DateTime dateTime) { @@ -393,7 +395,6 @@ var returnIconButtomNew = ClickableContainer( // ), // ); - var returnIconButtomAddCallback = ( VoidCallback? returnCallBack, { bool enableBack = true, diff --git a/lib/controller/mh_controller/mh_language_controller.dart b/lib/controller/mh_controller/mh_language_controller.dart new file mode 100644 index 0000000..c588611 --- /dev/null +++ b/lib/controller/mh_controller/mh_language_controller.dart @@ -0,0 +1,92 @@ +import 'dart:convert'; + +import 'package:ef/ef.dart'; +import 'package:flutter/services.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:path/path.dart' as path; +import 'package:vbvs_app/language/AppLanguage.dart'; + +part 'mh_language_controller.g.dart'; // 由json_serializable自动生成的部分 + +@JsonSerializable() +class MHLanguageModel { + String? filename; // 语言文件名称 + String? language_name; // 语言名称 + bool? selected; // 是否选中 + String? language_code; //语言简称 + + MHLanguageModel(); + + factory MHLanguageModel.fromJson(Map json) { + try { + return _$LanguageModelFromJson(json); + } catch (e) { + return MHLanguageModel(); // 或者返回一个带有错误信息的特定实例 + } + } + + Map toJson() => _$LanguageModelToJson(this); +} + +class MHLanguageController extends GetControllerEx { + LanguageController() { + attr = GetModel(MHLanguageModel()).obs; + } + + RxList languageList = [].obs; + var selectLanguage = Rx(null); + Future initLanuageList() async { + try { + String currentLanguageCode = AppLanguage().getCurrentLanguageCode(); + languageList.clear(); // 清空现有列表 + + // 1. 获取 assets/langs/ 目录下所有 .json 文件 + final manifestContent = await rootBundle.loadString('AssetManifest.json'); + final Map manifestMap = json.decode(manifestContent); + + // 筛选出 langs 目录下的 .json 文件 + final langFiles = manifestMap.keys + .where((String key) => + key.startsWith('assets/mhlangs/') && key.endsWith('.json')) + .toList(); + + // 2. 遍历所有语言文件 + for (final filePath in langFiles) { + try { + // 加载 JSON 文件内容 + final jsonString = await rootBundle.loadString(filePath); + final jsonMap = json.decode(jsonString); + + // 提取语言名称(假设 JSON 文件中有 "语言名称" 字段) + final languageName = jsonMap['语言名称'] as String? ?? + path.basenameWithoutExtension(filePath); + + // 3. 构造 LanguageModel 并添加到列表 + final languageModel = MHLanguageModel() + ..filename = path.basename(filePath) // 如 "zh-CN.json" + ..language_name = languageName // 如 "简体中文" + ..selected = + (path.basename(filePath) == '$currentLanguageCode.json') + ..language_code = + path.basenameWithoutExtension(filePath); // 如 "zh-CN" + if (languageModel.selected == true) { + selectLanguage.value = languageModel; + } + languageList.add(languageModel); + } catch (e) { + print('加载语言文件失败: $filePath, 错误: $e'); + } + } + print("object"); + } catch (e) { + print('初始化语言列表失败: $e'); + // 可选:添加默认语言(如英文)作为后备 + languageList.add( + MHLanguageModel() + ..filename = 'en-US.json' + ..language_name = 'English' + ..selected = true, // 默认语言为选中状态 + ); + } + } +} diff --git a/lib/controller/mh_controller/mh_language_controller.g.dart b/lib/controller/mh_controller/mh_language_controller.g.dart new file mode 100644 index 0000000..5386c92 --- /dev/null +++ b/lib/controller/mh_controller/mh_language_controller.g.dart @@ -0,0 +1,22 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'mh_language_controller.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +MHLanguageModel _$LanguageModelFromJson(Map json) => + MHLanguageModel() + ..filename = json['filename'] as String? + ..language_name = json['language_name'] as String? + ..selected = json['selected'] as bool? + ..language_code = json['language_code'] as String?; + +Map _$LanguageModelToJson(MHLanguageModel instance) => + { + 'filename': instance.filename, + 'language_name': instance.language_name, + 'selected': instance.selected, + 'language_code': instance.language_code, + }; diff --git a/lib/controller/mh_controller/muser_info_controller.dart b/lib/controller/mh_controller/muser_info_controller.dart index 4b2e283..d5d3f48 100644 --- a/lib/controller/mh_controller/muser_info_controller.dart +++ b/lib/controller/mh_controller/muser_info_controller.dart @@ -1,12 +1,17 @@ -import 'dart:io'; - +import 'dart:convert'; +import 'package:EasyDartModule/EasyDartModule.dart'; import 'package:ef/ef.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:path/path.dart' as p; - +import 'package:dio/dio.dart' as dio; +import 'package:vbvs_app/common/color/ServiceConstant.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/controller/mh_controller/user_data.dart'; +import 'package:vbvs_app/model/api_response.dart'; part 'muser_info_controller.g.dart'; @JsonSerializable() @@ -43,135 +48,187 @@ class MUserInfoController extends GetControllerEx { attr = GetModel(MUserInfoModel()).obs; } - // Future uploadImg() async { - // final ImagePicker picker = ImagePicker(); - // final XFile? image = await picker.pickImage(source: ImageSource.gallery); - // final user = Supabase.instance.client.auth.currentUser; - // try { - // if (image != null) { - // int fileSize = await image.length(); // 获取图片大小,单位为字节 - // if (fileSize > 1048576) { - // // 1 MB = 1024 * 1024 bytes - // showToast("头像图片不能超过1MB"); - // return; - // } - // final filePath = image.path; // 获取文件路径 - // final fileExtension = p.extension(filePath); // 获取文件扩展名,包括点(.) - // // 获取当前日期并格式化为 yyyy-MM-dd - // final String folderName = - // DateFormat('yyyy-MM-dd').format(DateTime.now()); - // final file = File(image.path); - // // 构造文件路径,文件会被上传到 record_img 文件夹下的当天日期文件夹 - // var response = await ef.client.storage - // .from(model.img_bucket!) - // .upload('$folderName/${Uuid().v4()}$fileExtension', file); - // if (response != null) { - // String publicUrl = - // ef.client.storage.from(model.img_bucket!).getPublicUrl(response); + List device_bind_status = []; + int device_bind_flag = 0; //0。未初始化 1.已初始化 - // print('文件上传成功: $response'); - // print('文件上传成功: $publicUrl'); - // String prefixToRemove = 'user/'; - // // model.user!.tmpHead = model.user!.head; - // model.user!.tmpHead = publicUrl.startsWith(prefixToRemove) - // ? response.substring(prefixToRemove.length) - // : response; - // updateAll(); - // } - // print('/$model.img_bucket'); - // } else { - // print('未选择图片'); - // return; - // } - // } catch (e) { - // print('上传失败: $e'); - // } - // } + 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(apiResponse, "我的.上传成功".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); + } + } - // updateData() { - // UserInfoController controller = Get.find(); - // UserRepository userRepository = UserRepository(); - // return userRepository.updateInfo(controller.model.user!); - // } + //更新用户信息 + Future updateData() async { + EasyDartModule.logger.info("更新用户资料"); + DailyLogUtils.writeLog("更新用户资料"); + try { + ApiResponse apiResponse = ApiResponse(code: -1, msg: "我的.保存失败".tr); + UserModel user = model.user!; + if (user.tmpNickName == null || user.tmpNickName!.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 (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, + }; - // autoLogin(String token) async { - // final UserInfoController userInfoController = Get.find(); - // try { - // final Map requestBody = { - // 'token': token, - // }; + 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); + return res; + } else { + return ApiResponse(code: -1, msg: "服务器.失败".tr); + } + } catch (e) { + EasyDartModule.logger.info("更新用户资料失败->$e"); + DailyLogUtils.writeLog("更新用户资料失败->$e"); + return ApiResponse(code: -1, msg: "服务器.失败".tr); + } + } - // var response = await ApiService.request - // .post("/api/auth/account/info/autoLogin", data: requestBody); - // if (response.statusCode == 200) { - // if (response.data != null) { - // ApiResponse apiResponse = ApiResponse.fromJson( - // response.data, - // (json) => UserModel.fromJson(json as Map)); - // if (apiResponse.code == HttpStatusCodes.ok) { - // userInfoController.model.user = apiResponse.data; - // userInfoController.model.token = response.headers['token']!.first; - // userInfoController.model.login = 1; + //查询用户信息 + 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 (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) { + MUserInfoController userInfoController = Get.find(); + userInfoController.model.user = UserModel.fromJson(res.data); + final box = GetStorage(); + box.write('user', userInfoController.model.user!.toJson()); // 存储用户信息 + userInfoController.updateAll(); + } + return apiResponse; + } else { + return ApiResponse(code: -1, msg: "服务器.失败".tr); + } + } catch (e) { + EasyDartModule.logger.info("更新用户资料失败->$e"); + DailyLogUtils.writeLog("更新用户资料失败->$e"); + return ApiResponse(code: -1, msg: "服务器.失败".tr); + } + } - // final box = GetStorage(); - // box.write( - // 'user', userInfoController.model.user!.toJson()); // 存储用户信息 - // box.write('token', userInfoController.model.token); // 存储 token - // String efPd = await getValueBySysConfigKey(CommonVariables.efKey); - // if (efPd != null && efPd.isNotEmpty) { - // await initDataEf(key: efPd); - // } else { - // print("efPD为空,无法初始化"); - // // 清除本地缓存 - // final box = GetStorage(); - // box.remove('user'); - // box.remove('token'); - // userInfoController.model.token = null; - // userInfoController.model.user = null; - // // 设置成未登录 - // userInfoController.model.login = 0; - // return; - // } - - // final AuthResponse res = await ef.client.auth.signInWithPassword( - // phone: userInfoController.model.user!.tel, - // password: userInfoController.model.user!.exp1!, - // ); - // userInfoController.model.superbase_session = res.session; - // userInfoController.model.superbase_user = res.user; - // userInfoController.updateAll(); - // // 登录成功移出网络检查监听 - // Checknetwork.subscription?.cancel(); - // } - // } - // } else { - // // 处理非 200 响应 - // print('Failed to sign in. Status code: ${response.statusCode}'); - // print('Response data: ${response.data}'); - // } - // } catch (e) { - // e.printError(); - // // 清除本地缓存 - // final box = GetStorage(); - // box.remove('user'); - // box.remove('token'); - // userInfoController.model.token = null; - // userInfoController.model.user = null; - // // 设置成未登录 - // userInfoController.model.login = 0; - // } - // } - - // // 拉起微信企业客服 - // Future openWeChatCustomerService() async { - // bool isWeChatInstalled = await fluwx.isWeChatInstalled; - // if (!isWeChatInstalled) { - // showToast("请先安装微信APP,再联系客服", color: color_error); - // return; - // } - // showToast('正在打开微信客服...', color: color_success); - // await fluwx.open( - // target: CustomerServiceChat( - // corpId: CommonVariables.wxCorpId, url: CommonVariables.wxKfUrl)); + // ApiResponse logOut() { + // 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; // } } diff --git a/lib/controller/setting/language/language_controller.dart b/lib/controller/setting/language/language_controller.dart index 088f853..f1223c7 100644 --- a/lib/controller/setting/language/language_controller.dart +++ b/lib/controller/setting/language/language_controller.dart @@ -91,4 +91,5 @@ class LanguageController extends GetControllerEx { ); } } + } diff --git a/lib/main.dart b/lib/main.dart index 632e992..57f4e67 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,6 +16,7 @@ import 'package:vbvs_app/common/color/ServiceConstant.dart'; import 'package:vbvs_app/common/util/CheckNetwork.dart'; import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; +import 'package:vbvs_app/common/util/requestWithLog.dart'; import 'package:vbvs_app/controller/date/CalendarController.dart'; import 'package:vbvs_app/controller/device/blueteeth_bind_controller.dart'; import 'package:vbvs_app/controller/device/body_device_controller.dart'; @@ -39,6 +40,7 @@ import 'package:vbvs_app/controller/mh_controller/find_password_controller.dart' import 'package:vbvs_app/controller/mh_controller/issue_controller.dart'; import 'package:vbvs_app/controller/mh_controller/issue_preview_controller.dart'; import 'package:vbvs_app/controller/mh_controller/message_controller.dart'; +import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart'; import 'package:vbvs_app/controller/mh_controller/muser_info_controller.dart'; import 'package:vbvs_app/controller/mh_controller/my_experience_list_controller.dart'; import 'package:vbvs_app/controller/mh_controller/people_info_controller.dart'; @@ -214,6 +216,59 @@ Future initLogin() async { } } +//处理绑定未完成的数据 +Future dealBindProcess() async { + UserInfoController userInfoController = Get.find(); + String serviceAddress = ServiceConstant.service_address; + String serviceName = ServiceConstant.server_service; + String serviceApi = ServiceConstant.device_list; + String queryUrl = "${serviceAddress}${serviceName}${serviceApi}?bindType=1"; + userInfoController.device_bind_status = []; + + try { + final res = await requestWithLog( + logTitle: "查询设备绑定列表", + method: MyHttpMethod.get, + queryUrl: queryUrl, + ); + + List data = res.data ?? []; + if (data.isNotEmpty) { + // 使用 Future.wait 等待所有设备的查询完成 + await Future.wait( + data.map((element) async { + String mac = element['mac']; + String type = "device_bind_status_$mac"; + String queryUrl = + "${serviceAddress}${serviceName}${ServiceConstant.user_setting}?type=${type}"; + + try { + final res = await requestWithLog( + logTitle: "查询绑定流程", + method: MyHttpMethod.get, + queryUrl: queryUrl, + ); + + if (res.data != null && res.data.isNotEmpty) { + bool celibration = res.data['celibration']; + bool person_info = res.data['person_info']; + bool wifi = res.data['wifi']; + if (!celibration || !person_info || !wifi) { + res.data['device_info'] = element; + userInfoController.device_bind_status.add(res.data); + } + } + } catch (e) { + print("查询绑定流程失败: $e"); + } + }), + ); + } + } catch (e) { + print("查询设备绑定列表失败: $e"); + } +} + class MyApp extends StatelessWidget { MyApp({super.key}); final ThemeController themeController = Get.put(ThemeController()); @@ -245,8 +300,10 @@ class MyApp extends StatelessWidget { Get.lazyPut(() => SleepingHabitController()), Get.lazyPut(() => PeopleInfoController()), Get.lazyPut(() => MainPageController()), + Get.lazyPut(() => MHLanguageController()), Get.lazyPut(() => AddressListController()), Get.lazyPut(() => AddressController()), + Get.lazyPut(() => MHLanguageController()), Get.lazyPut(() => BlueteethBindController()), Get.lazyPut(() => BookInfoController()), Get.lazyPut(() => PersonController()), diff --git a/lib/pages/common/selectDialog.dart b/lib/pages/common/selectDialog.dart index add263a..ecbd95f 100644 --- a/lib/pages/common/selectDialog.dart +++ b/lib/pages/common/selectDialog.dart @@ -224,11 +224,11 @@ Future showDateSelectionDialog(BuildContext context, ), SizedBox( height: 240.rpx, - child: Row( - children: [ - Expanded( - child: Padding( - padding: EdgeInsets.only(right: 30.rpx), + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 95.rpx), + child: Row( + children: [ + Expanded( child: getOnePickers( context, years, @@ -237,11 +237,7 @@ Future showDateSelectionDialog(BuildContext context, onChanged: (_) => updateDays(), ), ), - ), - Expanded( - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: 30.rpx), + Expanded( child: getOnePickers( context, months, @@ -250,10 +246,7 @@ Future showDateSelectionDialog(BuildContext context, onChanged: (_) => updateDays(), ), ), - ), - Expanded( - child: Padding( - padding: EdgeInsets.only(left: 30.rpx), + Expanded( child: getOnePickers( context, daysSelect, @@ -261,8 +254,8 @@ Future showDateSelectionDialog(BuildContext context, unit: "日", ), ), - ), - ], + ], + ), ), ), ], diff --git a/lib/pages/mh_page/LanguagePage.dart b/lib/pages/mh_page/LanguagePage.dart index d51684b..fd31640 100644 --- a/lib/pages/mh_page/LanguagePage.dart +++ b/lib/pages/mh_page/LanguagePage.dart @@ -3,25 +3,28 @@ import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; +import 'package:vbvs_app/controller/mh_controller/message_controller.dart'; -class LanguagePage extends StatefulWidget { - @override - _LanguagePageState createState() => _LanguagePageState(); -} +import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart'; -BoxConstraints? bodysize; -List languageList = [ - '简体中文', - '繁體中文', - 'English', -]; -final Map languageMap = { - '简体中文': 'zh_CN', - '繁體中文': 'zh_TW', - 'English': 'en_US', -}; +class LanguagePage extends GetView { +// @override +// _LanguagePageState createState() => _LanguagePageState(); +// } + MHLanguageController controller = Get.find(); + BoxConstraints? bodysize; + List languageList = [ + '简体中文', + '繁體中文', + 'English', + ]; + final Map languageMap = { + '简体中文': 'zh_CN', + '繁體中文': 'zh_TW', + 'English': 'en_US', + }; -class _LanguagePageState extends State { +// class _LanguagePageState extends State { RxBool checkboxValue = false.obs; RxString? selectLanguage = ''.obs; @override @@ -93,14 +96,13 @@ class _LanguagePageState extends State { padding: EdgeInsets.zero, shrinkWrap: true, scrollDirection: Axis.vertical, - itemCount: languageList.length, + itemCount: controller.languageList.length, itemBuilder: (BuildContext context, int index) { - return _buildItem( - context, index, languageList[index]); + return _buildItem(context, index, + controller.languageList[index]); }, ), - Container(height: bodysize!.maxHeight * 0.12) ], ), ))))), @@ -108,7 +110,7 @@ class _LanguagePageState extends State { }); } - Widget _buildItem(BuildContext context, int index, String text) { + Widget _buildItem(BuildContext context, int index, MHLanguageModel model) { return Container( // width: bodysize!.maxWidth * 1, height: bodysize!.maxHeight * 0.055, @@ -116,7 +118,7 @@ class _LanguagePageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - text, + model.language_name ?? "", style: TextStyle(color: Colors.white, fontSize: 30.rpx), ), Theme( @@ -132,15 +134,17 @@ class _LanguagePageState extends State { ), child: Obx(() { return Checkbox( - value: selectLanguage!.value == languageMap[text], + value: controller.selectLanguage.value?.language_code == + model.language_code, onChanged: (newValue) async { - if (newValue!) { - selectLanguage!.value = languageMap[ - text]!; // Set selectLanguage to the current text value - } else { - selectLanguage!.value = - ''; // Clear selection if unchecked - } + controller.selectLanguage.value = model; + // if (newValue!) { + // selectLanguage!.value = languageMap[ + // text]!; // Set selectLanguage to the current text value + // } else { + // selectLanguage!.value = + // ''; // Clear selection if unchecked + // } }, shape: CircleBorder(), side: BorderSide( diff --git a/lib/pages/mh_page/bluetooth.dart b/lib/pages/mh_page/bluetooth.dart index 7ccc51c..042071b 100644 --- a/lib/pages/mh_page/bluetooth.dart +++ b/lib/pages/mh_page/bluetooth.dart @@ -132,7 +132,7 @@ class _BluetoothState extends State { _buildMenuButton( context, '详情', "/devicePeopleInfo"), _buildMenuButton( - context, '人员资料', "/devicePeopleInfo"), + context, '人员资料', "/peopleInfoPage"), _buildMenuButton( context, '房间选择', "/roomPickerPage"), _buildMenuButton( diff --git a/lib/pages/mh_page/edit_address_page.dart b/lib/pages/mh_page/edit_address_page.dart index df29133..461cd77 100644 --- a/lib/pages/mh_page/edit_address_page.dart +++ b/lib/pages/mh_page/edit_address_page.dart @@ -709,7 +709,8 @@ class EditAddressPage extends GetView children: [ InkWell( // onTap: () { - // CityPicker.show( + // CityPicker + // .show( // context: // context, // cityPickerListener: diff --git a/lib/pages/mh_page/edit_userinfo_page.dart b/lib/pages/mh_page/edit_userinfo_page.dart index fbd5e83..7820460 100644 --- a/lib/pages/mh_page/edit_userinfo_page.dart +++ b/lib/pages/mh_page/edit_userinfo_page.dart @@ -1,26 +1,26 @@ import 'package:ef/base/widget/flutterflow/FlutterFlowTheme.dart'; import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; - +import 'package:EasyDartModule/EasyDartModule.dart' as edm; import 'package:get/get.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/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; +import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; +import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; +import 'package:vbvs_app/model/api_response.dart'; import '../../controller/mh_controller/muser_info_controller.dart'; class EditUserInfoPage extends GetView { final scaffoldKey = GlobalKey(); - // EditUserInfoPage() { - // UserInfoController controller = Get.find(); - // controller.model.user!.tmpHead = controller.model.user!.head; - // } - MUserInfoController controller = Get.find(); - @override Widget build(BuildContext context) { // UserInfoController controller = Get.find(); + MUserInfoController userInfoController = Get.find(); return GestureDetector( onTap: () => FocusScope.of(context).unfocus(), child: Container( @@ -118,8 +118,25 @@ class EditUserInfoPage extends GetView { ), ), ), - Padding( - padding: EdgeInsets.only(top: 44.rpx), + ClickableContainer( + backgroundColor: Colors.transparent, + highlightColor: Colors.transparent, + padding: EdgeInsets.only(top: 44.rpx, bottom: 44.rpx), + onTap: () async { + edm.EasyDartModule.logger + .info("${userInfoController.model.user!}点击上传头像"); + DailyLogUtils.writeLog( + "${userInfoController.model.user!}点击上传头像"); + ApiResponse apiResponse = + await userInfoController.uploadImg(); + TopSlideNotification.show( + context, + text: apiResponse.msg!, + textColor: apiResponse.code == HttpStatusCodes.ok + ? themeController.currentColor.sc2 + : themeController.currentColor.sc9, + ); + }, child: Text( '点击更换头像', style: @@ -127,8 +144,7 @@ class EditUserInfoPage extends GetView { ), ), Padding( - padding: - EdgeInsets.fromLTRB(60.rpx, 122.rpx, 60.rpx, 0.rpx), + padding: EdgeInsets.fromLTRB(60.rpx, 78.rpx, 60.rpx, 0.rpx), child: Container( width: double.infinity, height: 88.rpx, @@ -143,7 +159,7 @@ class EditUserInfoPage extends GetView { alignment: Alignment(0, 0), child: TextField( obscureText: false, - keyboardType: TextInputType.number, + keyboardType: TextInputType.text, textInputAction: TextInputAction.done, textAlign: TextAlign.center, style: TextStyle(fontSize: 30.rpx, color: Colors.white), @@ -153,7 +169,7 @@ class EditUserInfoPage extends GetView { hintText: "请输入昵称", hintStyle: TextStyle(color: Colors.white), border: InputBorder.none, - contentPadding: EdgeInsets.all(0)), + contentPadding: EdgeInsets.only(bottom: 10.rpx)), onChanged: (value) { controller.model.user?.nickName = value; controller.updateAll(); @@ -180,53 +196,32 @@ class EditUserInfoPage extends GetView { )); } - // Widget getImageWidget(BuildContext context) { - // try { - // UserInfoController controller = Get.find(); - - // var head = controller.model.user!.tmpHead; - // return InkWell( - // onTap: () { - // controller.uploadImg(); - // }, - // child: Row( - // children: [ - // Container( - // width: 50, - // height: 50, - // decoration: BoxDecoration( - // color: FlutterFlowTheme.of(context).secondaryBackground, - // ), - // child: Container( - // width: 120, - // height: 120, - // clipBehavior: Clip.antiAlias, - // decoration: BoxDecoration( - // shape: BoxShape.circle, - // ), - // child: head == null || head.isEmpty - // ? Image.asset( - // 'assets/images/avatar.png', - // fit: BoxFit.cover, - // ) - // : Image.network( - // "${getStorageResourceUrl(head)}", - // fit: BoxFit.cover, - // ), - // ), - // ), - // SizedBox(width: 10), - // Icon( - // Icons.arrow_forward_ios, - // color: Color(0xFF373737), - // size: 12, - // ), - // ], - // ), - // ); - // } catch (e) { - // print(e); - // } - // return Container(); - // } + Widget getImageWidget(BuildContext context) { + try { + MUserInfoController controller = Get.find(); + var head = controller.model.user!.tmpHead; + return Container( + width: 200.rpx, + height: 200.rpx, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + shape: BoxShape.circle, + ), + child: head == null || head.isEmpty + ? Image.asset( + 'assets/img/avatar.png', + fit: BoxFit.cover, + ) + : Image.network( + head, + fit: BoxFit.cover, + ), + ), + ); + } catch (e) { + print(e); + } + return Container(); + } } diff --git a/lib/pages/mh_page/new_mine_page.dart b/lib/pages/mh_page/new_mine_page.dart index cab2fa7..f7c5980 100644 --- a/lib/pages/mh_page/new_mine_page.dart +++ b/lib/pages/mh_page/new_mine_page.dart @@ -107,7 +107,7 @@ class _MinePageState extends State { highlightColor: Colors.transparent, padding: EdgeInsets.only(right: 11.rpx), onTap: () { - Get.toNamed("/peopleInfoPage"); + }, child: Container( height: 42.rpx, diff --git a/lib/pages/mh_page/new_settingPage.dart b/lib/pages/mh_page/new_settingPage.dart index 1906e4f..6cc770d 100644 --- a/lib/pages/mh_page/new_settingPage.dart +++ b/lib/pages/mh_page/new_settingPage.dart @@ -8,6 +8,7 @@ import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; +import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart'; class SettingPage extends StatefulWidget { @override @@ -15,6 +16,13 @@ class SettingPage extends StatefulWidget { } class _SettingPageState extends State { + MHLanguageController languageController = Get.find(); + @override + void initState() { + languageController.initLanuageList(); + super.initState(); + } + @override Widget build(BuildContext context) { return LayoutBuilder(builder: (context, bodySize) { @@ -247,9 +255,10 @@ class _SettingPageState extends State { Obx(() { return Text( languageController - .selectLanguage - .value! - .language_name!, + .selectLanguage + .value + ?.language_name ?? + '简体中文', style: FlutterFlowTheme.of( context) .bodyMedium @@ -263,16 +272,15 @@ class _SettingPageState extends State { ), ); }), - - // SvgPicture.asset( - // 'assets/img/icon/arrow_right.svg', - // width: 8.rpx, - // height: 15 - // .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 - // color: themeController - // .currentColor.sc3, - // ), - ].divide(SizedBox(width: 28.rpx)), + SvgPicture.asset( + 'assets/img/icon/arrow_right.svg', + width: 8.rpx, + height: 15 + .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 + color: themeController + .currentColor.sc3, + ), + ].divide(SizedBox(width: 22.rpx)), ), ], ), @@ -286,10 +294,7 @@ class _SettingPageState extends State { .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), - onTap: () { - print('点击了容器'); - Get.toNamed("/aboutUsPage"); - }, + onTap: () {}, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( diff --git a/lib/pages/mh_page/people_info.dart b/lib/pages/mh_page/people_info.dart index 376d28d..d83908a 100644 --- a/lib/pages/mh_page/people_info.dart +++ b/lib/pages/mh_page/people_info.dart @@ -11,6 +11,7 @@ import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/mh_controller/people_info_controller.dart'; + import 'package:vbvs_app/pages/common/selectDialog.dart'; class PeopleInfoPage extends StatefulWidget { @@ -269,7 +270,6 @@ class _PeopleInfoState extends State { ), ), getLine(), - Container( width: double.infinity, height: MediaQuery.sizeOf(context).height *