更新界面布局
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
class ServiceConstant {
|
||||
static const String baseHost = "vsbs-test.he-info.cn";//服务地址
|
||||
// static const String baseHost = "vsbst-api.he-info.cn/";//服务地址
|
||||
// static const String baseHost = "vsbs-test.he-info.cn";//服务地址
|
||||
static const String baseHost = "vsbst-api.he-info.cn";//服务地址
|
||||
static const String service_address = "http://$baseHost";
|
||||
|
||||
static String server_service = "/vsbs_app_server";//服务名称
|
||||
|
||||
@@ -250,6 +250,7 @@ class _SleepDataModuleWidgetState extends State<SleepDataModuleWidget> {
|
||||
'type': 1,
|
||||
'name': 'sleep', //'sleep', 'heartRate' 或 'breathe'
|
||||
'itemName': widget.data['id'],
|
||||
'person':widget.data['person'],
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
@@ -136,7 +136,128 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
|
||||
_statusTimer = null;
|
||||
}
|
||||
|
||||
Future<ApiResponse> updateDeviceStatus() async {
|
||||
// Future<ApiResponse> updateDeviceStatus() async {
|
||||
// try {
|
||||
// String serviceAddress = ServiceConstant.service_address;
|
||||
// String serviceName = ServiceConstant.server_service;
|
||||
// String serviceApi = ServiceConstant.get_bluetooth_device_status;
|
||||
// String queryUrl = "$serviceAddress$serviceName$serviceApi";
|
||||
|
||||
// if (model.devicelist != null && model.devicelist!.isNotEmpty) {
|
||||
// final macParams = model.devicelist!
|
||||
// .map((device) => "mac=${Uri.encodeQueryComponent(device.mac!)}")
|
||||
// .join("&");
|
||||
|
||||
// if (queryUrl.contains('?')) {
|
||||
// queryUrl += '&$macParams';
|
||||
// } else {
|
||||
// queryUrl += '?$macParams';
|
||||
// }
|
||||
// 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);
|
||||
// var responseData =
|
||||
// response.data is String ? jsonDecode(response.data) : response.data;
|
||||
// ApiResponse res =
|
||||
// ApiResponse.fromJson(responseData, (object) => object);
|
||||
// if (res.code != HttpStatusCodes.ok) return res;
|
||||
|
||||
// if (response.data['data'] != null && response.data['data'] is List) {
|
||||
// List<dynamic> responseList = response.data['data'];
|
||||
|
||||
// // 构建 mac -> 设备的映射
|
||||
// Map<String, BleDeviceData> deviceMap = {
|
||||
// for (var d in model.devicelist!)
|
||||
// if (d.mac != null) d.mac!.toLowerCase(): d,
|
||||
// };
|
||||
|
||||
// // 用于记录已经设置过主从关系的 mac,避免重复
|
||||
// Set<String> processedMacs = {};
|
||||
|
||||
// for (var item in responseList) {
|
||||
// String mac = item['mac'].toLowerCase();
|
||||
// String? bindMac = item['bindMac']?.toLowerCase();
|
||||
// bool? bind = item['bind'];
|
||||
|
||||
// if (!deviceMap.containsKey(mac)) continue;
|
||||
|
||||
// BleDeviceData currentDevice = deviceMap[mac]!;
|
||||
// currentDevice.bind = bind;
|
||||
|
||||
// if (bindMac != null && deviceMap.containsKey(bindMac)) {
|
||||
// final isMutualBind = responseList.any((e) =>
|
||||
// e['mac']?.toString().toLowerCase() == bindMac &&
|
||||
// e['bindMac']?.toString().toLowerCase() == mac);
|
||||
|
||||
// if (isMutualBind) {
|
||||
// if (processedMacs.contains(mac) ||
|
||||
// processedMacs.contains(bindMac)) {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// final masterMac = (mac.compareTo(bindMac) < 0) ? mac : bindMac;
|
||||
// final slaveMac = (mac.compareTo(bindMac) < 0) ? bindMac : mac;
|
||||
|
||||
// if (deviceMap.containsKey(masterMac) &&
|
||||
// deviceMap.containsKey(slaveMac)) {
|
||||
// deviceMap[masterMac]!.slave = deviceMap[slaveMac];
|
||||
// processedMacs.add(masterMac);
|
||||
// processedMacs.add(slaveMac);
|
||||
// }
|
||||
// } else {
|
||||
// if (!processedMacs.contains(mac)) {
|
||||
// BleDeviceData masterDevice = deviceMap[bindMac]!;
|
||||
// masterDevice.slave = currentDevice;
|
||||
// processedMacs.add(mac);
|
||||
// processedMacs.add(bindMac);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// // 获取所有被作为 slave 的 mac,用于排除掉
|
||||
// final Set<String> allSlaveMacs = {
|
||||
// for (var d in deviceMap.values)
|
||||
// if (d.slave?.mac != null) d.slave!.mac!.toLowerCase()
|
||||
// };
|
||||
|
||||
// // 构造最终列表,只保留主设备和未被作为 slave 的独立设备
|
||||
// final List<BleDeviceData> finalList = deviceMap.values.where((d) {
|
||||
// final mac = d.mac?.toLowerCase();
|
||||
// if (mac == null) return false;
|
||||
// if (d.slave != null) return true; // 主设备
|
||||
// return !allSlaveMacs.contains(mac); // 不是别人 slave 的独立设备
|
||||
// }).toList();
|
||||
|
||||
// model.betDevicelist = finalList;
|
||||
// } else {
|
||||
// model.betDevicelist = [];
|
||||
// }
|
||||
|
||||
// updateAll();
|
||||
// return res;
|
||||
// }
|
||||
// } catch (e) {
|
||||
// print("获取设备状态异常: $e");
|
||||
// EasyDartModule.logger.info("获取设备状态异常: $e");
|
||||
// DailyLogUtils.writeLog("获取设备状态异常: $e");
|
||||
// return ApiResponse(code: -1, msg: "请求失败".tr);
|
||||
// }
|
||||
|
||||
// return ApiResponse(code: -1, msg: "未知错误".tr);
|
||||
// }
|
||||
|
||||
Future<ApiResponse> updateDeviceStatus() async {
|
||||
try {
|
||||
String serviceAddress = ServiceConstant.service_address;
|
||||
String serviceName = ServiceConstant.server_service;
|
||||
@@ -174,72 +295,32 @@ class BlueteethBindController extends GetControllerEx<BlueteethBindModel> {
|
||||
|
||||
if (response.data['data'] != null && response.data['data'] is List) {
|
||||
List<dynamic> responseList = response.data['data'];
|
||||
|
||||
// 构建 mac -> 设备的映射
|
||||
Map<String, BleDeviceData> deviceMap = {
|
||||
for (var d in model.devicelist!)
|
||||
if (d.mac != null) d.mac!.toLowerCase(): d,
|
||||
if (d.mac != null) d.mac!: d
|
||||
};
|
||||
|
||||
// 用于记录已经设置过主从关系的 mac,避免重复
|
||||
Set<String> processedMacs = {};
|
||||
List<String> slaveMacsToRemove = [];
|
||||
|
||||
for (var item in responseList) {
|
||||
String mac = item['mac'].toLowerCase();
|
||||
String? bindMac = item['bindMac']?.toLowerCase();
|
||||
String mac = item['mac'];
|
||||
String? bindMac = item['bindMac'];
|
||||
bool? bind = item['bind'];
|
||||
|
||||
if (!deviceMap.containsKey(mac)) continue;
|
||||
|
||||
BleDeviceData currentDevice = deviceMap[mac]!;
|
||||
currentDevice.bind = bind;
|
||||
|
||||
if (bindMac != null && deviceMap.containsKey(bindMac)) {
|
||||
final isMutualBind = responseList.any((e) =>
|
||||
e['mac']?.toString().toLowerCase() == bindMac &&
|
||||
e['bindMac']?.toString().toLowerCase() == mac);
|
||||
|
||||
if (isMutualBind) {
|
||||
if (processedMacs.contains(mac) ||
|
||||
processedMacs.contains(bindMac)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final masterMac = (mac.compareTo(bindMac) < 0) ? mac : bindMac;
|
||||
final slaveMac = (mac.compareTo(bindMac) < 0) ? bindMac : mac;
|
||||
|
||||
if (deviceMap.containsKey(masterMac) &&
|
||||
deviceMap.containsKey(slaveMac)) {
|
||||
deviceMap[masterMac]!.slave = deviceMap[slaveMac];
|
||||
processedMacs.add(masterMac);
|
||||
processedMacs.add(slaveMac);
|
||||
}
|
||||
} else {
|
||||
if (!processedMacs.contains(mac)) {
|
||||
BleDeviceData masterDevice = deviceMap[bindMac]!;
|
||||
masterDevice.slave = currentDevice;
|
||||
processedMacs.add(mac);
|
||||
processedMacs.add(bindMac);
|
||||
}
|
||||
if (deviceMap.containsKey(mac)) {
|
||||
BleDeviceData currentDevice = deviceMap[mac]!;
|
||||
currentDevice.bind = bind;
|
||||
if (bindMac != null && deviceMap.containsKey(bindMac)) {
|
||||
BleDeviceData masterDevice = deviceMap[bindMac]!;
|
||||
masterDevice.slave = currentDevice;
|
||||
slaveMacsToRemove.add(mac);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取所有被作为 slave 的 mac,用于排除掉
|
||||
final Set<String> allSlaveMacs = {
|
||||
for (var d in deviceMap.values)
|
||||
if (d.slave?.mac != null) d.slave!.mac!.toLowerCase()
|
||||
};
|
||||
|
||||
// 构造最终列表,只保留主设备和未被作为 slave 的独立设备
|
||||
final List<BleDeviceData> finalList = deviceMap.values.where((d) {
|
||||
final mac = d.mac?.toLowerCase();
|
||||
if (mac == null) return false;
|
||||
if (d.slave != null) return true; // 主设备
|
||||
return !allSlaveMacs.contains(mac); // 不是别人 slave 的独立设备
|
||||
}).toList();
|
||||
|
||||
model.betDevicelist = finalList;
|
||||
model.devicelist!
|
||||
.removeWhere((device) => slaveMacsToRemove.contains(device.mac));
|
||||
model.betDevicelist = model.devicelist!;
|
||||
} else {
|
||||
model.betDevicelist = [];
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ import 'dart:async';
|
||||
|
||||
import 'package:EasyDartModule/EasyDartModule.dart';
|
||||
import 'package:ef/ef.dart';
|
||||
// import 'package:geocoding/geocoding.dart';
|
||||
// import 'package:geolocator/geolocator.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:vbvs_app/common/util/CommonVariables.dart';
|
||||
import 'package:vbvs_app/controller/setting/language/language_controller.dart';
|
||||
@@ -37,148 +37,148 @@ class WeatherModelController extends GetControllerEx<WeatherModel> {
|
||||
LanguageController languageController = Get.find();
|
||||
WeatherModelController() {
|
||||
attr = GetModel(WeatherModel()).obs;
|
||||
// weatherFactory = WeatherFactory(CommonVariables.weather_apiKey,
|
||||
// language: Language.CHINESE_SIMPLIFIED);
|
||||
weatherFactory = WeatherFactory(CommonVariables.weather_apiKey,
|
||||
language: Language.CHINESE_SIMPLIFIED);
|
||||
}
|
||||
|
||||
// Timer? _weatherTimer;
|
||||
// Timer? _locationTimer;
|
||||
Timer? _weatherTimer;
|
||||
Timer? _locationTimer;
|
||||
|
||||
// late WeatherFactory weatherFactory;
|
||||
late WeatherFactory weatherFactory;
|
||||
|
||||
// @override
|
||||
// Future<void> onInit() async {
|
||||
// super.onInit();
|
||||
// await _getCurrentLocation();
|
||||
// _weatherTimer = Timer.periodic(Duration(seconds: 5), (timer) {
|
||||
// _getCurrentWeather(); // 每 5 秒更新一次天气
|
||||
// });
|
||||
@override
|
||||
Future<void> onInit() async {
|
||||
super.onInit();
|
||||
await _getCurrentLocation();
|
||||
_weatherTimer = Timer.periodic(Duration(seconds: 5), (timer) {
|
||||
_getCurrentWeather(); // 每 5 秒更新一次天气
|
||||
});
|
||||
|
||||
// _locationTimer = Timer.periodic(Duration(minutes: 10), (timer) {
|
||||
// _getCurrentLocation(); // 每 10 分钟更新一次位置
|
||||
// });
|
||||
// }
|
||||
_locationTimer = Timer.periodic(Duration(minutes: 10), (timer) {
|
||||
_getCurrentLocation(); // 每 10 分钟更新一次位置
|
||||
});
|
||||
}
|
||||
|
||||
// @override
|
||||
// void onClose() {
|
||||
// _weatherTimer?.cancel(); // 取消天气更新定时器
|
||||
// _locationTimer?.cancel(); // 取消位置更新定时器
|
||||
// super.onClose();
|
||||
// }
|
||||
@override
|
||||
void onClose() {
|
||||
_weatherTimer?.cancel(); // 取消天气更新定时器
|
||||
_locationTimer?.cancel(); // 取消位置更新定时器
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
// // 获取当前位置并存储到 model
|
||||
// Future<void> _getCurrentLocation() async {
|
||||
// try {
|
||||
// Position position = await _determinePosition();
|
||||
// if (position == null) {
|
||||
// throw Exception("获取位置失败");
|
||||
// }
|
||||
// 获取当前位置并存储到 model
|
||||
Future<void> _getCurrentLocation() async {
|
||||
try {
|
||||
Position position = await _determinePosition();
|
||||
if (position == null) {
|
||||
throw Exception("获取位置失败");
|
||||
}
|
||||
|
||||
// String? language = "zh_CN";
|
||||
// if (languageController.selectLanguage != null) {
|
||||
// language = languageController.selectLanguage.value!.language_code;
|
||||
// }
|
||||
// List<Placemark> placemarks = await placemarkFromCoordinates(
|
||||
// position.latitude, position.longitude,
|
||||
// localeIdentifier: language);
|
||||
String? language = "zh_CN";
|
||||
if (languageController.selectLanguage != null) {
|
||||
language = languageController.selectLanguage.value!.language_code;
|
||||
}
|
||||
List<Placemark> placemarks = await placemarkFromCoordinates(
|
||||
position.latitude, position.longitude,
|
||||
localeIdentifier: language);
|
||||
|
||||
// if (placemarks.isNotEmpty) {
|
||||
// model.cityName = placemarks[0].locality ?? "未知数据".tr;
|
||||
// model.latitude = position.latitude;
|
||||
// model.longitude = position.longitude;
|
||||
// }
|
||||
if (placemarks.isNotEmpty) {
|
||||
model.cityName = placemarks[0].locality ?? "未知数据".tr;
|
||||
model.latitude = position.latitude;
|
||||
model.longitude = position.longitude;
|
||||
}
|
||||
|
||||
// // 调用获取天气方法
|
||||
// _getCurrentWeather();
|
||||
// } catch (e) {
|
||||
// print(e);
|
||||
// EasyDartModule.logger.error("获取位置失败: $e");
|
||||
// }
|
||||
// }
|
||||
// 调用获取天气方法
|
||||
_getCurrentWeather();
|
||||
} catch (e) {
|
||||
print(e);
|
||||
EasyDartModule.logger.error("获取位置失败: $e");
|
||||
}
|
||||
}
|
||||
|
||||
// // 获取当前位置
|
||||
// Future<Position> _determinePosition() async {
|
||||
// bool serviceEnabled;
|
||||
// LocationPermission permission;
|
||||
// 获取当前位置
|
||||
Future<Position> _determinePosition() async {
|
||||
bool serviceEnabled;
|
||||
LocationPermission permission;
|
||||
|
||||
// serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||
// if (!serviceEnabled) {
|
||||
// return Future.error('位置服务未启用');
|
||||
// }
|
||||
serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||
if (!serviceEnabled) {
|
||||
return Future.error('位置服务未启用');
|
||||
}
|
||||
|
||||
// permission = await Geolocator.checkPermission();
|
||||
// if (permission == LocationPermission.denied) {
|
||||
// permission = await Geolocator.requestPermission();
|
||||
// if (permission == LocationPermission.denied) {
|
||||
// return Future.error('位置权限被拒绝');
|
||||
// }
|
||||
// }
|
||||
permission = await Geolocator.checkPermission();
|
||||
if (permission == LocationPermission.denied) {
|
||||
permission = await Geolocator.requestPermission();
|
||||
if (permission == LocationPermission.denied) {
|
||||
return Future.error('位置权限被拒绝');
|
||||
}
|
||||
}
|
||||
|
||||
// if (permission == LocationPermission.deniedForever) {
|
||||
// return Future.error('位置权限被永久拒绝');
|
||||
// }
|
||||
if (permission == LocationPermission.deniedForever) {
|
||||
return Future.error('位置权限被永久拒绝');
|
||||
}
|
||||
|
||||
// return await Geolocator.getCurrentPosition();
|
||||
// }
|
||||
return await Geolocator.getCurrentPosition();
|
||||
}
|
||||
|
||||
// // 获取天气信息
|
||||
// Future<void> _getCurrentWeather() async {
|
||||
// if (model.latitude == null || model.longitude == null) {
|
||||
// EasyDartModule.logger.error("获取天气失败:位置数据获取失败");
|
||||
// return; // 如果位置数据没有获取到,则不更新天气
|
||||
// }
|
||||
// String? language = "zh_CN";
|
||||
// if (languageController.selectLanguage != null) {
|
||||
// language = languageController.selectLanguage.value!.language_code;
|
||||
// }
|
||||
// List<Placemark> placemarks = await placemarkFromCoordinates(
|
||||
// model.latitude!, model.longitude!,
|
||||
// localeIdentifier: language);
|
||||
// 获取天气信息
|
||||
Future<void> _getCurrentWeather() async {
|
||||
if (model.latitude == null || model.longitude == null) {
|
||||
EasyDartModule.logger.error("获取天气失败:位置数据获取失败");
|
||||
return; // 如果位置数据没有获取到,则不更新天气
|
||||
}
|
||||
String? language = "zh_CN";
|
||||
if (languageController.selectLanguage != null) {
|
||||
language = languageController.selectLanguage.value!.language_code;
|
||||
}
|
||||
List<Placemark> placemarks = await placemarkFromCoordinates(
|
||||
model.latitude!, model.longitude!,
|
||||
localeIdentifier: language);
|
||||
|
||||
// if (placemarks.isNotEmpty) {
|
||||
// model.cityName = placemarks[0].locality ?? "未知数据".tr;
|
||||
// }
|
||||
if (placemarks.isNotEmpty) {
|
||||
model.cityName = placemarks[0].locality ?? "未知数据".tr;
|
||||
}
|
||||
|
||||
// try {
|
||||
// weatherFactory.language = Language.CHINESE_SIMPLIFIED;
|
||||
// String? language = "zh_CN";
|
||||
// if (languageController.selectLanguage != null) {
|
||||
// language = languageController.selectLanguage.value!.language_code;
|
||||
// }
|
||||
// if (language == "zh_CN") {
|
||||
// weatherFactory.language = Language.CHINESE_SIMPLIFIED;
|
||||
// } else {
|
||||
// weatherFactory.language = Language.ENGLISH;
|
||||
// }
|
||||
// Weather weather = await weatherFactory.currentWeatherByLocation(
|
||||
// model.latitude!, model.longitude!);
|
||||
try {
|
||||
weatherFactory.language = Language.CHINESE_SIMPLIFIED;
|
||||
String? language = "zh_CN";
|
||||
if (languageController.selectLanguage != null) {
|
||||
language = languageController.selectLanguage.value!.language_code;
|
||||
}
|
||||
if (language == "zh_CN") {
|
||||
weatherFactory.language = Language.CHINESE_SIMPLIFIED;
|
||||
} else {
|
||||
weatherFactory.language = Language.ENGLISH;
|
||||
}
|
||||
Weather weather = await weatherFactory.currentWeatherByLocation(
|
||||
model.latitude!, model.longitude!);
|
||||
|
||||
// model.weather_info = weather.weatherDescription;
|
||||
// model.min_temperature = weather.tempMin?.celsius?.toInt();
|
||||
// model.max_temperature = weather.tempMax?.celsius?.toInt();
|
||||
// model.current_temperature = weather.temperature?.celsius?.toInt();
|
||||
// model.wind_speed = weather.windSpeed?.toInt();
|
||||
// model.weatherIcon = weather.weatherIcon;
|
||||
// if (model.weatherIcon != null) {
|
||||
// model.weatherIconurl =
|
||||
// "https://openweathermap.org/img/w/${model.weatherIcon}.png";
|
||||
// }
|
||||
// updateAll(); // 更新 UI
|
||||
// } catch (e) {
|
||||
// EasyDartModule.logger.error("获取天气失败: $e");
|
||||
// print('获取天气失败: $e');
|
||||
// }
|
||||
// }
|
||||
model.weather_info = weather.weatherDescription;
|
||||
model.min_temperature = weather.tempMin?.celsius?.toInt();
|
||||
model.max_temperature = weather.tempMax?.celsius?.toInt();
|
||||
model.current_temperature = weather.temperature?.celsius?.toInt();
|
||||
model.wind_speed = weather.windSpeed?.toInt();
|
||||
model.weatherIcon = weather.weatherIcon;
|
||||
if (model.weatherIcon != null) {
|
||||
model.weatherIconurl =
|
||||
"https://openweathermap.org/img/w/${model.weatherIcon}.png";
|
||||
}
|
||||
updateAll(); // 更新 UI
|
||||
} catch (e) {
|
||||
EasyDartModule.logger.error("获取天气失败: $e");
|
||||
print('获取天气失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// // 获取 5 天天气预报
|
||||
// Future<List<Weather>> getWeatherForecast(
|
||||
// double latitude, double longitude) async {
|
||||
// try {
|
||||
// return await weatherFactory.fiveDayForecastByLocation(
|
||||
// latitude, longitude);
|
||||
// } catch (e) {
|
||||
// print('获取天气预报失败: $e');
|
||||
// rethrow;
|
||||
// }
|
||||
// }
|
||||
// 获取 5 天天气预报
|
||||
Future<List<Weather>> getWeatherForecast(
|
||||
double latitude, double longitude) async {
|
||||
try {
|
||||
return await weatherFactory.fiveDayForecastByLocation(
|
||||
latitude, longitude);
|
||||
} catch (e) {
|
||||
print('获取天气预报失败: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@ 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/component/tool/TopSlideNotification.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';
|
||||
@@ -60,12 +58,9 @@ import 'package:vbvs_app/controller/time/countdown_controller.dart';
|
||||
import 'package:vbvs_app/controller/weather/weather_controller.dart';
|
||||
import 'package:vbvs_app/language/AppLanguage.dart';
|
||||
import 'package:vbvs_app/model/CustomThemeColor.dart';
|
||||
import 'package:vbvs_app/model/api_response.dart';
|
||||
import 'package:vbvs_app/model/user_data.dart';
|
||||
import 'package:vbvs_app/pages/mh_page/BackMovement.dart';
|
||||
import 'package:vbvs_app/pages/mh_page/MattressControl.dart';
|
||||
import 'package:vbvs_app/pages/mh_page/people_info.dart';
|
||||
import 'package:vbvs_app/pages/main_bottom/component/main_page_b_bottom_change.dart';
|
||||
import 'package:vbvs_app/pages/mh_page/MattressControl.dart';
|
||||
import 'package:vbvs_app/routers/mh_routers.dart';
|
||||
|
||||
import 'controller/mh_controller/apply_repair_controller.dart';
|
||||
@@ -315,7 +310,7 @@ class MyApp extends StatelessWidget {
|
||||
]));
|
||||
}
|
||||
|
||||
final selectapp = "mht";
|
||||
final selectapp = "th";
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
@@ -3,11 +3,13 @@ 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/util/FitTool.dart';
|
||||
import 'package:vbvs_app/component/tool/ClickableContainer.dart';
|
||||
import 'package:vbvs_app/component/tool/CustomCard.dart';
|
||||
import 'package:vbvs_app/controller/device/blueteeth_bind_controller.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/main_bottom/global_controller.dart';
|
||||
import 'package:vbvs_app/controller/person/person_controller.dart';
|
||||
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
|
||||
@@ -80,6 +82,25 @@ class _EPageState extends State<BindDeviceSuccess> {
|
||||
child: ClickableContainer(
|
||||
onTap: () {
|
||||
if (blueteethBindController.returnPage == 0) {
|
||||
HomeController homeController = Get.find();
|
||||
BodyDeviceController deviceController = Get.find();
|
||||
if (userInfoController.model.login == 1) {
|
||||
homeController.getSleepReport();
|
||||
deviceController
|
||||
.getDeviceNum()
|
||||
.then((apiResponse) {
|
||||
if (apiResponse.code != HttpStatusCodes.ok) {}
|
||||
});
|
||||
deviceController
|
||||
.getDeviceList()
|
||||
.then((apiResponse) {
|
||||
if (apiResponse.code != HttpStatusCodes.ok) {
|
||||
} else {
|
||||
//请求睡眠报告
|
||||
deviceController.getSleepReport();
|
||||
}
|
||||
});
|
||||
}
|
||||
Get.until((route) =>
|
||||
Get.currentRoute == "/mianPageBottomChange");
|
||||
} else {
|
||||
@@ -279,6 +300,25 @@ class _EPageState extends State<BindDeviceSuccess> {
|
||||
BlueteethBindController blueteethBindController =
|
||||
Get.find();
|
||||
if (blueteethBindController.returnPage == 0) {
|
||||
HomeController homeController = Get.find();
|
||||
BodyDeviceController deviceController = Get.find();
|
||||
if (userInfoController.model.login == 1) {
|
||||
homeController.getSleepReport();
|
||||
deviceController
|
||||
.getDeviceNum()
|
||||
.then((apiResponse) {
|
||||
if (apiResponse.code != HttpStatusCodes.ok) {}
|
||||
});
|
||||
deviceController
|
||||
.getDeviceList()
|
||||
.then((apiResponse) {
|
||||
if (apiResponse.code != HttpStatusCodes.ok) {
|
||||
} else {
|
||||
//请求睡眠报告
|
||||
deviceController.getSleepReport();
|
||||
}
|
||||
});
|
||||
}
|
||||
Get.until((route) =>
|
||||
Get.currentRoute == "/mianPageBottomChange");
|
||||
} else {
|
||||
|
||||
@@ -1043,6 +1043,7 @@ class _HomePageState extends State<HomePage> {
|
||||
List stateModule = [];
|
||||
String currentTime = "";
|
||||
String goalMac = targetDevice?['mac'];
|
||||
var person = targetDevice?['person'];
|
||||
return DynamicReportDetailWidget(
|
||||
key: ValueKey(
|
||||
'${targetDevice!['mac']}_${homeController.model.type}'), // 添加唯一key
|
||||
@@ -1090,6 +1091,7 @@ class _HomePageState extends State<HomePage> {
|
||||
stateModule[j]['time'] =
|
||||
currentTime;
|
||||
stateModule[j]['mac'] = goalMac;
|
||||
stateModule[j]['person'] = person;
|
||||
return SleepDataModuleWidget(
|
||||
data: stateModule[j],
|
||||
);
|
||||
|
||||
@@ -431,7 +431,15 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'传感器1号',
|
||||
(widget.data['person']?['name']
|
||||
?.toString()
|
||||
.trim()
|
||||
.isNotEmpty ??
|
||||
false)
|
||||
? widget
|
||||
.data['person']!['name']
|
||||
.toString()
|
||||
: '未知数据'.tr,
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
@@ -444,7 +452,7 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'69',
|
||||
'${MyUtils.getAgeByDate(MyUtils.formatBirthdayTime(widget.data['person']?['birthday'])) ?? '未知数据'.tr}',
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
@@ -511,7 +519,7 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'1231212',
|
||||
'${widget.data['code'] ?? '未知数据'.tr}',
|
||||
// "D11250300003",
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
@@ -523,9 +531,11 @@ class _NewSleepReportPageState extends State<NewSleepReportPage> {
|
||||
color: themeController
|
||||
.currentColor.sc3,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
Text(
|
||||
'55kg',
|
||||
'${widget.data['person']?['weight'] ?? '未知数据'.tr}kg',
|
||||
style:
|
||||
FlutterFlowTheme.of(context)
|
||||
.bodyMedium
|
||||
|
||||
Reference in New Issue
Block a user