This commit is contained in:
wyf
2025-08-18 18:19:56 +08:00
parent 111bd78a24
commit e5e405f205
23 changed files with 337 additions and 212 deletions

View File

@@ -36,8 +36,8 @@ if (flutterVersionName == null) {
} }
android { android {
// namespace = "com.taihe.vbvs_app" namespace = "com.taihe.vbvs_app"
namespace = "com.taihe.mianhuatang" // namespace = "com.taihe.mianhuatang"
// compileSdk = flutter.compileSdkVersion // compileSdk = flutter.compileSdkVersion
compileSdk = localProperties.getProperty('flutter.compileSdkVersion').toInteger() compileSdk = localProperties.getProperty('flutter.compileSdkVersion').toInteger()
@@ -56,8 +56,8 @@ android {
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
// applicationId "com.taihe.vbvs_app" applicationId "com.taihe.vbvs_app"
applicationId "com.taihe.mianhuatang" // applicationId "com.taihe.mianhuatang"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
// minSdk = flutter.minSdkVersion // minSdk = flutter.minSdkVersion

View File

@@ -6,7 +6,7 @@ plugins {
} }
android { android {
namespace = "com.taihe.mianhuatang" namespace = "com.taihe.vbvs_app"
compileSdk = flutter.compileSdkVersion compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion ndkVersion = flutter.ndkVersion
@@ -21,7 +21,7 @@ android {
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.taihe.mianhuatang" applicationId = "com.taihe.vbvs_app"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config. // For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion minSdk = flutter.minSdkVersion

View File

@@ -1,8 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- New permissions in Android 13 --> <!-- New permissions in Android 13 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
@@ -43,12 +43,12 @@
<application <application
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launchermh" android:icon="@mipmap/ic_launcher"
android:label="智慧眠花糖" android:label="太和e护"
android:enableOnBackInvokedCallback="true" android:enableOnBackInvokedCallback="true"
> >
<activity <activity
android:name="com.taihe.mianhuatang.MainActivity" android:name="com.taihe.vbvs_app.MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:exported="true" android:exported="true"

View File

@@ -1,4 +1,4 @@
package com.taihe.mianhuatang package com.taihe.vbvs_app
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.android.FlutterActivity

View File

@@ -3,7 +3,7 @@
"菜单": { "菜单": {
"首页": "Home", "首页": "Home",
"报告": "Report", "报告": "Report",
"小e": "EChat", "小e": "Hecaring",
"消息": "Messages", "消息": "Messages",
"我的": "Mine" "我的": "Mine"
}, },
@@ -517,14 +517,17 @@
"绑定流程未走完是否继续": "Binding process is incomplete, continue?", "绑定流程未走完是否继续": "Binding process is incomplete, continue?",
"继续": "Continue", "继续": "Continue",
"下次再说": "deal next time", "下次再说": "deal next time",
"请输入人员名称": "Please enter the person's name", "一": "Mon", "请输入人员名称": "Please enter the person's name",
"一": "Mon",
"二": "Tue", "二": "Tue",
"三": "Wed", "三": "Wed",
"四": "Thu", "四": "Thu",
"五": "Fri", "五": "Fri",
"六": "Sat", "六": "Sat",
"日": "Sun", "日": "Sun",
"icp备案号": "ICP备案号:ICP备2024068219号-1A", "icp备案号": "ICP备案号:ICP备14015115号-8A",
"公司信息": "Copyright © 2022-2025 Jiaxing Taihe Information Technology Co., Ltd. All rights reserved.", "公司信息": "Copyright © 2022-2025 Jiaxing Taihe Information Technology Co., Ltd. All rights reserved.",
"当前属于": "Current" "当前属于": "Current",
"绑定手机号码": "Bind mobile phone number",
"为了您的账号安全,验证手机号码后,可直接使用此手机号登录。": "For security, once your phone number is verified, you can log in with it directly."
} }

View File

@@ -524,15 +524,17 @@
"否": "否", "否": "否",
"男": "男", "男": "男",
"女": "女", "女": "女",
"可用WLAN": "可用WLAN", "": "",
"请输入人员名称": "请输入人员名称", "一": "一",
"二": "二", "二": "二",
"三": "三", "三": "三",
"四": "四", "四": "四",
"五": "五", "五": "五",
"六": "六", "六": "六",
"日": "日", "日": "日",
"可用WLAN": "可用WLAN","请输入人员名称":"请输入人员名称", "可用WLAN": "可用WLAN",
"icp备案号":"ICP备案号:皖ICP备2024068219号-1A", "请输入人员名称": "请输入人员名称",
"公司信息":"Copyright © 2022-2025 嘉兴太和信息技术有限责任公司 版权所有" "icp备案号": "ICP备案号:浙ICP备14015115号-8A",
"公司信息": "Copyright © 2022-2025 嘉兴太和信息技术有限责任公司 版权所有",
"绑定手机号码": "绑定手机号码",
"为了您的账号安全,验证手机号码后,可直接使用此手机号登录。":"为了您的账号安全,验证手机号码后,可直接使用此手机号登录。"
} }

View File

@@ -522,7 +522,9 @@
"五": "五", "五": "五",
"六": "六", "六": "六",
"日": "日", "日": "日",
"icp备案号": "ICP备案号:ICP备2024068219号-1A", "icp备案号": "ICP备案号:ICP备14015115号-8A",
"公司信息":"Copyright © 2022-2025 嘉興太和信息技術有限責任公司 版權所有", "公司信息": "Copyright © 2022-2025 嘉興太和信息技術有限責任公司 版權所有",
"当前属于": "當前" "当前属于": "當前",
"绑定手机号码": "綁定手機號碼",
"为了您的账号安全,验证手机号码后,可直接使用此手机号登录。": "為了您的帳號安全,驗證手機號碼後,可直接使用此手機號登入。"
} }

View File

@@ -1,8 +1,8 @@
class ServiceConstant { class ServiceConstant {
// static const String baseHost = "zhmht.swes.com.cn:27021"; //服务地址 眠花糖测试地址 // static const String baseHost = "zhmht.swes.com.cn:27021"; //服务地址 眠花糖测试地址
static const String baseHost = "zhmht.swes.com.cn:27020"; //服务地址 眠花糖正式地址 // static const String baseHost = "zhmht.swes.com.cn:27020"; //服务地址 眠花糖正式地址
// static const String baseHost = "vsbs-test.he-info.cn"; //服务地址 本地测试地址 // static const String baseHost = "vsbs-test.he-info.cn"; //服务地址 本地测试地址
// static const String baseHost = "vsbst-api.he-info.cn";//服务地址 static const String baseHost = "vsbst-api.he-info.cn";//服务地址
// static const String service_address = "http://$baseHost"; // static const String service_address = "http://$baseHost";
static const String service_address = "https://$baseHost"; static const String service_address = "https://$baseHost";

View File

@@ -48,6 +48,7 @@ class UserInfoModel {
// String? nickname; //修改昵称 // String? nickname; //修改昵称
// String? avatar; //修改头像地址 // String? avatar; //修改头像地址
bool isProgrammaticPop = false; // 标记变量
UserInfoModel(); UserInfoModel();
static UserInfoModel fromJson(Map<String, dynamic> json) => static UserInfoModel fromJson(Map<String, dynamic> json) =>

View File

@@ -187,12 +187,12 @@ Future<void> initWX() async {
Fluwx fluwx = Fluwx(); Fluwx fluwx = Fluwx();
fluwx.registerApi( fluwx.registerApi(
//请填写自己的微信appid //请填写自己的微信appid
// appId: "wxeb2688220799e2c5", //太和 appId: "wxeb2688220799e2c5", //太和
appId: "wx929c548fea6af9c7", //眠花糖 // appId: "wx929c548fea6af9c7", //眠花糖
doOnAndroid: true, doOnAndroid: true,
doOnIOS: true, doOnIOS: true,
// universalLink: "https://app.he-info.com/theh/", universalLink: "https://app.he-info.com/theh/",
universalLink: "https://zhmht.swes.com.cn/app/", // universalLink: "https://zhmht.swes.com.cn/app/",
); );
} }

View File

@@ -11,6 +11,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/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/pages/policy/privacy_policy.dart';
getOnePicker(BuildContext context, List arr, int checkIndex, getOnePicker(BuildContext context, List arr, int checkIndex,
Function onSelectedItemChanged, Function onSelectedItemChanged,
@@ -1494,6 +1495,101 @@ void showSleepCalendarBottomSheet({
); );
} }
// Future showCustomConfirmOfWebViewDialog(
// BuildContext context, String name, String webviewUrl,
// {String btnName = "确定",
// bool showCancel = false,
// String cancelName = "取消",
// ConfirmDialogIcon icon = ConfirmDialogIcon.warn}) async {
// return showDialog(
// context: context,
// barrierDismissible: true,
// builder: (BuildContext context) {
// return Dialog(
// backgroundColor: Colors.white,
// insetPadding: EdgeInsets.all(0),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(10.0),
// ),
// child: Container(
// width: 640.rpx,
// padding: EdgeInsets.fromLTRB(22.rpx, 0, 20.rpx, 10.rpx),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: <Widget>[
// Container(
// alignment: Alignment.centerRight,
// child: closeIcon,
// ),
// SizedBox(height: 40.rpx),
// Container(
// height: MediaQuery.of(context).size.height * 0.4,
// child: PrivacyPolicyNewPage(
// sleepUri: webviewUrl,
// showAppbar: false,
// ),
// ),
// SizedBox(height: 20.rpx),
// Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// if (showCancel)
// Container(
// margin: EdgeInsets.only(
// top: 50.rpx, bottom: 40.rpx, right: 100.rpx),
// alignment: Alignment.center,
// child: InkWell(
// onTap: () {
// Get.back();
// },
// child: Container(
// width: 200.rpx,
// height: 60.rpx,
// alignment: Alignment.center,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(6),
// border: Border.all(color: Colors.black12)),
// child: Text(
// '$cancelName',
// style: TextStyle(
// color: Colors.black, fontSize: 30.rpx),
// ),
// ),
// ),
// ),
// Container(
// margin: EdgeInsets.only(top: 50.rpx, bottom: 40.rpx),
// alignment: Alignment.center,
// child: InkWell(
// onTap: () {
// Get.back(result: "confirm");
// },
// child: Container(
// width: 200.rpx,
// height: 60.rpx,
// alignment: Alignment.center,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(6),
// color: stringToColor("#D3B684")),
// child: Text(
// '$btnName',
// style:
// TextStyle(color: Colors.white, fontSize: 30.rpx),
// ),
// ),
// ),
// )
// ],
// )
// ],
// ),
// ),
// );
// },
// );
// }
Future showCustomConfirmOfWebViewDialog( Future showCustomConfirmOfWebViewDialog(
BuildContext context, String name, String webviewUrl, BuildContext context, String name, String webviewUrl,
{String btnName = "确定", {String btnName = "确定",
@@ -1504,29 +1600,33 @@ Future showCustomConfirmOfWebViewDialog(
context: context, context: context,
barrierDismissible: true, barrierDismissible: true,
builder: (BuildContext context) { builder: (BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return Dialog( return Dialog(
insetPadding: EdgeInsets.all(0), backgroundColor: Colors.white,
insetPadding: EdgeInsets.zero, // 移除默认的内边距
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0), borderRadius: BorderRadius.circular(10.0),
), ),
child: Container( child: Container(
width: 640.rpx, width: screenSize.width, // 使用屏幕宽度
height: screenSize.height, // 使用屏幕高度
padding: EdgeInsets.fromLTRB(22.rpx, 0, 20.rpx, 10.rpx), padding: EdgeInsets.fromLTRB(22.rpx, 0, 20.rpx, 10.rpx),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container(
alignment: Alignment.centerRight,
child: closeIcon,
),
SizedBox(height: 40.rpx),
// Container( // Container(
// height: MediaQuery.of(context).size.height * 0.4, // alignment: Alignment.centerRight,
// child: Shopping( // child: closeIcon,
// url: webviewUrl,
// ),
// ), // ),
// SizedBox(height: 40.rpx),
Expanded(
// 使用 Expanded 让 WebView 占据剩余空间
child: PrivacyPolicyNewPage(
sleepUri: webviewUrl,
showAppbar: false,
),
),
SizedBox(height: 20.rpx), SizedBox(height: 20.rpx),
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@@ -1555,24 +1655,51 @@ Future showCustomConfirmOfWebViewDialog(
), ),
), ),
), ),
Container( // Container(
margin: EdgeInsets.only(top: 50.rpx, bottom: 40.rpx), // margin: EdgeInsets.only(top: 50.rpx, bottom: 40.rpx),
alignment: Alignment.center, // alignment: Alignment.center,
child: InkWell( // child: InkWell(
onTap: () { // onTap: () {
Get.back(result: "confirm"); // Get.back(result: "confirm");
}, // },
child: Container( // child: Container(
width: 200.rpx, // width: 200.rpx,
height: 60.rpx, // height: 60.rpx,
alignment: Alignment.center, // alignment: Alignment.center,
decoration: BoxDecoration( // decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6), // borderRadius: BorderRadius.circular(6),
color: stringToColor("#D3B684")), // color: stringToColor("#D3B684")),
child: Text( // child: Text(
'$btnName', // '$btnName',
style: // style:
TextStyle(color: Colors.white, fontSize: 30.rpx), // TextStyle(color: Colors.white, fontSize: 30.rpx),
// ),
// ),
// ),
// )
CustomCard(
borderRadius: 12.rpx, // 圆角半径
onTap: () {
Get.back(result: "confirm");
},
colors: AppConstants().mhtNormalButton, // 渐变背景
gradientDirection: GradientDirection.horizontal,
child: Container(
// width: MediaQuery.sizeOf(context).width * 0.5, // 宽度占屏幕一半
// height: MediaQuery.sizeOf(context).height * 0.055,
constraints: BoxConstraints(
minWidth: 200.rpx,
minHeight: 60.rpx,
),
alignment: Alignment.center,
child: Text(
'$btnName',
style: TextStyle(
color: Colors.white, // 文字颜色
fontFamily: 'Inter',
fontSize: AppConstants().normal_text_fontSize, // 字体大小
fontWeight: FontWeight.w600,
letterSpacing: 0.0,
), ),
), ),
), ),

View File

@@ -10,6 +10,7 @@ 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/CustomCard.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/login/login_controller.dart';
import 'package:vbvs_app/controller/time/countdown_controller.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/model/api_response.dart';
@@ -551,7 +552,7 @@ class THBindTelWidget extends GetView<AuthBindTelController> {
UserInfoController userInfoController = UserInfoController userInfoController =
Get.find(); Get.find();
await userInfoController.getUserInfo(); await userInfoController.getUserInfo();
MHTLoginController loginController = LoginController loginController =
Get.find(); Get.find();
//TODO 微信回调监听操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听 //TODO 微信回调监听操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听
loginController.fluwxCancelable?.cancel(); loginController.fluwxCancelable?.cancel();

View File

@@ -4,6 +4,8 @@ import 'dart:io';
import 'package:ef/ef.dart'; import 'package:ef/ef.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get_storage/get_storage.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/CommonVariables.dart'; import 'package:vbvs_app/common/util/CommonVariables.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/component/NullDataComponentWidget.dart'; import 'package:vbvs_app/component/NullDataComponentWidget.dart';
@@ -12,6 +14,7 @@ import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/model/WebSocketMessage.dart'; import 'package:vbvs_app/model/WebSocketMessage.dart';
import 'package:vbvs_app/pages/common/bezier_bottom_navigation_bar.dart'; import 'package:vbvs_app/pages/common/bezier_bottom_navigation_bar.dart';
import 'package:vbvs_app/pages/common/selectDialog.dart';
import 'package:vbvs_app/pages/mh_page/MattressControl.dart'; import 'package:vbvs_app/pages/mh_page/MattressControl.dart';
import 'package:vbvs_app/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart'; import 'package:vbvs_app/pages/mh_page/homepage/component/HomeDeviceStausWidget.dart';
import 'package:vbvs_app/pages/mh_page/homepage/mht_sleep_report_page.dart'; import 'package:vbvs_app/pages/mh_page/homepage/mht_sleep_report_page.dart';
@@ -122,8 +125,30 @@ class _HomePageState extends State<MainPageBBottomChange>
} }
DateTime? _lastBackPressedTime; // 记录上一次返回的时间 DateTime? _lastBackPressedTime; // 记录上一次返回的时间
final getStorage = GetStorage();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// Future.delayed(const Duration(milliseconds: 0), () {
// String? isShowYingShiDialog = getStorage.read("isShowYingShiDialog");
// if (isShowYingShiDialog == null || isShowYingShiDialog != "true") {
// String btnName = "同意".tr;
// String cancelName = "取消".tr;
// if (Platform.isAndroid) {
// cancelName = "退出".tr;
// }
// showCustomConfirmOfWebViewDialog(context, "隐私协议".tr, getPrivacy(1),
// btnName: btnName, showCancel: true, cancelName: cancelName)
// .then((e) {
// if (e == "confirm") {
// getStorage.write("isShowYingShiDialog", "true");
// } else {
// if (cancelName == "退出") {
// SystemNavigator.pop();
// }
// }
// });
// }
// });
return Obx(() { return Obx(() {
final currentLanguage = final currentLanguage =
languageController.selectLanguage.value; // 监听此变量变化 languageController.selectLanguage.value; // 监听此变量变化

View File

@@ -5,6 +5,7 @@ import 'package:ef/ef.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:get_storage/get_storage.dart';
import 'package:vbvs_app/common/color/appConstants.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/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
@@ -14,6 +15,7 @@ import 'package:vbvs_app/controller/message/message_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/enum/LoginStatus.dart'; import 'package:vbvs_app/enum/LoginStatus.dart';
import 'package:vbvs_app/pages/common/selectDialog.dart';
import 'package:vbvs_app/pages/main_bottom/e_page.dart'; import 'package:vbvs_app/pages/main_bottom/e_page.dart';
import 'package:vbvs_app/pages/main_bottom/home_page.dart'; import 'package:vbvs_app/pages/main_bottom/home_page.dart';
import 'package:vbvs_app/pages/main_bottom/message_page.dart'; import 'package:vbvs_app/pages/main_bottom/message_page.dart';
@@ -75,16 +77,56 @@ class MainPageBottomChange extends GetView<MainPageController> {
]; ];
DateTime? _lastBackPressedTime; // 记录上一次返回的时间 DateTime? _lastBackPressedTime; // 记录上一次返回的时间
final getStorage = GetStorage();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Future.delayed(const Duration(milliseconds: 0), () {
String? isShowYingShiDialog = getStorage.read("isShowYingShiDialog");
if (isShowYingShiDialog == null || isShowYingShiDialog != "true") {
String btnName = "同意".tr;
String cancelName = "取消".tr;
if (Platform.isAndroid) {
cancelName = "退出".tr;
}
showCustomConfirmOfWebViewDialog(context, "隐私协议".tr, getPrivacy(1),
btnName: btnName, showCancel: true, cancelName: cancelName)
.then((e) {
if (e == "confirm") {
getStorage.write("isShowYingShiDialog", "true");
} else {
if (cancelName == "退出") {
SystemNavigator.pop();
}
}
});
}
});
return PopScope( return PopScope(
canPop: false, canPop: false,
// onPopInvokedWithResult: (disposition, result) async {
// if (Platform.isAndroid) {
// var flag = await _handleBackPressed(context); // 自定义返回逻辑
// if (flag) {
// SystemNavigator.pop();
// }
// }
// },
onPopInvokedWithResult: (disposition, result) async { onPopInvokedWithResult: (disposition, result) async {
UserInfoController userInfoController = Get.find();
if (userInfoController.model.isProgrammaticPop) {
// 如果是程序触发,重置标记并忽略
userInfoController.model.isProgrammaticPop = false;
return; // 阻止处理
}
if (Platform.isAndroid) { if (Platform.isAndroid) {
var flag = await _handleBackPressed(context); // 自定义返回逻辑 // var flag = await _handleBackPressed(context); // 自定义返回逻辑
if (flag) { // if (flag) {
SystemNavigator.pop(); // SystemNavigator.pop();
} // }
Get.back();
} }
}, },
child: Obx( child: Obx(
@@ -170,7 +212,6 @@ class MainPageBottomChange extends GetView<MainPageController> {
controller.updateAll(); controller.updateAll();
}); });
}, },
items: [ items: [
getBottomNavigationBarItem("assets/img/menu/home.svg", getBottomNavigationBarItem("assets/img/menu/home.svg",
"assets/img/menu/n_home.svg", "菜单.首页".tr), "assets/img/menu/n_home.svg", "菜单.首页".tr),

View File

@@ -367,6 +367,7 @@ class _MHTBindDeviceSuccessState extends State<MHTBindDeviceSuccess> {
), ),
), ),
), ),
), ),
], ],
), ),

View File

@@ -423,6 +423,8 @@ class _MhtSleepReportPageState extends State<MhtSleepReportPage> {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
borderRadius: 8, borderRadius: 8,
onTap: () { onTap: () {
sleepReportController.model.type =
1;
showSleepCalendarBottomSheet( showSleepCalendarBottomSheet(
type: sleepReportController type: sleepReportController
.model.type, .model.type,

View File

@@ -16,6 +16,8 @@ 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/time/countdown_controller.dart'; import 'package:vbvs_app/controller/time/countdown_controller.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/pages/common/selectDialog.dart';
import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_login_controller.dart';
import 'package:vbvs_app/pages/mh_page/user/controller/mht_register_controller.dart'; import 'package:vbvs_app/pages/mh_page/user/controller/mht_register_controller.dart';
@@ -119,17 +121,6 @@ class MHTLoginPage extends GetView<MHTLoginController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
MHTRegisterController registerController = Get.find(); MHTRegisterController registerController = Get.find();
bool isProgrammaticPop = false; // 标记变量
Future.delayed(const Duration(milliseconds: 300), () {
String? isShowYingShiDialog = getStorage.read("isShowYingShiDialog");
if (isShowYingShiDialog == null || isShowYingShiDialog != "true") {
String btnName = "同意".tr;
String cancelName = "取消".tr;
if (Platform.isAndroid) {
cancelName = "退出".tr;
}
}
});
return LayoutBuilder(builder: (context, cc) { return LayoutBuilder(builder: (context, cc) {
bodysize = cc; bodysize = cc;
@@ -176,21 +167,21 @@ class MHTLoginPage extends GetView<MHTLoginController> {
), ),
body: PopScope( body: PopScope(
canPop: false, canPop: false,
onPopInvokedWithResult: (disposition, result) async { // onPopInvokedWithResult: (disposition, result) async {
if (isProgrammaticPop) { // if (isProgrammaticPop) {
// 如果是程序触发,重置标记并忽略 // // 如果是程序触发,重置标记并忽略
isProgrammaticPop = false; // isProgrammaticPop = false;
return; // 阻止处理 // return; // 阻止处理
} // }
if (Platform.isAndroid) { // if (Platform.isAndroid) {
// var flag = await _handleBackPressed(context); // 自定义返回逻辑 // // var flag = await _handleBackPressed(context); // 自定义返回逻辑
// if (flag) { // // if (flag) {
// SystemNavigator.pop(); // // SystemNavigator.pop();
// } // // }
Get.back(); // Get.back();
} // }
}, // },
child: Align( child: Align(
alignment: AlignmentDirectional(0, 0), alignment: AlignmentDirectional(0, 0),
child: Container( child: Container(
@@ -1258,8 +1249,10 @@ class MHTLoginPage extends GetView<MHTLoginController> {
controller.fluwxCancelable controller.fluwxCancelable
?.cancel(); ?.cancel();
Checknetwork.subscription?.cancel(); Checknetwork.subscription?.cancel();
UserInfoController
isProgrammaticPop = true; userInfoController = Get.find();
userInfoController
.model.isProgrammaticPop = true;
MHTLoginController loginController = MHTLoginController loginController =
Get.find(); Get.find();
loginController.model.account = loginController.model.account =
@@ -1445,14 +1438,6 @@ class MHTLoginPage extends GetView<MHTLoginController> {
0, 0), 0, 0),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// showCustomConfirmOfWebViewDialog(
// context,
// "用户协议",
// "/#/pages/agreement/agreement?type=2&hideHead=true",
// btnName:
// "同意并继续");
// Get.toNamed(
// "/userAgreementPage");
Get.toNamed( Get.toNamed(
"/userPolicyPageNew", "/userPolicyPageNew",
arguments: arguments:
@@ -1497,14 +1482,6 @@ class MHTLoginPage extends GetView<MHTLoginController> {
0, 0), 0, 0),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// showCustomConfirmOfWebViewDialog(
// context,
// "隐私协议",
// "/#/pages/agreement/agreement?type=1&hideHead=true",
// btnName:
// "同意并继续");
// Get.toNamed(
// "/privacyPolicyPage");
Get.toNamed( Get.toNamed(
"/privacyPolicyPageNew", "/privacyPolicyPageNew",
arguments: arguments:

View File

@@ -948,13 +948,7 @@ class RegisterPage extends GetView<MHTRegisterController> {
AlignmentDirectional( AlignmentDirectional(
0, 0), 0, 0),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// showCustomConfirmOfWebViewDialog(
// context,
// "用户协议",
// "/#/pages/agreement/agreement?type=2&hideHead=true");
// Get.toNamed(
// "/userAgreementPage");
Get.toNamed( Get.toNamed(
"/userPolicyPageNew", "/userPolicyPageNew",
arguments: arguments:
@@ -995,13 +989,7 @@ class RegisterPage extends GetView<MHTRegisterController> {
AlignmentDirectional( AlignmentDirectional(
0, 0), 0, 0),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
// showCustomConfirmOfWebViewDialog(
// context,
// "隐私协议",
// "/#/pages/agreement/agreement?type=1&hideHead=true");
// Get.toNamed(
// "/privacyPolicyPage");
Get.toNamed( Get.toNamed(
"/privacyPolicyPageNew", "/privacyPolicyPageNew",
arguments: arguments:

View File

@@ -11,7 +11,9 @@ import 'package:vbvs_app/controller/user_info_controller.dart';
class PrivacyPolicyNewPage extends StatefulWidget { class PrivacyPolicyNewPage extends StatefulWidget {
var sleepUri; var sleepUri;
PrivacyPolicyNewPage({super.key, required this.sleepUri}); bool showAppbar;
PrivacyPolicyNewPage(
{super.key, required this.sleepUri, this.showAppbar = true});
@override @override
State<PrivacyPolicyNewPage> createState() => _PrivacyPolicyNewPageState(); State<PrivacyPolicyNewPage> createState() => _PrivacyPolicyNewPageState();
@@ -39,7 +41,7 @@ class _PrivacyPolicyNewPageState extends State<PrivacyPolicyNewPage> {
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return LayoutBuilder( return LayoutBuilder(
builder: (context, bodySize) => GestureDetector( builder: (context, bodySize) => GestureDetector(
// onTap: () => FocusScope.of(context).unfocus(),, // onTap: () => FocusScope.of(context).unfocus(),,
@@ -53,37 +55,40 @@ class _PrivacyPolicyNewPageState extends State<PrivacyPolicyNewPage> {
color: Colors.white, color: Colors.white,
child: Scaffold( child: Scaffold(
backgroundColor: Colors.transparent, // 背景透明 backgroundColor: Colors.transparent, // 背景透明
appBar: AppBar( appBar: (widget.showAppbar != null && widget.showAppbar == false)
backgroundColor: themeController.currentColor.sc17, ? null
automaticallyImplyLeading: false, : AppBar(
iconTheme: IconThemeData(color: themeController.currentColor.sc3), backgroundColor: themeController.currentColor.sc17,
titleSpacing: 0, automaticallyImplyLeading: false,
title: Container( iconTheme:
width: double.infinity, IconThemeData(color: themeController.currentColor.sc3),
height: 180.rpx, titleSpacing: 0,
child: Stack( title: Container(
alignment: Alignment.center, width: double.infinity,
children: [ height: 180.rpx,
/// 居中标题 child: Stack(
Text( alignment: Alignment.center,
'隐私协议'.tr, children: [
style: TextStyle( /// 居中标题
fontFamily: 'Readex Pro', Text(
color: themeController.currentColor.sc3, '隐私协议'.tr,
letterSpacing: 0, style: TextStyle(
fontSize: 30.rpx, fontFamily: 'Readex Pro',
color: themeController.currentColor.sc3,
letterSpacing: 0,
fontSize: 30.rpx,
),
),
/// 左边返回按钮
Positioned(
left: 0,
child: returnIconButtomNew(),
),
],
), ),
), ),
),
/// 左边返回按钮
Positioned(
left: 0,
child: returnIconButtomNew(),
),
],
),
),
),
body: SafeArea( body: SafeArea(
top: true, top: true,
child: Stack( child: Stack(

View File

@@ -11,7 +11,6 @@ import flutter_blue_plus
import flutter_inappwebview_macos import flutter_inappwebview_macos
import flutter_localization import flutter_localization
import geolocator_apple import geolocator_apple
import google_sign_in_ios
import mobile_scanner import mobile_scanner
import package_info_plus import package_info_plus
import path_provider_foundation import path_provider_foundation
@@ -30,7 +29,6 @@ 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"))
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
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"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

View File

@@ -591,14 +591,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.34.5" version: "1.34.5"
flutter_bmflocation:
dependency: "direct main"
description:
name: flutter_bmflocation
sha256: "9d5e8cd8df4a50f41bf167ff7fb3e285e372413935c03fbae3862e58cd7926cd"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.8.0"
flutter_cache_manager: flutter_cache_manager:
dependency: transitive dependency: transitive
description: description:
@@ -800,13 +792,13 @@ packages:
source: hosted source: hosted
version: "5.5.2" version: "5.5.2"
font_awesome_flutter: font_awesome_flutter:
dependency: transitive dependency: "direct overridden"
description: description:
name: font_awesome_flutter name: font_awesome_flutter
sha256: d3a89184101baec7f4600d58840a764d2ef760fe1c5a20ef9e6b0e9b24a07a3a sha256: "5fb789145cae1f4c3245c58b3f8fb287d055c26323879eab57a7bf0cfd1e45f3"
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "10.8.0" version: "10.5.0"
from_css_color: from_css_color:
dependency: transitive dependency: transitive
description: description:
@@ -951,46 +943,6 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.3.3+1" version: "0.3.3+1"
google_sign_in:
dependency: "direct main"
description:
name: google_sign_in
sha256: fad6ddc80c427b0bba705f2116204ce1173e09cf299f85e053d57a55e5b2dd56
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.2.2"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
sha256: "7af72e5502c313865c729223b60e8ae7bce0a1011b250c24edcf30d3d7032748"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.35"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
sha256: "102005f498ce18442e7158f6791033bbc15ad2dcc0afa4cf4752e2722a516c96"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.9.0"
google_sign_in_platform_interface:
dependency: transitive
description:
name: google_sign_in_platform_interface
sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.0"
google_sign_in_web:
dependency: transitive
description:
name: google_sign_in_web
sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.4+4"
googleapis_auth: googleapis_auth:
dependency: transitive dependency: transitive
description: description:

View File

@@ -8,8 +8,8 @@ environment:
sdk: ^3.5.4 sdk: ^3.5.4
fluwx: fluwx:
app_id: 'wx929c548fea6af9c7' #填写自己的 WeChat app id.眠花糖 # app_id: 'wx929c548fea6af9c7' #填写自己的 WeChat app id.眠花糖
# app_id: 'wxeb2688220799e2c5' #填写自己的 WeChat app id.太和e护 app_id: 'wxeb2688220799e2c5' #填写自己的 WeChat app id.太和e护
debug_logging: false # Logging in debug mode. debug_logging: false # Logging in debug mode.
android: android:
# interrupt_wx_request: true # Defaults to true. # interrupt_wx_request: true # Defaults to true.

View File

@@ -90,12 +90,12 @@ BEGIN
BLOCK "040904e4" BLOCK "040904e4"
BEGIN BEGIN
VALUE "CompanyName", "com.example" "\0" VALUE "CompanyName", "com.example" "\0"
VALUE "FileDescription", "com.taihe.mianhuatang" "\0" VALUE "FileDescription", "com.taihe.vbvs_app" "\0"
VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "FileVersion", VERSION_AS_STRING "\0"
VALUE "InternalName", "com.taihe.mianhuatang" "\0" VALUE "InternalName", "com.taihe.vbvs_app" "\0"
VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0"
VALUE "OriginalFilename", "com.taihe.mianhuatang.exe" "\0" VALUE "OriginalFilename", "com.taihe.vbvs_app.exe" "\0"
VALUE "ProductName", "com.taihe.mianhuatang" "\0" VALUE "ProductName", "com.taihe.vbvs_app" "\0"
VALUE "ProductVersion", VERSION_AS_STRING "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0"
END END
END END