更新
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -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>
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -358,6 +358,8 @@
|
|||||||
"微信客服提示":"请先安装微信APP,再联系客服",
|
"微信客服提示":"请先安装微信APP,再联系客服",
|
||||||
"打开微信客服提示":"正在打开微信客服...",
|
"打开微信客服提示":"正在打开微信客服...",
|
||||||
"身高":"身高",
|
"身高":"身高",
|
||||||
"身高输入提示":"请输入身高"
|
"身高输入提示":"请输入身高",
|
||||||
|
"用户协议":"用户协议",
|
||||||
|
"隐私协议":"隐私协议"
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 密钥
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 路径
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()),
|
||||||
]));
|
]));
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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,
|
||||||
@@ -601,7 +615,6 @@ class _BodyDevicePageState extends State<BodyDeviceWidget> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final isEmpty =
|
final isEmpty =
|
||||||
bodyDeviceController.deviceList.value.isEmpty;
|
bodyDeviceController.deviceList.value.isEmpty;
|
||||||
|
|||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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,12 +504,149 @@ 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: () {});
|
|
||||||
|
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,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}, onCancel: () {
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
BlueteethBindController blueteethBindController =
|
BlueteethBindController blueteethBindController =
|
||||||
Get.find();
|
Get.find();
|
||||||
String serviceAddress = "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 =
|
||||||
@@ -628,7 +661,8 @@ class _CalibrationPageState extends State<CalibrationPage> {
|
|||||||
Timer? pollingTimer;
|
Timer? pollingTimer;
|
||||||
|
|
||||||
Map<String, dynamic> data = {
|
Map<String, dynamic> data = {
|
||||||
"macA": blueteethBindController.currentDeviceMac,
|
"macA": blueteethBindController
|
||||||
|
.currentDeviceMac!.value,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 是否是二次点击(有cid表示进行第二阶段)
|
// 是否是二次点击(有cid表示进行第二阶段)
|
||||||
@@ -654,7 +688,8 @@ class _CalibrationPageState extends State<CalibrationPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void requestCalibrationProgress() {
|
void requestCalibrationProgress() {
|
||||||
String cid = blueteethBindController.cid!.value;
|
String cid =
|
||||||
|
blueteethBindController.cid!.value;
|
||||||
String progressUrl =
|
String progressUrl =
|
||||||
"$serviceAddress$progressApi?id=$cid";
|
"$serviceAddress$progressApi?id=$cid";
|
||||||
requestWithLog(
|
requestWithLog(
|
||||||
@@ -663,18 +698,18 @@ class _CalibrationPageState extends State<CalibrationPage> {
|
|||||||
queryUrl: progressUrl,
|
queryUrl: progressUrl,
|
||||||
onSuccess: (res) {
|
onSuccess: (res) {
|
||||||
final data = res.data;
|
final data = res.data;
|
||||||
double per = (data['per'] ?? 0).toDouble();
|
double per =
|
||||||
|
(data['per'] ?? 0).toDouble();
|
||||||
int currStep = data['currStep'] ?? -1;
|
int currStep = data['currStep'] ?? -1;
|
||||||
bool status = data['status'] ?? false;
|
bool status = data['status'] ?? false;
|
||||||
String tips = data['statusText'] ?? '';
|
String tips = data['statusText'] ?? '';
|
||||||
|
|
||||||
deviceCalibrationController.tips.value =
|
deviceCalibrationController.tips.value =
|
||||||
tips;
|
tips;
|
||||||
// progressNotifier.value =
|
|
||||||
// (res.data['per'] ?? 0) / 100.0;
|
|
||||||
progressNotifier.value = per;
|
|
||||||
|
|
||||||
if (!isSecondStep && per >= 100) {
|
progressNotifier.value = per;
|
||||||
|
if (!isSecondStep && per >= 20) {
|
||||||
|
progressNotifier.value = 100;
|
||||||
// 第一步完成:仅 per >= 100
|
// 第一步完成:仅 per >= 100
|
||||||
pollingTimer?.cancel();
|
pollingTimer?.cancel();
|
||||||
TopSlideNotification.show(context,
|
TopSlideNotification.show(context,
|
||||||
@@ -741,6 +776,7 @@ class _CalibrationPageState extends State<CalibrationPage> {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
colors: [
|
colors: [
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
"嘉兴 " +
|
||||||
|
"${weatherModelController.model.weather_info ?? '未知数据'.tr}",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: themeController
|
color: themeController
|
||||||
.currentColor.sc4,
|
.currentColor.sc4,
|
||||||
fontSize: AppConstants()
|
fontSize: AppConstants()
|
||||||
.normal_text_fontSize,
|
.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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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("睡眠报告"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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,386 +77,50 @@ 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,
|
|
||||||
children: [
|
|
||||||
// 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),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
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(
|
child: Container(
|
||||||
width: double.infinity,
|
child: widget.webView,
|
||||||
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,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
150
pubspec.lock
150
pubspec.lock
@@ -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"
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user