更新城市选择语言

This commit is contained in:
wyf
2025-12-17 17:24:00 +08:00
parent 0ad6a1e326
commit 8e7411cf92
9 changed files with 309 additions and 177 deletions

View File

@@ -634,5 +634,9 @@
"正常心率窦性图": "Normal Sinus Rhythm Chart",
"窦性心律不齐图": "Sinus Arrhythmia Chart",
"持续性房颤图": " Continuous Ventricular Flutter Chart",
"阵法性房颤图": " Arrhythmia Chart"
"阵法性房颤图": " Arrhythmia Chart",
"选择城市": "Select City",
"请选择城市": "city",
"输入关键词": "Enter keywords",
"输入国家、省份或城市": "Enter country, province, or city"
}

View File

@@ -641,5 +641,9 @@
"正常心率窦性图": "正常心率窦性图",
"窦性心律不齐图": "窦性心律不齐图",
"持续性房颤图": "持续性房颤图",
"阵法性房颤图": "阵法性房颤图"
"阵法性房颤图": "阵法性房颤图",
"选择城市": "选择城市",
"请选择城市": "请选择城市",
"输入关键词": "输入关键词",
"输入国家、省份或城市": "输入国家、省份或城市"
}

View File

@@ -634,5 +634,9 @@
"正常心率窦性图": "正常心率竇性圖",
"窦性心律不齐图": "竇性心律不齊圖",
"持续性房颤图": "持續性房顫圖",
"阵法性房颤图": "陣法性房顫圖"
"阵法性房颤图": "陣法性房顫圖",
"选择城市": "選擇城市",
"请选择城市": "請選擇城市",
"输入关键词": "輸入關鍵詞",
"输入国家、省份或城市": "輸入國家、省份或城市"
}

View File

@@ -1,8 +1,3 @@
import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'dart:typed_data';
import 'package:ef/ef.dart';
import 'package:json_annotation/json_annotation.dart';
@@ -65,154 +60,4 @@ class BedController extends GetControllerEx<BedModel> {
attr = GetModel(BedModel()).obs;
}
// @override
// void onInit() {
// super.onInit();
// GlobalController globalController = Get.find();
// Timer.periodic(Duration(milliseconds: 1000), (e) {
// if (model.isZhuMian) {
// var deviceInfo = globalController.model.deviceMain; //获取当前选中设备信息
// if (deviceInfo != null &&
// deviceInfo.isNotEmpty &&
// model.deviceMac != deviceInfo["mac"]) {
// model.deviceMac = deviceInfo["mac"];
// String deviceType = deviceInfo["deviceType"]["id"];
// if (deviceType == "1") {
// //床
// model.zhuMainRunTime = 900;
// model.zhuMainRunAllTime = 900;
// } else if (deviceType == "3") {
// //床垫
// model.zhuMainRunTime = 1800;
// model.zhuMainRunAllTime = 1800;
// }
// }
// int time =
// DateTime.now().millisecondsSinceEpoch - model.zhuMainInitTime;
// time = time ~/ 1000;
// if (time <= model.zhuMainRunAllTime) {
// model.zhuMainRunTime = model.zhuMainRunAllTime - time;
// } else {
// model.isZhuMian = false;
// model.zhuMainRunTime = 0;
// }
// }
// updateAll();
// });
// }
// Future bleSendCode(d) async {
// Completer completer = Completer();
// bleSendCodeNext(completer, d);
// return completer.future;
// }
// Future bleSendCodeNext(Completer completer, d) async {
// if (deviceProp == null) {
// showToast("蓝牙设备尚未连接");
// completer.completeError(Exception("蓝牙设备尚未连接"));
// return;
// }
// if (deviceProp!.isClose) {
// showToast("蓝牙已断开,请稍后再试");
// completer.completeError(Exception("蓝牙已断开"));
// return;
// }
// model.useLastTime = DateTime.now().millisecondsSinceEpoch;
// deviceProp!.write(Uint8List.fromList(d), ([d]) {
// completer.complete("success");
// }, (d) {
// completer.completeError(Exception("蓝牙发送失败"));
// });
// }
// websocketInit() {
// websocketProp = WebsocketProp();
// websocketProp!.initState(CommonVariables.wsUrl, {"message": onMessage});
// }
// websocketSend(v) {
// var deviceMain = glcontroller.model.deviceMain;
// if (deviceMain == null || deviceMain["mac"] == null) {
// return;
// }
// print("websocketSend 发送 $v");
// websocketProp?.sendMessage(
// {"type": "10002", "did": deviceMain["bindMacA"], "state": v});
// if (deviceMain["bindMacB"] != null && deviceMain["bindMacB"] != "") {
// websocketProp?.sendMessage(
// {"type": "10002", "did": deviceMain["bindMacB"], "state": v});
// }
// }
// bodyDataHandle(index, data) {
// var bodyData = model.bodyData[index]["bodyData"];
// if (bodyData.length > 0 &&
// data["data"]["deviceSendTime"] != null &&
// data["data"]["deviceSendTime"] ==
// bodyData[bodyData.length - 1]["deviceSendTime"]) {
// return;
// }
// model.bodyData[index]["lastData"] = data["data"];
// model.bodyData[index]["bodyData"].add(data["data"]);
// if (model.bodyData[index]["bodyData"].length > 120) {
// model.bodyData[index]["bodyData"].removeAt(0);
// }
// }
// onMessage(d) {
// var data = jsonDecode(d);
// if (calibrationListenCall != null) {
// calibrationListenCall?.call(data);
// return;
// }
// // print("receive ${data["data"]["deviceNo"]}");
// String mac = "${data?["data"]?["deviceNo"]}".toUpperCase() ?? "";
// if (CommonVariables.test) {
// if (data["data"]["breathRate"] == 0) {
// data["data"]["breathRate"] = Random().nextInt(10) + 10;
// }
// if (data["data"]["heartRate"] == 0) {
// data["data"]["heartRate"] = Random().nextInt(10) + 60;
// }
// }
// if ("${glcontroller.model.deviceMain["bindMacA"]}".length > 6 &&
// mac == "${glcontroller.model.deviceMain["bindMacA"]}".toUpperCase()) {
// bodyDataHandle(0, data);
// } else if ("${glcontroller.model.deviceMain["bindMacB"]}".length > 6 &&
// mac == "${glcontroller.model.deviceMain["bindMacB"]}".toUpperCase()) {
// bodyDataHandle(1, data);
// }
// }
// anmoReset() {
// pinlvTimerList = [null, null];
// model.anMoStart = false; //启动按摩
// model.isAnMoBei = false;
// model.isAnMoTui = false;
// model.anMoPattern = -1; //1234分别为模式1、2、3、4
// model.slideValue_bei = 1.0; //背部力度调节
// model.slideValue_tui = 1.0; //腿部力度调节
// model.timerPattern = -1; //定时设置 10、20、30分钟
// updateAll();
// }
// resetParm() {
// model.noAutoPattern = -1; //1 TV 2 零重力 3 阅读 4放平
// model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
// model.isZhuMian = false;
// model.useLastTime = DateTime.now().millisecondsSinceEpoch;
// model.bodyData = [
// {"lastData": {}, "bodyData": []},
// {"lastData": {}, "bodyData": []}
// ];
// anmoReset();
// }
// anMoChange() {
// model.zhuMianPattern = -1; //1 一键放松 2 休闲模式 3腰部放松 4 腿部放松
// model.isZhuMian = false;
// updateAll();
// }
}

View File

@@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:ui';
import 'package:EasyDartModule/EasyDartModule.dart';
@@ -10,7 +11,9 @@ import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/color/app_uri_status.dart';
import 'package:vbvs_app/common/pojo/city.dart';
import 'package:vbvs_app/common/util/DailyLogUtils.dart';
import 'package:vbvs_app/common/util/EventBus.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/eventType.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/enum/APPPackageType.dart';
@@ -53,17 +56,26 @@ class PeopleInfoController extends GetControllerEx<PeopleInfoModel> {
final CityModelController cityController = Get.find<CityModelController>();
RxList diseaseList = [].obs;
@override
Future<void> onInit() async {
super.onInit();
cityDataFuture = cityController.loadAndSetCityData().then((success) {
return cityController.cityList;
});
// 监听切换语言
subscription = EventBus().on<SwitchLanguageEvent>().listen((event) async {
final CityModelController cityController =
Get.find<CityModelController>();
ef.log("切换语言事件通知:${event.language}");
cityController.cityList = [];
await initializeCityData();
});
}
late Future<List<CityModel>> cityDataFuture;
late StreamSubscription<SwitchLanguageEvent> subscription;
getPeoples(String mac) async {
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;

View File

@@ -2,8 +2,10 @@ import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/EventBus.dart';
import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/eventType.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/weather/weather_controller.dart';
@@ -122,7 +124,9 @@ class _LanguagePageState extends State<LanguagePage> {
lang.selected = (lang ==
language); // 根据选择更新状态
}
EventBus().emit(
SwitchLanguageEvent(language
.language_code));
await AppLanguage()
.loadLanguage(
language.language_code,

View File

@@ -253,7 +253,7 @@ class _SettingPageState extends State<SettingPage> {
),
].divide(SizedBox(width: 22.rpx)),
),
Text('SWES2025.10.31',
Text('SWES2025.12.17',
style: TextStyle(
color: Colors.white,
fontSize: 26.rpx,

View File

@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/color/app_uri_status.dart';
import 'package:vbvs_app/common/pojo/city.dart';
import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
@@ -15,6 +16,7 @@ import 'package:vbvs_app/pages/common/selectDialog.dart';
import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart';
import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart';
import 'package:vbvs_app/pages/person/select_city.dart';
import 'package:vbvs_app/pages/person/select_disease.dart';
//更新人员信息
class PeopleInfoPage extends GetView<PeopleInfoController> {
@@ -31,9 +33,26 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
PeopleInfoController controller = Get.put(PeopleInfoController());
final CityModelController cityController = Get.find<CityModelController>();
@override
Widget build(BuildContext context) {
controller.getDiseaseData().then((apiResponse) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (apiResponse.code != HttpStatusCodes.ok) {
TopSlideNotification.show(
context,
text: apiResponse.msg ?? '',
textColor: themeController.currentColor.sc9,
);
}
});
});
getPersonData();
controller.cityDataFuture = cityController.loadAndSetCityData().then((success) {
return cityController.cityList;
});
return LayoutBuilder(
builder: (context, boxConstraints) => GestureDetector(
onTap: () {
@@ -931,6 +950,242 @@ class PeopleInfoPage extends GetView<PeopleInfoController> {
),
),
getLine(),
// Container(
// height: 90.rpx,
// margin: EdgeInsets.only(
// left: 40.rpx, right: 35.rpx),
// child: InkWell(
// onTap: () {
// // if (widget.status ==
// // BindType.share.code) {
// // TopSlideNotification.show(
// // context,
// // text: "被分享用户只能修改用户名称",
// // textColor:
// // themeController
// // .currentColor
// // .sc9);
// // return;
// // }
// FocusScope.of(context)
// .requestFocus(
// FocusNode());
// Future.delayed(
// Duration(
// milliseconds: 250),
// () {
// // 使用当前选中的城市数据,如果没有则创建默认
// CityModel? currentCity;
// if (controller
// .model
// .cityModels
// .isNotEmpty &&
// index <
// controller
// .model
// .cityModels
// .length) {
// currentCity = controller
// .model
// .cityModels[index];
// } else {
// currentCity = CityModel();
// }
// showCitySelectionDialog(
// context,
// selectedCity: currentCity,
// onCityChanged:
// (CityModel newCity) {
// final list = controller
// .model.cityModels;
// if (index <
// list.length) {
// // 替换
// list[index] = newCity;
// } else {
// // 补齐并追加
// list.add(newCity);
// }
// controller.model
// .peopleList[
// index]['UTC'] =
// list[index].UTC;
// controller.model
// .peopleList[
// index]
// ['city_id'] = list[
// index]
// .id;
// controller.updateAll();
// },
// title: "选择城市".tr,
// cityDataFuture: controller
// .cityDataFuture, // 传入预加载的数据
// colors:
// CitySelectionColors(
// pickerBackgroundColor:
// stringToColor(
// "#003058"),
// confirmTextColor:
// stringToColor(
// "#84F5FF"),
// selectedCityColor:
// stringToColor(
// "#84F5FF"),
// ),
// );
// });
// },
// child: Row(
// mainAxisAlignment:
// MainAxisAlignment
// .spaceBetween,
// children: [
// Text(
// '慢病管理'.tr,
// style: TextStyle(
// fontFamily:
// 'Readex Pro',
// color:
// Color(0xFF9EA4B7),
// fontSize: 30.rpx,
// letterSpacing: 0,
// ),
// ),
// Text(
// getCityModel(index) !=
// null
// ? MyUtils
// .getDetailedCityDisplayText(
// getCityModel(
// index))
// : "请选择城市".tr,
// style: TextStyle(
// color: getCityModel(
// index) !=
// null
// ? themeController
// .currentColor
// .sc3
// : themeController
// .currentColor
// .sc4,
// fontSize: AppConstants()
// .title_text_fontSize,
// ),
// ),
// ],
// ),
// ),
// ),
Container(
height: 90.rpx,
margin: EdgeInsets.only(
left: 40.rpx, right: 35.rpx),
child: InkWell(
onTap: () {
FocusScope.of(context)
.requestFocus(
FocusNode());
Future.delayed(
Duration(
milliseconds: 250),
() {
// 获取当前已选择的慢病ID列表
final currentDiseaseIds = List<
String>.from(controller
.model
.peopleList[
index]
['disease_ids'] ??
[]);
showDiseaseSelectionDialog(
context,
selectedIds:
currentDiseaseIds,
onDiseasesChanged:
(List<String>
newDiseaseIds) {
// 更新模型数据
controller.model.peopleList[
index][
'disease_ids'] =
newDiseaseIds;
controller.updateAll();
},
title: "选择慢病".tr,
colors:
DiseaseSelectionColors(
pickerBackgroundColor:
stringToColor(
"#003058"),
confirmTextColor:
stringToColor(
"#84F5FF"),
selectedDiseaseColor:
stringToColor(
"#84F5FF"),
),
diseaseList: controller
.diseaseList,
);
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Text(
'慢病管理'.tr,
style: TextStyle(
fontFamily:
'Readex Pro',
color:
Color(0xFF9EA4B7),
fontSize: 30.rpx,
letterSpacing: 0,
),
),
Obx(() {
final selectedIds = controller
.model
.peopleList[
index]
['disease_ids'] ??
[];
final diseases =
controller
.diseaseList;
return Text(
getSelectedDiseaseNames(
diseases,
List<String>.from(
selectedIds)),
style: TextStyle(
color: selectedIds
.isNotEmpty
? themeController
.currentColor
.sc3
: themeController
.currentColor
.sc4,
fontSize: AppConstants()
.title_text_fontSize,
),
);
}),
],
),
),
),
getLine(),
],
),
)

View File

@@ -59,12 +59,15 @@ Future showCitySelectionDialog(
CitySelectionColors? colors, // 新增:颜色配置参数
}) {
ThemeController themeController = Get.find();
final bool isChinese = Get.locale?.languageCode == 'zh' ?? true;
final bool isChinese = Get.locale?.languageCode == 'zh_CN' ?? true;
// 使用传入的颜色,如果没传则使用主题颜色
final Color pickerBackgroundColor = colors?.pickerBackgroundColor ?? themeController.currentColor.sc17;
final Color confirmTextColor = colors?.confirmTextColor ?? themeController.currentColor.sc2;
final Color selectedCityColor = colors?.selectedCityColor ?? themeController.currentColor.sc2;
final Color pickerBackgroundColor =
colors?.pickerBackgroundColor ?? themeController.currentColor.sc17;
final Color confirmTextColor =
colors?.confirmTextColor ?? themeController.currentColor.sc2;
final Color selectedCityColor =
colors?.selectedCityColor ?? themeController.currentColor.sc2;
final RxList<String> countries = <String>[].obs;
final RxList<String> provinces = <String>[].obs;
@@ -282,9 +285,10 @@ Future showCitySelectionDialog(
final cityData = snapshot.data!;
// 只在第一次初始化数据
if (countries.isEmpty) {
// if (countries.isEmpty) {
// }
initializePickerData(cityData);
}
return _buildCityPickerContent(
context,