This commit is contained in:
wyf
2025-05-21 09:53:32 +08:00
parent 0a8cffa4c6
commit 489e907e00
26 changed files with 516 additions and 853 deletions

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager"> <component name="ProjectRootManager" version="2" languageLevel="JDK_23" project-jdk-name="Android API 35, extension level 13 Platform" project-jdk-type="Android SDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View File

@@ -40,7 +40,7 @@ android {
// compileSdk = flutter.compileSdkVersion // compileSdk = flutter.compileSdkVersion
compileSdk = localProperties.getProperty('flutter.compileSdkVersion').toInteger() compileSdk = localProperties.getProperty('flutter.compileSdkVersion').toInteger()
// ndkVersion = flutter.ndkVersion // ndkVersion = flutter.ndkVersion
ndkVersion = localProperties.getProperty('flutter.ndkVersion') ndkVersion = localProperties.getProperty('flutter.ndkVersion')
// 编译的jvm版本 // 编译的jvm版本
compileOptions { compileOptions {

View File

@@ -1,3 +1,4 @@
org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true

View File

@@ -358,6 +358,8 @@
"微信客服提示":"请先安装微信APP再联系客服", "微信客服提示":"请先安装微信APP再联系客服",
"打开微信客服提示":"正在打开微信客服...", "打开微信客服提示":"正在打开微信客服...",
"身高":"身高", "身高":"身高",
"身高输入提示":"请输入身高" "身高输入提示":"请输入身高",
"用户协议":"用户协议",
"隐私协议":"隐私协议"
} }

View File

@@ -1,7 +1,6 @@
class CommonVariables { class CommonVariables {
static bool isNetWorkOn = false; static bool isNetWorkOn = false;
// 企业微信客服拉起的url地址 // 企业微信客服拉起的url地址
static String wxKfUrl = "https://work.weixin.qq.com/kfid/kfcab6a07e8aac68945"; static String wxKfUrl = "https://work.weixin.qq.com/kfid/kfcab6a07e8aac68945";
// 企业微信ID // 企业微信ID
@@ -14,4 +13,7 @@ class CommonVariables {
static String ICPTime = "2022-2025"; static String ICPTime = "2022-2025";
static Map<String, Function(dynamic)> callMap = {}; static Map<String, Function(dynamic)> callMap = {};
static const String weather_apiKey =
'40e23445cf0a29561af2b5b7d506a38b'; // 替换为你的 API 密钥
} }

View File

@@ -160,12 +160,6 @@ class GlobalController extends GetControllerEx<GlobalModel> {
return "$mac".toUpperCase(); return "$mac".toUpperCase();
} }
getDeviceType() async {
var rs =
await ef.from("app_device_type").select().order("id", ascending: true);
model.deviceType = rs.where((d) => d["page"] != null).toList();
updateAll();
}
getDeviceList({int time = 1}) async { getDeviceList({int time = 1}) async {
await EasyDartModule.dio.get("/api/device/info/list").then((d) { await EasyDartModule.dio.get("/api/device/info/list").then((d) {

View File

@@ -38,18 +38,6 @@ class PersonController extends GetControllerEx<PersonModel> {
attr = GetModel(PersonModel()).obs; attr = GetModel(PersonModel()).obs;
} }
RxList selectedDiseaseIds = [].obs; RxList selectedDiseaseIds = [].obs;
// RxList diseaseList = [
// {'id': 1, 'name': '高血压'},
// {'id': 2, 'name': '糖尿病'},
// {'id': 3, 'name': '冠心病'},
// {'id': 4, 'name': '哮喘'},
// {'id': 5, 'name': '脑卒中'},
// {'id': 6, 'name': '慢性肾病'},
// {'id': 7, 'name': '慢阻肺'},
// {'id': 8, 'name': '类风湿关节炎'},
// {'id': 9, 'name': '类风湿关节炎类风湿关节炎'},
// {'id': 10, 'name': '类风湿关节炎类风湿关节炎类风湿关节炎'},
// ].obs;
RxString currentPersonId = "".obs; RxString currentPersonId = "".obs;
RxString name = "".obs; RxString name = "".obs;

View File

@@ -1,24 +0,0 @@
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
class PdfController extends GetxController {
var localPdfPath = Rx<String?>(null);
// 加载 PDF 文件
Future<void> loadPdf() async {
final byteData = await rootBundle.load('assets/img/test.pdf');
final tempDir = await getTemporaryDirectory();
// 使用 path 包拼接路径
final filePath = p.join(tempDir.path, 'test.pdf');
final file = File(filePath);
// 保存文件到临时目录
await file.writeAsBytes(byteData.buffer.asUint8List());
localPdfPath.value = filePath; // 更新 PDF 路径
}
}

View File

@@ -31,10 +31,12 @@ import 'package:vbvs_app/controller/message/message_controller.dart';
import 'package:vbvs_app/controller/person/person_controller.dart'; import 'package:vbvs_app/controller/person/person_controller.dart';
import 'package:vbvs_app/controller/repair/repair_controller.dart'; import 'package:vbvs_app/controller/repair/repair_controller.dart';
import 'package:vbvs_app/controller/setting/language/language_controller.dart'; import 'package:vbvs_app/controller/setting/language/language_controller.dart';
import 'package:vbvs_app/controller/setting/pdf/PdfController.dart'; import 'package:vbvs_app/controller/setting/pdf/PrivacyPdfController.dart';
import 'package:vbvs_app/controller/setting/pdf/UserPdfController.dart';
import 'package:vbvs_app/controller/sleep/sleep_report_controller.dart'; import 'package:vbvs_app/controller/sleep/sleep_report_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/time/countdown_controller.dart'; 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/language/AppLanguage.dart';
import 'package:vbvs_app/model/CustomThemeColor.dart'; import 'package:vbvs_app/model/CustomThemeColor.dart';
import 'package:vbvs_app/model/user_data.dart'; import 'package:vbvs_app/model/user_data.dart';
@@ -60,6 +62,8 @@ Future<void> main() async {
await initLogin(); await initLogin();
await initLog(); await initLog();
await messageStatus(); await messageStatus();
startMessagePolling(); startMessagePolling();
// 检查网络 // 检查网络
Checknetwork.checkNetwork(); Checknetwork.checkNetwork();
@@ -225,6 +229,7 @@ class MyApp extends StatelessWidget {
initialBinding: BindingsBuilder(() => [ initialBinding: BindingsBuilder(() => [
// Get.lazyPut(() => UserInfoController()), // Get.lazyPut(() => UserInfoController()),
Get.put(GlobalController()), Get.put(GlobalController()),
Get.put(WeatherModelController()),
Get.lazyPut(() => MainPageController()), Get.lazyPut(() => MainPageController()),
Get.lazyPut(() => BlueteethBindController()), Get.lazyPut(() => BlueteethBindController()),
Get.lazyPut(() => PersonController()), Get.lazyPut(() => PersonController()),
@@ -237,7 +242,8 @@ class MyApp extends StatelessWidget {
Get.lazyPut(() => DeviceShareListController()), Get.lazyPut(() => DeviceShareListController()),
Get.lazyPut(() => DeviceCalibrationController()), Get.lazyPut(() => DeviceCalibrationController()),
Get.lazyPut(() => RepairController()), Get.lazyPut(() => RepairController()),
Get.lazyPut(() => PdfController()), Get.lazyPut(() => UserPdfController()),
Get.lazyPut(() => PrivacyPdfController()),
Get.lazyPut(() => CalendarController()), Get.lazyPut(() => CalendarController()),
Get.lazyPut(() => SleepReportController()), Get.lazyPut(() => SleepReportController()),
])); ]));

View File

@@ -7,7 +7,6 @@ import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/component/base/SleepCalendarWidget.dart'; import 'package:vbvs_app/component/base/SleepCalendarWidget.dart';
import 'package:vbvs_app/controller/device/device_calibration_controller.dart'; import 'package:vbvs_app/controller/device/device_calibration_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/enum/CalendarType.dart';
getOnePicker(context, List arr, int checkIndex, Function onSelectedItemChanged, getOnePicker(context, List arr, int checkIndex, Function onSelectedItemChanged,
{bool looping = false}) { {bool looping = false}) {
@@ -881,9 +880,13 @@ void showProgressDialog(
), ),
), ),
Container( Container(
width: progress * // width: progress *
// MediaQuery.of(context).size.width *
// 0.4,
width: progress /
100 *
MediaQuery.of(context).size.width * MediaQuery.of(context).size.width *
0.8, 0.8, // 进度条宽度按比例计算,最大宽度是屏幕宽度的 0.8
height: 21.rpx, height: 21.rpx,
decoration: BoxDecoration( decoration: BoxDecoration(
gradient: LinearGradient( gradient: LinearGradient(

View File

@@ -13,6 +13,7 @@ import 'package:vbvs_app/component/tool/ClickableContainer.dart';
import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/device/body_device_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/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/pages/device/component/DeviceDataComponentWidget.dart'; import 'package:vbvs_app/pages/device/component/DeviceDataComponentWidget.dart';
@@ -26,6 +27,7 @@ class BodyDeviceWidget extends StatefulWidget {
class _BodyDevicePageState extends State<BodyDeviceWidget> { class _BodyDevicePageState extends State<BodyDeviceWidget> {
final ThemeController themeController = Get.find(); final ThemeController themeController = Get.find();
final BodyDeviceController bodyDeviceController = Get.find(); final BodyDeviceController bodyDeviceController = Get.find();
HomeController homeController = Get.find();
final GlobalKey addIconKey = GlobalKey(); final GlobalKey addIconKey = GlobalKey();
OverlayEntry? _popupEntry; OverlayEntry? _popupEntry;
Timer? _timer; Timer? _timer;
@@ -300,9 +302,15 @@ class _BodyDevicePageState extends State<BodyDeviceWidget> {
onTap: () async { onTap: () async {
bodyDeviceController.model.type = bodyDeviceController.model.type =
1; 1;
homeController.model.type = 1;
await bodyDeviceController await bodyDeviceController
.getDeviceList(); .getDeviceList();
await bodyDeviceController
.getDeviceList();
await bodyDeviceController
.getSleepReport();
bodyDeviceController.updateAll(); bodyDeviceController.updateAll();
homeController.updateAll();
}, },
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@@ -348,11 +356,17 @@ class _BodyDevicePageState extends State<BodyDeviceWidget> {
borderRadius: 8.rpx, borderRadius: 8.rpx,
padding: EdgeInsets.all(0), padding: EdgeInsets.all(0),
onTap: () async { onTap: () async {
homeController.model.type = 2;
bodyDeviceController.model.type = bodyDeviceController.model.type =
2; 2;
await bodyDeviceController await bodyDeviceController
.getDeviceList(); .getDeviceList();
await bodyDeviceController
.getDeviceList();
await bodyDeviceController
.getSleepReport();
bodyDeviceController.updateAll(); bodyDeviceController.updateAll();
homeController.updateAll();
}, },
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@@ -536,8 +550,8 @@ class _BodyDevicePageState extends State<BodyDeviceWidget> {
color: themeController color: themeController
.currentColor.sc3, .currentColor.sc3,
), ),
cursorColor: themeController cursorColor: themeController
.currentColor.sc3, .currentColor.sc3,
), ),
), ),
), ),
@@ -601,7 +615,6 @@ class _BodyDevicePageState extends State<BodyDeviceWidget> {
), ),
), ),
), ),
Obx(() { Obx(() {
final isEmpty = final isEmpty =
bodyDeviceController.deviceList.value.isEmpty; bodyDeviceController.deviceList.value.isEmpty;

View File

@@ -299,7 +299,7 @@ class _DeviceDataComponentWidgetState extends State<DeviceDataComponentWidget> {
_popupEntry?.remove(); _popupEntry?.remove();
_popupEntry = null; _popupEntry = null;
BlueteethBindController blueteethBindController = Get.find(); BlueteethBindController blueteethBindController = Get.find();
blueteethBindController.currentDeviceMac = widget.device['mac']; blueteethBindController.currentDeviceMac?.value = widget.device['mac'];
Get.toNamed("/calibrationPage", arguments: 2); Get.toNamed("/calibrationPage", arguments: 2);
}, },
), ),
@@ -745,7 +745,7 @@ class _DeviceDataComponentWidgetState extends State<DeviceDataComponentWidget> {
), ),
), ),
Text( Text(
'张三', 'uusne12',
style: style:
FlutterFlowTheme.of(context).bodyMedium.override( FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: 'Inter', fontFamily: 'Inter',
@@ -1030,6 +1030,8 @@ class _DeviceDataComponentWidgetState extends State<DeviceDataComponentWidget> {
widget.device['person']['gender'] ?? 1; widget.device['person']['gender'] ?? 1;
personController.weight.value = personController.weight.value =
widget.device['person']['weight'] ?? 0; widget.device['person']['weight'] ?? 0;
personController.height.value =
widget.device['person']['height'] ?? 0;
personController.selectedDiseaseIds.value = personController.selectedDiseaseIds.value =
widget.device['person']['disease'] ?? []; widget.device['person']['disease'] ?? [];
personController.birthday.value = personController.birthday.value =

View File

@@ -490,110 +490,6 @@ class _CalibrationPageState extends State<CalibrationPage> {
child: CustomCard( child: CustomCard(
borderRadius: borderRadius:
AppConstants().button_container_radius, // 圆角半径 AppConstants().button_container_radius, // 圆角半径
// onTap: () async {
// BlueteethBindController blueteethBindController =
// Get.find();
// String serviceAddress = "http://192.168.1.80:8086";
// String serviceApi = ServiceConstant.start_calibration;
// String queryUrl = "${serviceAddress}${serviceApi}";
// requestWithLog(
// logTitle: "设备校准",
// method: MyHttpMethod.post,
// queryUrl: queryUrl,
// data: {
// "macA": blueteethBindController.currentDeviceMac,
// if (blueteethBindController.cid!.value.isNotEmpty)
// "id": blueteethBindController.cid!.value,
// },
// onSuccess: (res) {
// String cid = res.rawResponse.data['cid'];
// blueteethBindController.cid!.value = cid;
// final ValueNotifier<double> progressNotifier =
// ValueNotifier<double>(0.0);
// final ValueNotifier<bool> failureNotifier =
// ValueNotifier<bool>(false);
// Timer? pollingTimer;
// // 定义请求函数
// void requestCalibrationProgress() {
// String serviceAddress =
// "http://192.168.1.80:8086";
// String serviceApi =
// ServiceConstant.calibration_process;
// String queryUrl =
// "${serviceAddress}${serviceApi}?id=$cid";
// requestWithLog(
// logTitle: "设备校准进度",
// method: MyHttpMethod.get,
// queryUrl: queryUrl,
// onSuccess: (res) {
// print(res);
// deviceCalibrationController.tips.value =
// res.data['statusText'];
// if (res.data['per'] == 100) {
// TopSlideNotification.show(context,
// text: deviceCalibrationController
// .tips.value);
// }
// double process =
// (res.data['per'] ?? 0).toDouble();
// progressNotifier.value = process;
// if (process >= 100) {
// if (deviceCalibrationController
// .process.value ==
// 0) {
// deviceCalibrationController
// .bed_calibration.value = 1;
// deviceCalibrationController.updateAll();
// }
// if (deviceCalibrationController
// .process.value ==
// 1) {
// deviceCalibrationController
// .position_calibration.value = 1;
// deviceCalibrationController.updateAll();
// }
// deviceCalibrationController
// .process.value = 1;
// deviceCalibrationController.updateAll();
// pollingTimer?.cancel();
// }
// },
// onFailure: (res) {
// pollingTimer?.cancel();
// failureNotifier.value = true;
// TopSlideNotification.show(
// context,
// text: res.msg ?? "服务器.失败".tr,
// textColor:
// themeController.currentColor.sc9,
// );
// },
// );
// }
// // 启动轮询
// pollingTimer =
// Timer.periodic(Duration(seconds: 2), (timer) {
// requestCalibrationProgress();
// });
// // 初始调用一次
// requestCalibrationProgress();
// // 显示进度弹窗
// showProgressDialog(
// context, progressNotifier, failureNotifier);
// },
// onFailure: (res) {
// TopSlideNotification.show(
// context,
// text: res.msg ?? "服务器.失败".tr,
// textColor: themeController.currentColor.sc9,
// );
// },
// );
// },
onTap: () async { onTap: () async {
if (deviceCalibrationController.complete) { if (deviceCalibrationController.complete) {
showConfirmDialog( showConfirmDialog(
@@ -608,139 +504,279 @@ class _CalibrationPageState extends State<CalibrationPage> {
.position_calibration.value = 0; .position_calibration.value = 0;
blueteethBindController.cid!.value = ""; blueteethBindController.cid!.value = "";
deviceCalibrationController.complete = false; deviceCalibrationController.complete = false;
}, onCancel: () {});
}
BlueteethBindController blueteethBindController = String serviceAddress =
Get.find(); "https://caibration.he-info.cn";
String serviceAddress = "https://caibration.he-info.cn/"; String calibrationApi =
String calibrationApi = ServiceConstant.start_calibration;
ServiceConstant.start_calibration; String progressApi =
String progressApi = ServiceConstant.calibration_process;
ServiceConstant.calibration_process;
String queryUrl = "$serviceAddress$calibrationApi"; String queryUrl =
"$serviceAddress$calibrationApi";
final ValueNotifier<double> progressNotifier = final ValueNotifier<double> progressNotifier =
ValueNotifier<double>(0.0); ValueNotifier<double>(0.0);
final ValueNotifier<bool> failureNotifier = final ValueNotifier<bool> failureNotifier =
ValueNotifier<bool>(false); ValueNotifier<bool>(false);
Timer? pollingTimer; Timer? pollingTimer;
Map<String, dynamic> data = { Map<String, dynamic> data = {
"macA": blueteethBindController.currentDeviceMac, "macA": blueteethBindController
}; .currentDeviceMac!.value,
};
// 是否是二次点击有cid表示进行第二阶段 // 是否是二次点击有cid表示进行第二阶段
bool isSecondStep = bool isSecondStep = blueteethBindController
blueteethBindController.cid?.value.isNotEmpty ?? .cid?.value.isNotEmpty ??
false; false;
if (isSecondStep) { if (isSecondStep) {
data["id"] = blueteethBindController.cid!.value; data["id"] = blueteethBindController.cid!.value;
}
// 发起校准请求
requestWithLog(
logTitle: "设备校准",
method: MyHttpMethod.post,
queryUrl: queryUrl,
data: data,
onSuccess: (res) {
if (!isSecondStep) {
// 保存第一次获取的 cid
String cid = res.rawResponse.data['cid'];
blueteethBindController.cid!.value = cid;
} }
void requestCalibrationProgress() { // 发起校准请求
String cid = blueteethBindController.cid!.value; requestWithLog(
String progressUrl = logTitle: "设备校准",
"$serviceAddress$progressApi?id=$cid"; method: MyHttpMethod.post,
requestWithLog( queryUrl: queryUrl,
logTitle: "设备校准进度", data: data,
method: MyHttpMethod.get, onSuccess: (res) {
queryUrl: progressUrl, if (!isSecondStep) {
onSuccess: (res) { // 保存第一次获取的 cid
final data = res.data; String cid = res.rawResponse.data['cid'];
double per = (data['per'] ?? 0).toDouble(); blueteethBindController.cid!.value = cid;
int currStep = data['currStep'] ?? -1; }
bool status = data['status'] ?? false;
String tips = data['statusText'] ?? '';
deviceCalibrationController.tips.value = void requestCalibrationProgress() {
tips; String cid =
// progressNotifier.value = blueteethBindController.cid!.value;
// (res.data['per'] ?? 0) / 100.0; String progressUrl =
progressNotifier.value = per; "$serviceAddress$progressApi?id=$cid";
requestWithLog(
logTitle: "设备校准进度",
method: MyHttpMethod.get,
queryUrl: progressUrl,
onSuccess: (res) {
final data = res.data;
double per =
(data['per'] ?? 0).toDouble();
int currStep = data['currStep'] ?? -1;
bool status = data['status'] ?? false;
String tips = data['statusText'] ?? '';
if (!isSecondStep && per >= 100) { deviceCalibrationController.tips.value =
// 第一步完成:仅 per >= 100 tips;
pollingTimer?.cancel();
TopSlideNotification.show(context,
text: tips);
deviceCalibrationController
.process.value = 1;
deviceCalibrationController
.bed_calibration.value = 1;
deviceCalibrationController.updateAll(); progressNotifier.value = per;
} if (!isSecondStep && per >= 20) {
progressNotifier.value = 100;
// 第一步完成:仅 per >= 100
pollingTimer?.cancel();
TopSlideNotification.show(context,
text: tips);
deviceCalibrationController
.process.value = 1;
deviceCalibrationController
.bed_calibration.value = 1;
if (isSecondStep && deviceCalibrationController
per >= 100 && .updateAll();
currStep == 5 && }
status == true) {
// 第二步完成per >= 100 && currStep == 5 && status == true if (isSecondStep &&
pollingTimer?.cancel(); per >= 100 &&
TopSlideNotification.show(context, currStep == 5 &&
text: "设备校准完成".tr); status == true) {
// 可在这里执行校准完成后的业务逻辑更新 // 第二步完成per >= 100 && currStep == 5 && status == true
deviceCalibrationController pollingTimer?.cancel();
.bed_calibration.value = 1; TopSlideNotification.show(context,
deviceCalibrationController text: "设备校准完成".tr);
.position_calibration.value = 1; // 可在这里执行校准完成后的业务逻辑更新
deviceCalibrationController deviceCalibrationController
.process.value = 1; .bed_calibration.value = 1;
deviceCalibrationController.complete = deviceCalibrationController
true; .position_calibration.value = 1;
deviceCalibrationController.updateAll(); deviceCalibrationController
} .process.value = 1;
}, deviceCalibrationController.complete =
onFailure: (res) { true;
pollingTimer?.cancel(); deviceCalibrationController
failureNotifier.value = true; .updateAll();
TopSlideNotification.show( }
context, },
text: res.msg ?? "服务器.失败".tr, onFailure: (res) {
textColor: pollingTimer?.cancel();
themeController.currentColor.sc9, failureNotifier.value = true;
TopSlideNotification.show(
context,
text: res.msg ?? "服务器.失败".tr,
textColor:
themeController.currentColor.sc9,
);
},
); );
}, }
);
}
// 初始调用一次 // 初始调用一次
requestCalibrationProgress(); requestCalibrationProgress();
// 开始轮询 // 开始轮询
pollingTimer = pollingTimer =
Timer.periodic(Duration(seconds: 2), (_) { Timer.periodic(Duration(seconds: 2), (_) {
requestCalibrationProgress(); requestCalibrationProgress();
}); });
// 显示进度弹窗 // 显示进度弹窗
showProgressDialog( showProgressDialog(context, progressNotifier,
context, progressNotifier, failureNotifier); failureNotifier);
}, },
onFailure: (res) { onFailure: (res) {
TopSlideNotification.show( TopSlideNotification.show(
context, context,
text: res.msg ?? "服务器.失败".tr, text: res.msg ?? "服务器.失败".tr,
textColor: themeController.currentColor.sc9, textColor: themeController.currentColor.sc9,
);
},
); );
}, }, onCancel: () {
); return;
});
} else {
BlueteethBindController blueteethBindController =
Get.find();
String serviceAddress =
"https://caibration.he-info.cn";
String calibrationApi =
ServiceConstant.start_calibration;
String progressApi =
ServiceConstant.calibration_process;
String queryUrl = "$serviceAddress$calibrationApi";
final ValueNotifier<double> progressNotifier =
ValueNotifier<double>(0.0);
final ValueNotifier<bool> failureNotifier =
ValueNotifier<bool>(false);
Timer? pollingTimer;
Map<String, dynamic> data = {
"macA": blueteethBindController
.currentDeviceMac!.value,
};
// 是否是二次点击有cid表示进行第二阶段
bool isSecondStep =
blueteethBindController.cid?.value.isNotEmpty ??
false;
if (isSecondStep) {
data["id"] = blueteethBindController.cid!.value;
}
// 发起校准请求
requestWithLog(
logTitle: "设备校准",
method: MyHttpMethod.post,
queryUrl: queryUrl,
data: data,
onSuccess: (res) {
if (!isSecondStep) {
// 保存第一次获取的 cid
String cid = res.rawResponse.data['cid'];
blueteethBindController.cid!.value = cid;
}
void requestCalibrationProgress() {
String cid =
blueteethBindController.cid!.value;
String progressUrl =
"$serviceAddress$progressApi?id=$cid";
requestWithLog(
logTitle: "设备校准进度",
method: MyHttpMethod.get,
queryUrl: progressUrl,
onSuccess: (res) {
final data = res.data;
double per =
(data['per'] ?? 0).toDouble();
int currStep = data['currStep'] ?? -1;
bool status = data['status'] ?? false;
String tips = data['statusText'] ?? '';
deviceCalibrationController.tips.value =
tips;
progressNotifier.value = per;
if (!isSecondStep && per >= 20) {
progressNotifier.value = 100;
// 第一步完成:仅 per >= 100
pollingTimer?.cancel();
TopSlideNotification.show(context,
text: tips);
deviceCalibrationController
.process.value = 1;
deviceCalibrationController
.bed_calibration.value = 1;
deviceCalibrationController.updateAll();
}
if (isSecondStep &&
per >= 100 &&
currStep == 5 &&
status == true) {
// 第二步完成per >= 100 && currStep == 5 && status == true
pollingTimer?.cancel();
TopSlideNotification.show(context,
text: "设备校准完成".tr);
// 可在这里执行校准完成后的业务逻辑更新
deviceCalibrationController
.bed_calibration.value = 1;
deviceCalibrationController
.position_calibration.value = 1;
deviceCalibrationController
.process.value = 1;
deviceCalibrationController.complete =
true;
deviceCalibrationController.updateAll();
}
},
onFailure: (res) {
pollingTimer?.cancel();
failureNotifier.value = true;
TopSlideNotification.show(
context,
text: res.msg ?? "服务器.失败".tr,
textColor:
themeController.currentColor.sc9,
);
},
);
}
// 初始调用一次
requestCalibrationProgress();
// 开始轮询
pollingTimer =
Timer.periodic(Duration(seconds: 2), (_) {
requestCalibrationProgress();
});
// 显示进度弹窗
showProgressDialog(
context, progressNotifier, failureNotifier);
},
onFailure: (res) {
TopSlideNotification.show(
context,
text: res.msg ?? "服务器.失败".tr,
textColor: themeController.currentColor.sc9,
);
},
);
}
}, },
colors: [ colors: [

View File

@@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/component/tool/WebViewWidget.dart'; import 'package:vbvs_app/component/tool/WebViewWidget.dart';
import 'package:vbvs_app/controller/setting/pdf/PdfController.dart';
class HelpPage extends StatefulWidget { class HelpPage extends StatefulWidget {
late MyWebView webView; late MyWebView webView;
@@ -14,7 +13,7 @@ class HelpPage extends StatefulWidget {
} }
class _HelpPageState extends State<HelpPage> { class _HelpPageState extends State<HelpPage> {
PdfController pdfController = Get.find(); // PdfController pdfController = Get.find();
@override @override
void initState() { void initState() {
@@ -79,35 +78,6 @@ class _HelpPageState extends State<HelpPage> {
centerTitle: false, centerTitle: false,
), ),
// body: SafeArea(
// top: true,
// child: Padding(
// padding: EdgeInsets.symmetric(horizontal: 30.rpx),
// child: Column(
// children: [
// Expanded(
// child: Obx(() {
// if (pdfController.localPdfPath.value == null) {
// return Center(child: CircularProgressIndicator());
// } else {
// return PDFView(
// filePath: pdfController.localPdfPath.value!,
// autoSpacing: false,
// enableSwipe: true,
// swipeHorizontal: false,
// pageSnap: true,
// fitEachPage: true,
// defaultPage: 0,
// onRender: (pages) => print('PDF 渲染完成,共 $pages 页'),
// onError: (error) => print('PDF 加载错误: $error'),
// );
// }
// }),
// ),
// ],
// ),
// ),
// ),
body: SafeArea( body: SafeArea(
top: true, top: true,
child: Padding( child: Padding(

View File

@@ -18,6 +18,7 @@ import 'package:vbvs_app/controller/home/home_controller.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/controller/weather/weather_controller.dart';
import 'package:vbvs_app/enum/LoginStatus.dart'; import 'package:vbvs_app/enum/LoginStatus.dart';
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
@@ -33,6 +34,7 @@ class _HomePageState extends State<HomePage> {
ThemeController themeController = Get.find(); ThemeController themeController = Get.find();
BodyDeviceController deviceController = Get.find(); BodyDeviceController deviceController = Get.find();
HomeController homeController = Get.find(); HomeController homeController = Get.find();
WeatherModelController weatherModelController = Get.find();
final GlobalKey addIconKey = GlobalKey(); final GlobalKey addIconKey = GlobalKey();
OverlayEntry? _popupEntry; OverlayEntry? _popupEntry;
@@ -301,15 +303,18 @@ class _HomePageState extends State<HomePage> {
.normal_text_fontSize, .normal_text_fontSize,
), ),
), ),
Text( Obx(() {
"嘉兴 晴", return Text(
style: TextStyle( "嘉兴 " +
color: themeController "${weatherModelController.model.weather_info ?? '未知数据'.tr}",
.currentColor.sc4, style: TextStyle(
fontSize: AppConstants() color: themeController
.normal_text_fontSize, .currentColor.sc4,
), fontSize: AppConstants()
), .normal_text_fontSize,
),
);
}),
], ],
), ),
); );
@@ -362,11 +367,11 @@ class _HomePageState extends State<HomePage> {
backgroundColor: Colors.transparent, // 容器背景色 backgroundColor: Colors.transparent, // 容器背景色
highlightColor: themeController highlightColor: themeController
.currentColor.sc21, // 点击时的背景色 .currentColor.sc21, // 点击时的背景色
onTap: () { onTap: () async {
print('点击了容器'); print('点击了容器');
if (userInfoController.model.login == if (userInfoController.model.login ==
LoginStatus.LOGIN.code) { LoginStatus.LOGIN.code) {
Get.toNamed("/bodyDevice"); await Get.toNamed("/bodyDevice");
} else { } else {
TopSlideNotification.show( TopSlideNotification.show(
context, context,

View File

@@ -693,7 +693,7 @@ class _MinePageState extends State<MinePage> {
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
Text( Text(
'V1.0.2504.12', 'V1.0.2505.20',
style: style:
FlutterFlowTheme.of(context) FlutterFlowTheme.of(context)
.bodyMedium .bodyMedium

View File

@@ -1,30 +0,0 @@
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
class SleepReportPage extends StatefulWidget {
const SleepReportPage({super.key});
@override
State<SleepReportPage> createState() => _SleepReportPageState();
}
class _SleepReportPageState extends State<SleepReportPage> {
GlobalController globalController = Get.find();
UserInfoController userInfoController = Get.find();
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, boxConstraints) => GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Scaffold(
body: SafeArea(
top: true,
child: Text("睡眠报告"),
),
),
),
);
}
}

View File

@@ -108,6 +108,7 @@ class _UpdatePageState extends State<UpdatePersonPage> {
if (apiRespons.code == HttpStatusCodes.ok) { if (apiRespons.code == HttpStatusCodes.ok) {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: apiRespons.msg!); text: apiRespons.msg!);
} else { } else {
TopSlideNotification.show(context, TopSlideNotification.show(context,
text: apiRespons.msg!, text: apiRespons.msg!,
@@ -269,78 +270,6 @@ class _UpdatePageState extends State<UpdatePersonPage> {
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment.center,
children: [ children: [
// Column(
// mainAxisSize: MainAxisSize.max,
// children: [
// Container(
// width: 90.rpx,
// height: 90.rpx,
// decoration: BoxDecoration(),
// child: Container(
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// ),
// child: ColorFiltered(
// colorFilter: ColorFilter.mode(
// Colors.grey.withOpacity(
// 0.6), // 这里控制灰色度的强度
// BlendMode.saturation, // 将图像变成灰度
// ),
// child: Image.asset(
// "assets/img/man.png",
// fit: BoxFit.cover,
// ),
// ),
// ),
// ),
// Text(
// '男'.tr,
// style: FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: 26.rpx,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(height: 14.rpx)),
// ),
// Column(
// mainAxisSize: MainAxisSize.max,
// children: [
// Container(
// width: 90.rpx,
// height: 90.rpx,
// decoration: BoxDecoration(),
// child: Container(
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// ),
// child: Image.asset(
// "assets/img/woman.png",
// fit: BoxFit.cover,
// ),
// ),
// ),
// Text(
// '女'.tr,
// style: FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: 26.rpx,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(height: 14.rpx)),
// ),
Obx( Obx(
() { () {
bool isMaleGreyed = bool isMaleGreyed =

View File

@@ -1,32 +1,30 @@
import 'package:ef/ef.dart'; import 'package:ef/ef.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/WebViewWidget.dart';
import 'package:vbvs_app/controller/device/blueteeth_bind_controller.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
// import 'package:easydevice/easydevice.dart';
class AboutUsPage extends StatefulWidget { class AboutUsPage extends StatefulWidget {
const AboutUsPage({super.key}); late MyWebView webView;
AboutUsPage({super.key});
@override @override
State<AboutUsPage> createState() => _AboutUsPageState(); State<AboutUsPage> createState() => _AboutUsPageState();
} }
class _AboutUsPageState extends State<AboutUsPage> { class _AboutUsPageState extends State<AboutUsPage> {
GlobalController globalController = Get.find();
UserInfoController userInfoController = Get.find();
BlueteethBindController blueteethBindController = Get.find();
ThemeController themeController = Get.find();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// pdfController.loadPdf();
widget.webView = MyWebView(
url: "https://mp.weixin.qq.com/s/IAr4RNBy0hGJXGKyMxe7eQ",
onLoad: () {
print('网页载入完毕');
},
);
} }
@override @override
@@ -45,10 +43,9 @@ class _AboutUsPageState extends State<AboutUsPage> {
backgroundColor: Colors.transparent, // 加上这一行 backgroundColor: Colors.transparent, // 加上这一行
appBar: AppBar( appBar: AppBar(
backgroundColor: themeController.currentColor.sc17, backgroundColor: themeController.currentColor.sc17,
// backgroundColor: Colors.transparent,
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
iconTheme: IconThemeData( iconTheme: IconThemeData(color: themeController.currentColor.sc3),
color: themeController.currentColor.sc3,
),
titleSpacing: 0, titleSpacing: 0,
// leading: returnIconButtom, // leading: returnIconButtom,
title: Container( title: Container(
@@ -59,7 +56,7 @@ class _AboutUsPageState extends State<AboutUsPage> {
children: [ children: [
/// 居中标题 /// 居中标题
Text( Text(
'关于我们.标题'.tr, '关于我们'.tr,
style: FlutterFlowTheme.of(context).bodyMedium.override( style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: themeController.currentColor.sc3, color: themeController.currentColor.sc3,
@@ -80,336 +77,47 @@ class _AboutUsPageState extends State<AboutUsPage> {
actions: [], actions: [],
centerTitle: false, centerTitle: false,
), ),
// body: SafeArea(
// top: true,
// child: Padding(
// padding: EdgeInsets.symmetric(horizontal: 30.rpx),
// child: Column(
// children: [
// Expanded(
// child: Obx(() {
// if (pdfController.localPdfPath.value == null) {
// return Center(child: CircularProgressIndicator());
// } else {
// return PDFView(
// filePath: pdfController.localPdfPath.value!,
// autoSpacing: false,
// enableSwipe: true,
// swipeHorizontal: false,
// pageSnap: true,
// fitEachPage: true,
// defaultPage: 0,
// onRender: (pages) => print('PDF 渲染完成,共 $pages 页'),
// onError: (error) => print('PDF 加载错误: $error'),
// );
// }
// }),
// ),
// ],
// ),
// ),
// ),
body: SafeArea( body: SafeArea(
top: true, top: true,
child: Padding( child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 0, 30.rpx, 0), padding: EdgeInsets.symmetric(horizontal: 30.rpx),
child: SingleChildScrollView( child: Column(children: [
child: Column( Expanded(
mainAxisSize: MainAxisSize.max, child: Container(
children: [ child: widget.webView,
// Padding( ),
// padding: EdgeInsetsDirectional.fromSTEB(
// 30.rpx, 25.rpx, 30.rpx, 0),
// child: Container(
// width: double.infinity,
// decoration: BoxDecoration(
// color: Color(0xFF242835),
// borderRadius: BorderRadius.circular(
// AppConstants().normal_container_radius),
// ),
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 0, 0.rpx, 0),
// child: Column(
// mainAxisSize: MainAxisSize.max,
// children: [
// ClickableContainer(
// backgroundColor: Colors.transparent, // 容器背景色
// highlightColor: themeController
// .currentColor.sc21, // 点击时的背景色
// padding: EdgeInsetsDirectional.fromSTEB(
// 40.rpx, 0.rpx, 40.rpx, 0.rpx),
// onTap: () {
// print('点击了容器');
// },
// child: Container(
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 20.rpx, 0.rpx, 20.rpx),
// child: Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '设置页.主题模式'.tr,
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: AppConstants()
// .title_text_fontSize,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(width: 22.rpx)),
// ),
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '深色',
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color:
// Color(0xFFD9E3EB),
// fontSize: 26.rpx,
// letterSpacing: 0.0,
// ),
// ),
// SvgPicture.asset(
// 'assets/img/icon/arrow_right.svg',
// width: 8.rpx,
// height: 15
// .rpx, // 如果 SVG 中没有固定颜色,可以这样设置
// color: themeController
// .currentColor.sc3,
// ),
// ].divide(SizedBox(width: 28.rpx)),
// ),
// ],
// ),
// ),
// ),
// ),
// ClickableContainer(
// backgroundColor: Colors.transparent, // 容器背景色
// highlightColor: themeController
// .currentColor.sc21, // 点击时的背景色
// padding: EdgeInsetsDirectional.fromSTEB(
// 40.rpx, 0.rpx, 40.rpx, 0.rpx),
// onTap: () {
// print('点击了容器');
// },
// child: Container(
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 20.rpx, 0.rpx, 20.rpx),
// child: Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '设置页.选择语言'.tr,
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: AppConstants()
// .title_text_fontSize,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(width: 22.rpx)),
// ),
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '中文',
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color:
// Color(0xFFD9E3EB),
// fontSize: 26.rpx,
// letterSpacing: 0.0,
// ),
// ),
// SvgPicture.asset(
// 'assets/img/icon/arrow_right.svg',
// width: 8.rpx,
// height: 15
// .rpx, // 如果 SVG 中没有固定颜色,可以这样设置
// color: themeController
// .currentColor.sc3,
// ),
// ].divide(SizedBox(width: 28.rpx)),
// ),
// ],
// ),
// ),
// ),
// ),
// ClickableContainer(
// backgroundColor: Colors.transparent, // 容器背景色
// highlightColor: themeController
// .currentColor.sc21, // 点击时的背景色
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 0.rpx, 0.rpx, 0.rpx),
// onTap: () {
// print('点击了容器');
// },
// child: Container(
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 40.rpx, 20.rpx, 40.rpx, 20.rpx),
// child: Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '设置页.关于我们'.tr,
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: AppConstants()
// .title_text_fontSize,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(width: 22.rpx)),
// ),
// SvgPicture.asset(
// 'assets/img/icon/arrow_right.svg',
// width: 8.rpx,
// height:
// 14.rpx, // 如果 SVG 中没有固定颜色,可以这样设置
// color: themeController
// .currentColor.sc3,
// ),
// ],
// ),
// ),
// ),
// ),
// ClickableContainer(
// backgroundColor: Colors.transparent, // 容器背景色
// highlightColor: themeController
// .currentColor.sc21, // 点击时的背景色
// padding: EdgeInsetsDirectional.fromSTEB(
// 40.rpx, 0.rpx, 40.rpx, 0.rpx),
// onTap: () {
// print('点击了容器');
// },
// child: Container(
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 20.rpx, 0.rpx, 20.rpx),
// child: Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '设置页.用户协议'.tr,
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: AppConstants()
// .title_text_fontSize,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(width: 22.rpx)),
// ),
// SvgPicture.asset(
// 'assets/img/icon/arrow_right.svg',
// width: 8.rpx,
// height:
// 15.rpx, // 如果 SVG 中没有固定颜色,可以这样设置
// color: themeController
// .currentColor.sc3,
// ),
// ],
// ),
// ),
// ),
// ),
// ClickableContainer(
// backgroundColor: Colors.transparent, // 容器背景色
// highlightColor: themeController
// .currentColor.sc21, // 点击时的背景色
// padding: EdgeInsetsDirectional.fromSTEB(
// 0.rpx, 0.rpx, 0.rpx, 0.rpx),
// onTap: () {
// print('点击了容器');
// },
// child: Container(
// child: Padding(
// padding: EdgeInsetsDirectional.fromSTEB(
// 40.rpx, 20.rpx, 40.rpx, 20.rpx),
// child: Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Text(
// '设置页.隐私协议'.tr,
// style:
// FlutterFlowTheme.of(context)
// .bodyMedium
// .override(
// fontFamily: 'Inter',
// color: themeController
// .currentColor.sc3,
// fontSize: AppConstants()
// .title_text_fontSize,
// letterSpacing: 0.0,
// ),
// ),
// ].divide(SizedBox(width: 22.rpx)),
// ),
// SvgPicture.asset(
// 'assets/img/icon/arrow_right.svg',
// width: 8.rpx,
// height:
// 14.rpx, // 如果 SVG 中没有固定颜色,可以这样设置
// color: themeController
// .currentColor.sc3,
// ),
// ],
// ),
// ),
// ),
// ),
// ]
// .divide(SizedBox(height: 0.rpx))
// .addToStart(SizedBox(height: 30.rpx))
// .addToEnd(SizedBox(height: 30.rpx)),
// ),
// ),
// ),
// ),
SizedBox(
height: 30.rpx,
),
Text(
"企业简介\n\n\n嘉兴太和信息技术有限公司成立于2013年是一家以传感技术、室内定位技术和人工智能技术为基础的国家高新技术企业AI非接触生命体征传感器、高精度室内外一体定位平台、AI视频分析系统、射频消融等技术成果目前已经拥有30多类知识产权证书多项专利技术处于行业领先水平。\n\n\n我司研发的“非接触式生命体征传感器”是一款基于BCG信号原理通过检测人体心脏搏动引起的微小振动的传感器系统。传感器系统通过将人体微弱的心跳、呼吸信号转换未电信号进行相关生命体征分析。该传感器可为用户提供高灵敏度和精确度检测结构适用于需要非接触式、高分辨率的监测场景。该系统的硬件、软件及生产维护均由我司自主开发和管理拥有完全自主知识产权并已申请多项国家专利可依据用户需求定制个性化方案。\n\n\n该产品置于床垫下方使用全程完全无感。采集的体征数据通过睡眠健康管理平台实时显示用户的健康状态并对每次的睡眠报告进行系统化归档管理支持长期查询。一旦用户在使用过程中出现异常情况系统可及时做出判断并反馈预警信息和建议。目前心率监测的准确度可达97%以上呼吸监测的准确度可达95%以上,其他生理指标的监测精度也显著优于同类产品。该产品主体材质均采用符合国家标准的环保材料,部分硅胶配件达到食品级安全标准。产品尺寸可根据需求进行定制,适用于单人床、双人床、婴儿床、椅子及枕头等多种场景。\n\n\n睡眠健康管理平台通过实时预警与远程管理,提升睡眠质量及慢病干预效率,助力养老院、月子中心、康复中心、智能寝具等行业降本增效,实现精准健康的科学管理。",
style: TextStyle(
fontSize: AppConstants().normal_text_fontSize,
color: themeController.currentColor.sc3),
),
],
), ),
), ]),
), ),
), ),
), ),
@@ -417,51 +125,4 @@ class _AboutUsPageState extends State<AboutUsPage> {
), ),
); );
} }
Widget _buildDeviceCard(BuildContext context,
{required String title, required String imageUrl, required String type}) {
return CustomCard(
borderRadius: 20.rpx, // 圆角大小
onTap: () {
if (type != null) {
if (type == '1') {
Get.toNamed("/blueteethDevice");
}
}
},
colors: [themeController.currentColor.sc17], // 背景色
child: Container(
width: double.infinity,
height: MediaQuery.sizeOf(context).height * 0.135,
constraints: BoxConstraints(
minHeight: 220.rpx,
),
padding: EdgeInsetsDirectional.fromSTEB(77.rpx, 0, 21.rpx, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: 'Inter',
color: const Color(0xFFC2CED7),
fontSize: 30.rpx,
letterSpacing: 0.0,
),
),
ClipRRect(
borderRadius: BorderRadius.circular(8.rpx),
child: Image.asset(
imageUrl,
width: 212.rpx,
height: 168.rpx,
),
),
],
),
),
);
}
} }

View File

@@ -313,8 +313,9 @@ class _SettingPageState extends State<SettingPage> {
padding: EdgeInsetsDirectional.fromSTEB( padding: EdgeInsetsDirectional.fromSTEB(
40.rpx, 0.rpx, 40.rpx, 0.rpx), 40.rpx, 0.rpx, 40.rpx, 0.rpx),
onTap: () { onTap: () {
TopSlideNotification.show(context, // TopSlideNotification.show(context,
text: "待开发功能".tr); // text: "待开发功能".tr);
Get.toNamed("/userSchemePage");
}, },
child: Container( child: Container(
child: Padding( child: Padding(
@@ -364,8 +365,9 @@ class _SettingPageState extends State<SettingPage> {
padding: EdgeInsetsDirectional.fromSTEB( padding: EdgeInsetsDirectional.fromSTEB(
0.rpx, 0.rpx, 0.rpx, 0.rpx), 0.rpx, 0.rpx, 0.rpx, 0.rpx),
onTap: () { onTap: () {
TopSlideNotification.show(context, // TopSlideNotification.show(context,
text: "待开发功能".tr); // text: "待开发功能".tr);
Get.toNamed("/privacyPage");
}, },
child: Container( child: Container(
child: Padding( child: Padding(

View File

@@ -32,8 +32,10 @@ import 'package:vbvs_app/pages/setting/language_setting.dart';
import 'package:vbvs_app/pages/sleep_report/new_sleep_report_page.dart'; import 'package:vbvs_app/pages/sleep_report/new_sleep_report_page.dart';
import 'package:vbvs_app/pages/sleep_report/sleep_report_page.dart'; import 'package:vbvs_app/pages/sleep_report/sleep_report_page.dart';
import 'package:vbvs_app/pages/user/about_us_page.dart'; import 'package:vbvs_app/pages/user/about_us_page.dart';
import 'package:vbvs_app/pages/user/privacy_scheme_page.dart';
import 'package:vbvs_app/pages/user/setting_page.dart'; import 'package:vbvs_app/pages/user/setting_page.dart';
import 'package:vbvs_app/pages/user/update_user_page.dart'; import 'package:vbvs_app/pages/user/update_user_page.dart';
import 'package:vbvs_app/pages/user/user_scheme_page.dart';
ThemeController themeController = Get.find(); ThemeController themeController = Get.find();
@@ -75,6 +77,8 @@ var routes = {
"/repairListPage": (contxt) => RepairListPage(), "/repairListPage": (contxt) => RepairListPage(),
"/newSleepReportPage": (contxt, {arguments}) => "/newSleepReportPage": (contxt, {arguments}) =>
NewSleepReportPage(date: arguments), NewSleepReportPage(date: arguments),
"/userSchemePage": (contxt) => UserSchemePage(),
"/privacyPage": (contxt) => PrivacySchemePage(),
}; };
var onGenerateRoute = (RouteSettings settings) { var onGenerateRoute = (RouteSettings settings) {

View File

@@ -13,6 +13,7 @@ import flutter_blue_plus
import flutter_inappwebview_macos import flutter_inappwebview_macos
import flutter_localization import flutter_localization
import flutter_web_auth_2 import flutter_web_auth_2
import geolocator_apple
import google_sign_in_ios import google_sign_in_ios
import mobile_scanner import mobile_scanner
import package_info_plus import package_info_plus
@@ -33,6 +34,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin")) InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
FlutterLocalizationPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalizationPlugin")) FlutterLocalizationPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalizationPlugin"))
FlutterWebAuth2Plugin.register(with: registry.registrar(forPlugin: "FlutterWebAuth2Plugin")) FlutterWebAuth2Plugin.register(with: registry.registrar(forPlugin: "FlutterWebAuth2Plugin"))
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))

View File

@@ -6,7 +6,7 @@ packages:
description: description:
path: "." path: "."
ref: master ref: master
resolved-ref: "700479d131b6230d87aebae94ea610ca3a8decfc" resolved-ref: cff5448fe07ca7f2141dcb1b7c5ee430ca44d64d
url: "http://git.real.he-info.cn:8080/r/~qmqz/EasyDartModule.git" url: "http://git.real.he-info.cn:8080/r/~qmqz/EasyDartModule.git"
source: git source: git
version: "1.0.0" version: "1.0.0"
@@ -507,7 +507,7 @@ packages:
description: description:
path: "." path: "."
ref: main ref: main
resolved-ref: d0019caff020ccfda92c337d0d9a4e4670eecc54 resolved-ref: "623980055c62d475ab13921d520eacac237ca070"
url: "http://admin@git.real.he-info.cn:8080/r/ef.git" url: "http://admin@git.real.he-info.cn:8080/r/ef.git"
source: git source: git
version: "0.0.1" version: "0.0.1"
@@ -848,10 +848,90 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: functions_client name: functions_client
sha256: a49876ebae32a50eb62483c5c5ac80ed0d8da34f98ccc23986b03a8d28cee07c sha256: b410e4d609522357396cd84bb9a8f6e3a4561b5f7d3ce82267f6f1c2af42f16b
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.4.1" version: "2.4.2"
geocoding:
dependency: "direct main"
description:
name: geocoding
sha256: b34c0501bbbaf3190b85bef3078b27cf66c28a8915c6d3af50d67f356aa7da31
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
geocoding_android:
dependency: transitive
description:
name: geocoding_android
sha256: "609db1d71bc364dd9d0616f72a41c01e0c74f3a3807efb85e0d5a67e57baf50f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.2"
geocoding_ios:
dependency: transitive
description:
name: geocoding_ios
sha256: "8f79e380abb640ef4d88baee8bb65390058c802601158d0813dc990b36b189d2"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
geocoding_platform_interface:
dependency: transitive
description:
name: geocoding_platform_interface
sha256: "8848605d307d844d89937cdb4b8ad7dfa880552078f310fa24d8a460f6dddab4"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
sha256: afebc912cbe6496e8823e064ca519afb5610072bb9c4a9feea715f6feb4f7f28
url: "https://pub.flutter-io.cn"
source: hosted
version: "13.0.3"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
sha256: fcb1760a50d7500deca37c9a666785c047139b5f9ee15aa5469fae7dbbe3170d
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.6.2"
geolocator_apple:
dependency: transitive
description:
name: geolocator_apple
sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.13"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67"
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.2.6"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.3"
geolocator_windows:
dependency: transitive
description:
name: geolocator_windows
sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.5"
get: get:
dependency: transitive dependency: transitive
description: description:
@@ -944,10 +1024,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: gotrue name: gotrue
sha256: d6362dff9a54f8c1c372bb137c858b4024c16407324d34e6473e59623c9b9f50 sha256: "04a6efacffd42773ed96dc752f19bb20a1fbc383e81ba82659072b775cf62912"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.11.1" version: "2.12.0"
graphs: graphs:
dependency: transitive dependency: transitive
description: description:
@@ -984,10 +1064,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: http name: http
sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.3.0" version: "1.4.0"
http2: http2:
dependency: transitive dependency: transitive
description: description:
@@ -1282,7 +1362,7 @@ packages:
path: "." path: "."
ref: main ref: main
resolved-ref: "7302210bd91f839b7ed63c6aa94af6c75f25c67a" resolved-ref: "7302210bd91f839b7ed63c6aa94af6c75f25c67a"
url: "https://git.wslpc.real.he-info.cn:94/r/mongows.git" url: "https://gitea.wslpc.real.he-info.cn:94/flutter/mongows.git"
source: git source: git
version: "0.10.3" version: "0.10.3"
mqtt5_client: mqtt5_client:
@@ -1569,10 +1649,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: postgrest name: postgrest
sha256: b74dc0f57b5dca5ce9f57a54b08110bf41d6fc8a0483c0fec10c79e9aa0fb2bb sha256: "10b81a23b1c829ccadf68c626b4d66666453a1474d24c563f313f5ca7851d575"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.4.1" version: "2.4.2"
power_extensions: power_extensions:
dependency: transitive dependency: transitive
description: description:
@@ -1593,10 +1673,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: provider name: provider
sha256: "489024f942069c2920c844ee18bb3d467c69e48955a4f32d1677f71be103e310" sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "6.1.4" version: "6.1.5"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@@ -1641,10 +1721,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: realtime_client name: realtime_client
sha256: e3089dac2121917cc0c72d42ab056fea0abbaf3c2229048fc50e64bafc731adf sha256: "3a0a99b5bd0fc3b35e8ee846d9a22fa2c2117f7ef1cb73d1e5f08f6c3d09c4e9"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.4.2" version: "2.5.0"
redis: redis:
dependency: transitive dependency: transitive
description: description:
@@ -1902,10 +1982,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: storage_client name: storage_client
sha256: "9f9ed283943313b23a1b27139bb18986e9b152a6d34530232c702c468d98e91a" sha256: "09bac4d75eea58e8113ca928e6655a09cc8059e6d1b472ee801f01fde815bcfc"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.3.1" version: "2.4.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
@@ -1942,18 +2022,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: supabase name: supabase
sha256: c3ebddba69ddcf16d8b78e8c44c4538b0193d1cf944fde3b72eb5b279892a370 sha256: f00172f5f0b2148ea1c573f52862d50cacb6f353f579f741fa35e51704845958
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.6.3" version: "2.7.0"
supabase_flutter: supabase_flutter:
dependency: transitive dependency: transitive
description: description:
name: supabase_flutter name: supabase_flutter
sha256: "3b5b5b492e342f63f301605d0c66f6528add285b5744f53c9fd9abd5ffdbce5b" sha256: d88eccf9e46e57129725a08e72a3109b6f780921fdc27fe3d7669a11ae80906b
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.8.4" version: "2.9.0"
syncfusion_flutter_core: syncfusion_flutter_core:
dependency: transitive dependency: transitive
description: description:
@@ -2006,10 +2086,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: timeago name: timeago
sha256: "054cedf68706bb142839ba0ae6b135f6b68039f0b8301cbe8784ae653d5ff8de" sha256: b05159406a97e1cbb2b9ee4faa9fb096fe0e2dfcd8b08fcd2a00553450d3422e
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.7.0" version: "3.7.1"
timing: timing:
dependency: transitive dependency: transitive
description: description:
@@ -2178,6 +2258,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
weather:
dependency: "direct main"
description:
name: weather
sha256: "7d49931907242b2ae13f772ff9a721c51d54944f46e527ae41de68cb5c971267"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.1"
web: web:
dependency: transitive dependency: transitive
description: description:
@@ -2190,10 +2278,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web_socket name: web_socket
sha256: bfe6f435f6ec49cb6c01da1e275ae4228719e59a6b067048c51e72d9d63bcc4b sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.0" version: "1.0.1"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
@@ -2222,18 +2310,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_platform_interface name: webview_flutter_platform_interface
sha256: "18b1640839cf6546784a524c72aded5b6e86b23e7167dc2311cc96f7658b64bd" sha256: "7cb32b21825bd65569665c32bb00a34ded5779786d6201f5350979d2d529940d"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.11.0" version: "2.13.0"
webview_flutter_wkwebview: webview_flutter_wkwebview:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: c9f9be526fa0d3347374ceaa05c4b3acb85f4f112abd62f7d74b7d301fa515ff sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.20.0" version: "3.22.0"
webviewx_plus: webviewx_plus:
dependency: transitive dependency: transitive
description: description:
@@ -2294,10 +2382,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: yet_another_json_isolate name: yet_another_json_isolate
sha256: "56155e9e0002cc51ea7112857bbcdc714d4c35e176d43e4d3ee233009ff410c9" sha256: fe45897501fa156ccefbfb9359c9462ce5dec092f05e8a56109db30be864f01e
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.3" version: "2.1.0"
sdks: sdks:
dart: ">=3.5.4 <4.0.0" dart: ">=3.5.4 <4.0.0"
flutter: ">=3.24.0" flutter: ">=3.24.0"

View File

@@ -33,7 +33,7 @@ dependencies:
flutter_blue_plus: ^1.35.3 flutter_blue_plus: ^1.35.3
permission_handler: ^12.0.0+1 permission_handler: ^12.0.0+1
loading_indicator: ^3.1.1 loading_indicator: ^3.1.1
# geolocator: ^13.0.4 geolocator: ^13.0.1
easydevice: easydevice:
path: C:\Users\wyf\Desktop\blue\easydevice path: C:\Users\wyf\Desktop\blue\easydevice
# url: http:///enchantedwyf@git.it.real.he-info.cn:90/r/easydevice.git # url: http:///enchantedwyf@git.it.real.he-info.cn:90/r/easydevice.git
@@ -49,6 +49,8 @@ dependencies:
google_sign_in: ^6.2.1 google_sign_in: ^6.2.1
path: ^1.8.0 path: ^1.8.0
flutter_pdfview: ^1.4.0+1 flutter_pdfview: ^1.4.0+1
weather: ^3.1.1
geocoding: ^2.1.0
dev_dependencies: dev_dependencies:
@@ -63,6 +65,9 @@ dependency_overrides:
collection: ^1.19.0 collection: ^1.19.0
data_table_2: 2.5.16 # 2.5.17版本以后会报错,data_table_2.dart:525:47: Error:The method 'withValues' isn't defined ffor the class 'Color' data_table_2: 2.5.16 # 2.5.17版本以后会报错,data_table_2.dart:525:47: Error:The method 'withValues' isn't defined ffor the class 'Color'
flutter_blue_plus: 1.34.5 # 1.35.0 版本android连接蓝牙有问题 flutter_blue_plus: 1.34.5 # 1.35.0 版本android连接蓝牙有问题
geolocator: 13.0.3
geocoding: 2.1.0
flutter: flutter:

View File

@@ -10,6 +10,7 @@
#include <connectivity_plus/connectivity_plus_windows_plugin.h> #include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h> #include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
#include <flutter_localization/flutter_localization_plugin_c_api.h> #include <flutter_localization/flutter_localization_plugin_c_api.h>
#include <geolocator_windows/geolocator_windows.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h> #include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <rive_common/rive_plugin.h> #include <rive_common/rive_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h> #include <url_launcher_windows/url_launcher_windows.h>
@@ -24,6 +25,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi")); registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi"));
FlutterLocalizationPluginCApiRegisterWithRegistrar( FlutterLocalizationPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterLocalizationPluginCApi")); registry->GetRegistrarForPlugin("FlutterLocalizationPluginCApi"));
GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows"));
PermissionHandlerWindowsPluginRegisterWithRegistrar( PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
RivePluginRegisterWithRegistrar( RivePluginRegisterWithRegistrar(

View File

@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
connectivity_plus connectivity_plus
flutter_inappwebview_windows flutter_inappwebview_windows
flutter_localization flutter_localization
geolocator_windows
permission_handler_windows permission_handler_windows
rive_common rive_common
url_launcher_windows url_launcher_windows