From 7cfd3bf8f5d5748dd23a2df83be09c0146fe66b4 Mon Sep 17 00:00:00 2001 From: wyf <494641114@qq.com> Date: Mon, 20 Oct 2025 11:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=B1=8F=E8=94=BD=E5=B0=8Fe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/main_bottom/home_page.dart | 51 +- .../main_bottom/main_page_bottom_change.dart | 618 +++++++++++++----- lib/pages/mh_page/LanguagePage.dart | 3 - 3 files changed, 470 insertions(+), 202 deletions(-) diff --git a/lib/pages/main_bottom/home_page.dart b/lib/pages/main_bottom/home_page.dart index 29f0168..9873ed1 100644 --- a/lib/pages/main_bottom/home_page.dart +++ b/lib/pages/main_bottom/home_page.dart @@ -183,30 +183,33 @@ class _HomePageState extends State { @override initState() { super.initState(); - if (userInfoController.model.login == 1) { - homeController.getSleepReport(); - deviceController.getDeviceNum().then((apiResponse) { - if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); - } - }); - deviceController.getDeviceList().then((apiResponse) { - if (apiResponse.code != HttpStatusCodes.ok) { - TopSlideNotification.show( - Get.context!, - text: apiResponse.msg!, - textColor: themeController.currentColor.sc9, - ); - } else { - //请求睡眠报告 - deviceController.getSleepReport(); - } - }); - } + WidgetsBinding.instance.addPostFrameCallback((_) { + if (userInfoController.model.login == 1) { + homeController.getSleepReport(); + deviceController.getDeviceNum().then((apiResponse) { + if (apiResponse.code != HttpStatusCodes.ok) { + TopSlideNotification.show( + Get.context!, + text: apiResponse.msg!, + textColor: themeController.currentColor.sc9, + ); + } + }); + deviceController.getDeviceList().then((apiResponse) { + if (apiResponse.code != HttpStatusCodes.ok) { + TopSlideNotification.show( + Get.context!, + text: apiResponse.msg!, + textColor: themeController.currentColor.sc9, + ); + } else { + //请求睡眠报告 + deviceController.getSleepReport(); + } + }); + } + }); + if (userInfoController.device_bind_flag == 0) { dealBindProcess().then((value) { WidgetsBinding.instance.addPostFrameCallback((_) { diff --git a/lib/pages/main_bottom/main_page_bottom_change.dart b/lib/pages/main_bottom/main_page_bottom_change.dart index f48dbd8..ad7c7f3 100644 --- a/lib/pages/main_bottom/main_page_bottom_change.dart +++ b/lib/pages/main_bottom/main_page_bottom_change.dart @@ -1,3 +1,275 @@ +// import 'dart:async'; +// import 'dart:io'; + +// import 'package:ef/ef.dart'; +// import 'package:flutter/material.dart'; +// import 'package:flutter/services.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/util/FitTool.dart'; +// import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; +// import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; +// import 'package:vbvs_app/controller/main_bottom/main_page_controller.dart'; +// import 'package:vbvs_app/controller/message/message_controller.dart'; +// import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; +// import 'package:vbvs_app/controller/user_info_controller.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/home_page.dart'; +// import 'package:vbvs_app/pages/main_bottom/message_page.dart'; +// import 'package:vbvs_app/pages/main_bottom/mine_page.dart'; + +// class MainPageBottomChange extends GetView { +// GlobalController globalController = Get.find(); +// ThemeController themeController = Get.find(); +// MessageController messageController = Get.find(); +// getBottomNavigationBarItem(String svgPath, String actSvgPath, String label, +// {double size = 0, bool isEmpty = false, bool showBadge = false}) { +// if (size == 0) { +// size = 36.rpx; +// } +// Widget buildIcon(String path) { +// return Padding( +// padding: EdgeInsets.only(bottom: 6.rpx), +// child: isEmpty +// ? Container() +// : Stack( +// clipBehavior: Clip.none, +// children: [ +// SvgPicture.asset( +// path, +// width: size, +// height: size, +// ), +// if (showBadge) +// Positioned( +// right: -20.rpx, +// top: -2.rpx, +// child: Container( +// width: 14.rpx, +// height: 14.rpx, +// decoration: BoxDecoration( +// color: Colors.red, +// shape: BoxShape.circle, +// ), +// ), +// ) +// ], +// ), +// ); +// } + +// return BottomNavigationBarItem( +// icon: buildIcon(actSvgPath), +// activeIcon: buildIcon(svgPath), +// label: label, +// ); +// } + +// List arr = [ +// HomePage(), +// // SleepReportPage(), +// // EPage(), +// EPage(sleepUri: "https://xiaoe.he-info.cn/"), +// MessagePage(), +// MinePage(), +// ]; + +// DateTime? _lastBackPressedTime; // 记录上一次返回的时间 +// final getStorage = GetStorage(); +// @override +// 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( +// canPop: false, + +// // onPopInvokedWithResult: (disposition, result) async { +// // if (Platform.isAndroid) { +// // var flag = await _handleBackPressed(context); // 自定义返回逻辑 +// // if (flag) { +// // SystemNavigator.pop(); +// // } +// // } +// // }, +// onPopInvokedWithResult: (disposition, result) async { +// UserInfoController userInfoController = Get.find(); +// if (userInfoController.model.isProgrammaticPop) { +// // 如果是程序触发,重置标记并忽略 +// userInfoController.model.isProgrammaticPop = false; +// return; // 阻止处理 +// } + +// if (Platform.isAndroid) { +// // var flag = await _handleBackPressed(context); // 自定义返回逻辑 +// // if (flag) { +// // SystemNavigator.pop(); +// // } +// Get.back(); +// } +// }, +// child: Obx( +// () { +// if (globalController.model.hideBottomNavigationBar == true) { +// return Scaffold( +// // body: arr[controller.model.currentIndex], +// body: IndexedStack( +// // ✅ 改成 IndexedStack +// index: controller.model.currentIndex, +// children: +// arr.map((page) => SizedBox.expand(child: page)).toList(), +// ), +// floatingActionButtonAnimator: +// FloatingActionButtonAnimator.noAnimation, +// floatingActionButton: Container(), +// ); +// } else { +// return Container( +// decoration: BoxDecoration( +// image: DecorationImage( +// image: AssetImage('assets/img/bgImage.png'), // 本地图片 +// fit: BoxFit.fill, // 填满整个 Container +// ), +// ), +// child: Scaffold( +// backgroundColor: Colors.transparent, +// // body: arr[controller.model.currentIndex], +// body: IndexedStack( +// // ✅ 改成 IndexedStack +// index: controller.model.currentIndex??3, +// children: arr +// .map((page) => SizedBox.expand(child: page)) +// .toList(), +// ), +// floatingActionButtonAnimator: +// FloatingActionButtonAnimator.noAnimation, +// floatingActionButtonLocation: +// FloatingActionButtonLocation.centerDocked, +// bottomNavigationBar: Theme( +// data: Theme.of(context).copyWith( +// splashFactory: NoSplash.splashFactory, +// splashColor: Colors.transparent, +// highlightColor: Colors.transparent, +// ), +// child: Container( +// decoration: BoxDecoration( +// border: Border( +// top: BorderSide( +// color: themeController.currentColor.sc4 +// .withOpacity(0.5), +// width: AppConstants().border_width, +// ), +// ), +// ), +// child: BottomNavigationBar( +// unselectedItemColor: themeController.currentColor.sc4, +// selectedItemColor: themeController.currentColor.sc1, +// backgroundColor: themeController.currentColor.sc5, +// selectedFontSize: 26.rpx, +// unselectedFontSize: 26.rpx, +// type: BottomNavigationBarType.fixed, +// currentIndex: controller.model.currentIndex, +// onTap: (index) { +// Future.delayed(const Duration(milliseconds: 100), () { +// UserInfoController userInfoController = Get.find(); +// bool isLoggedIn = userInfoController.model.login == +// LoginStatus.LOGIN.code; + +// // if ((index == 1 || index == 2) && !isLoggedIn) { +// if ((index == 2) && !isLoggedIn) { +// TopSlideNotification.show( +// context, +// text: "必须登录提示".tr, +// textColor: themeController.currentColor.sc9, +// ); +// Future.delayed(Duration(milliseconds: 50), () { +// if (Get.currentRoute == '/ePage' || +// Get.currentRoute == '/messagePage') { +// Get.back(); +// } +// Future.delayed(Duration(milliseconds: 100), () { +// Get.toNamed("/otherLoginPage"); +// }); +// }); +// return; +// } + +// if (controller.model.currentIndex != index) { +// globalController.model.hideBottomNavigationBar = +// false; +// globalController.updateAll(); +// } + +// controller.model.currentIndex = index; +// controller.updateAll(); +// }); +// }, +// items: [ +// getBottomNavigationBarItem("assets/img/menu/home.svg", +// "assets/img/menu/n_home.svg", "菜单.首页".tr), +// getBottomNavigationBarItem("assets/img/menu/e.svg", +// "assets/img/menu/n_e.svg", "菜单.小e".tr), +// getBottomNavigationBarItem( +// "assets/img/menu/message.svg", +// "assets/img/menu/n_message.svg", +// "菜单.消息".tr, +// showBadge: (messageController +// .model.body_message_read == +// 1 || +// messageController.model.system_message_read == +// 1)), +// getBottomNavigationBarItem("assets/img/menu/mine.svg", +// "assets/img/menu/n_mine.svg", "菜单.我的".tr), +// ], +// ), +// ), +// ), +// )); +// } +// }, +// ), +// ); +// } + +// Future _handleBackPressed(BuildContext context) async { +// final currentTime = DateTime.now(); + +// // 如果上次点击返回键时间为空,或者间隔超过 1 秒 +// if (_lastBackPressedTime == null || +// currentTime.difference(_lastBackPressedTime!) > Duration(seconds: 2)) { +// _lastBackPressedTime = currentTime; +// // showToast("再按一次退出程序", color: color_warning, closeTime: 2); +// TopSlideNotification.show(context, text: "滑动退出提醒".tr); +// return false; // 阻止退出程序 +// } else { +// return true; // 允许退出程序 +// } +// } +// } + + import 'dart:async'; import 'dart:io'; @@ -25,11 +297,60 @@ class MainPageBottomChange extends GetView { GlobalController globalController = Get.find(); ThemeController themeController = Get.find(); MessageController messageController = Get.find(); + final getStorage = GetStorage(); + + late final List arr; + late final List bottomItems; + DateTime? _lastBackPressedTime; + + MainPageBottomChange({super.key}) { + // ✅ 根据是否测试账号动态生成页面 + if (!AppConstants.is_test_account) { + arr = [ + HomePage(), + EPage(sleepUri: "https://xiaoe.he-info.cn/"), + MessagePage(), + MinePage(), + ]; + bottomItems = [ + getBottomNavigationBarItem("assets/img/menu/home.svg", + "assets/img/menu/n_home.svg", "菜单.首页".tr), + getBottomNavigationBarItem("assets/img/menu/e.svg", + "assets/img/menu/n_e.svg", "菜单.小e".tr), + getBottomNavigationBarItem( + "assets/img/menu/message.svg", + "assets/img/menu/n_message.svg", + "菜单.消息".tr, + showBadge: (messageController.model.body_message_read == 1 || + messageController.model.system_message_read == 1)), + getBottomNavigationBarItem("assets/img/menu/mine.svg", + "assets/img/menu/n_mine.svg", "菜单.我的".tr), + ]; + } else { + arr = [ + HomePage(), + MessagePage(), + MinePage(), + ]; + bottomItems = [ + getBottomNavigationBarItem("assets/img/menu/home.svg", + "assets/img/menu/n_home.svg", "菜单.首页".tr), + getBottomNavigationBarItem( + "assets/img/menu/message.svg", + "assets/img/menu/n_message.svg", + "菜单.消息".tr, + showBadge: (messageController.model.body_message_read == 1 || + messageController.model.system_message_read == 1)), + getBottomNavigationBarItem("assets/img/menu/mine.svg", + "assets/img/menu/n_mine.svg", "菜单.我的".tr), + ]; + } + } + getBottomNavigationBarItem(String svgPath, String actSvgPath, String label, {double size = 0, bool isEmpty = false, bool showBadge = false}) { - if (size == 0) { - size = 36.rpx; - } + if (size == 0) size = 36.rpx; + Widget buildIcon(String path) { return Padding( padding: EdgeInsets.only(bottom: 6.rpx), @@ -50,12 +371,12 @@ class MainPageBottomChange extends GetView { child: Container( width: 14.rpx, height: 14.rpx, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: Colors.red, shape: BoxShape.circle, ), ), - ) + ), ], ), ); @@ -68,203 +389,150 @@ class MainPageBottomChange extends GetView { ); } - List arr = [ - HomePage(), - // SleepReportPage(), - // EPage(), - EPage(sleepUri: "https://xiaoe.he-info.cn/"), - MessagePage(), - MinePage(), - ]; - - DateTime? _lastBackPressedTime; // 记录上一次返回的时间 - final getStorage = GetStorage(); @override 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(); - // } - // } - // }); - // } - // }); + 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( canPop: false, - - // onPopInvokedWithResult: (disposition, result) async { - // if (Platform.isAndroid) { - // var flag = await _handleBackPressed(context); // 自定义返回逻辑 - // if (flag) { - // SystemNavigator.pop(); - // } - // } - // }, onPopInvokedWithResult: (disposition, result) async { UserInfoController userInfoController = Get.find(); if (userInfoController.model.isProgrammaticPop) { - // 如果是程序触发,重置标记并忽略 userInfoController.model.isProgrammaticPop = false; - return; // 阻止处理 + return; } if (Platform.isAndroid) { - // var flag = await _handleBackPressed(context); // 自定义返回逻辑 - // if (flag) { - // SystemNavigator.pop(); - // } Get.back(); } }, - child: Obx( - () { - if (globalController.model.hideBottomNavigationBar == true) { - return Scaffold( - // body: arr[controller.model.currentIndex], - body: IndexedStack( - // ✅ 改成 IndexedStack - index: controller.model.currentIndex, - children: - arr.map((page) => SizedBox.expand(child: page)).toList(), + child: Obx(() { + int currentIndex = controller.model.currentIndex; + + // ✅ 防止 index 超出范围(例如测试账号少一个 tab) + if (currentIndex >= arr.length) { + currentIndex = 0; + controller.model.currentIndex = 0; + } + + if (globalController.model.hideBottomNavigationBar == true) { + return Scaffold( + body: IndexedStack( + index: currentIndex, + children: arr.map((page) => SizedBox.expand(child: page)).toList(), + ), + ); + } else { + return Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/img/bgImage.png'), + fit: BoxFit.fill, ), - floatingActionButtonAnimator: - FloatingActionButtonAnimator.noAnimation, - floatingActionButton: Container(), - ); - } else { - return Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/img/bgImage.png'), // 本地图片 - fit: BoxFit.fill, // 填满整个 Container + ), + child: Scaffold( + backgroundColor: Colors.transparent, + body: IndexedStack( + index: currentIndex, + children: arr.map((page) => SizedBox.expand(child: page)).toList(), + ), + bottomNavigationBar: Theme( + data: Theme.of(context).copyWith( + splashFactory: NoSplash.splashFactory, + splashColor: Colors.transparent, + highlightColor: Colors.transparent, + ), + child: Container( + decoration: BoxDecoration( + border: Border( + top: BorderSide( + color: + themeController.currentColor.sc4.withOpacity(0.5), + width: AppConstants().border_width, + ), + ), + ), + child: BottomNavigationBar( + unselectedItemColor: themeController.currentColor.sc4, + selectedItemColor: themeController.currentColor.sc1, + backgroundColor: themeController.currentColor.sc5, + selectedFontSize: 26.rpx, + unselectedFontSize: 26.rpx, + type: BottomNavigationBarType.fixed, + currentIndex: currentIndex, + onTap: (index) { + Future.delayed(const Duration(milliseconds: 100), () { + UserInfoController userInfoController = Get.find(); + bool isLoggedIn = userInfoController.model.login == + LoginStatus.LOGIN.code; + + // ✅ 仅非测试账号检查登录状态 + if (!AppConstants.is_test_account && + (index == 2) && + !isLoggedIn) { + TopSlideNotification.show( + context, + text: "必须登录提示".tr, + textColor: themeController.currentColor.sc9, + ); + Future.delayed(const Duration(milliseconds: 50), () { + if (Get.currentRoute == '/ePage' || + Get.currentRoute == '/messagePage') { + Get.back(); + } + Future.delayed(const Duration(milliseconds: 100), () { + Get.toNamed("/otherLoginPage"); + }); + }); + return; + } + + if (controller.model.currentIndex != index) { + globalController.model.hideBottomNavigationBar = false; + globalController.updateAll(); + } + + controller.model.currentIndex = index; + controller.updateAll(); + }); + }, + items: bottomItems, ), ), - child: Scaffold( - backgroundColor: Colors.transparent, - // body: arr[controller.model.currentIndex], - body: IndexedStack( - // ✅ 改成 IndexedStack - index: controller.model.currentIndex??3, - children: arr - .map((page) => SizedBox.expand(child: page)) - .toList(), - ), - floatingActionButtonAnimator: - FloatingActionButtonAnimator.noAnimation, - floatingActionButtonLocation: - FloatingActionButtonLocation.centerDocked, - bottomNavigationBar: Theme( - data: Theme.of(context).copyWith( - splashFactory: NoSplash.splashFactory, - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - ), - child: Container( - decoration: BoxDecoration( - border: Border( - top: BorderSide( - color: themeController.currentColor.sc4 - .withOpacity(0.5), - width: AppConstants().border_width, - ), - ), - ), - child: BottomNavigationBar( - unselectedItemColor: themeController.currentColor.sc4, - selectedItemColor: themeController.currentColor.sc1, - backgroundColor: themeController.currentColor.sc5, - selectedFontSize: 26.rpx, - unselectedFontSize: 26.rpx, - type: BottomNavigationBarType.fixed, - currentIndex: controller.model.currentIndex, - onTap: (index) { - Future.delayed(const Duration(milliseconds: 100), () { - UserInfoController userInfoController = Get.find(); - bool isLoggedIn = userInfoController.model.login == - LoginStatus.LOGIN.code; - - // if ((index == 1 || index == 2) && !isLoggedIn) { - if ((index == 2) && !isLoggedIn) { - TopSlideNotification.show( - context, - text: "必须登录提示".tr, - textColor: themeController.currentColor.sc9, - ); - Future.delayed(Duration(milliseconds: 50), () { - if (Get.currentRoute == '/ePage' || - Get.currentRoute == '/messagePage') { - Get.back(); - } - Future.delayed(Duration(milliseconds: 100), () { - Get.toNamed("/otherLoginPage"); - }); - }); - return; - } - - if (controller.model.currentIndex != index) { - globalController.model.hideBottomNavigationBar = - false; - globalController.updateAll(); - } - - controller.model.currentIndex = index; - controller.updateAll(); - }); - }, - items: [ - getBottomNavigationBarItem("assets/img/menu/home.svg", - "assets/img/menu/n_home.svg", "菜单.首页".tr), - getBottomNavigationBarItem("assets/img/menu/e.svg", - "assets/img/menu/n_e.svg", "菜单.小e".tr), - getBottomNavigationBarItem( - "assets/img/menu/message.svg", - "assets/img/menu/n_message.svg", - "菜单.消息".tr, - showBadge: (messageController - .model.body_message_read == - 1 || - messageController.model.system_message_read == - 1)), - getBottomNavigationBarItem("assets/img/menu/mine.svg", - "assets/img/menu/n_mine.svg", "菜单.我的".tr), - ], - ), - ), - ), - )); - } - }, - ), + ), + ), + ); + } + }), ); } Future _handleBackPressed(BuildContext context) async { final currentTime = DateTime.now(); - - // 如果上次点击返回键时间为空,或者间隔超过 1 秒 if (_lastBackPressedTime == null || - currentTime.difference(_lastBackPressedTime!) > Duration(seconds: 2)) { + currentTime.difference(_lastBackPressedTime!) > const Duration(seconds: 2)) { _lastBackPressedTime = currentTime; - // showToast("再按一次退出程序", color: color_warning, closeTime: 2); TopSlideNotification.show(context, text: "滑动退出提醒".tr); - return false; // 阻止退出程序 + return false; } else { - return true; // 允许退出程序 + return true; } } } diff --git a/lib/pages/mh_page/LanguagePage.dart b/lib/pages/mh_page/LanguagePage.dart index 21768fd..a623c2f 100644 --- a/lib/pages/mh_page/LanguagePage.dart +++ b/lib/pages/mh_page/LanguagePage.dart @@ -1,15 +1,12 @@ import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; -import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/controller/mh_controller/mh_language_controller.dart'; import 'package:vbvs_app/controller/weather/weather_controller.dart'; -import 'package:vbvs_app/enum/APPPackageType.dart'; import 'package:vbvs_app/language/AppLanguage.dart'; import 'package:vbvs_app/pages/device_bind/componnet/FancyCircleCheckbox.dart'; import 'package:vbvs_app/pages/mh_page/homepage/controller/mht_home_controller.dart';