From ff1932689a5f3db221a2285982aa4a5ee779ba52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Tue, 31 Dec 2024 09:35:02 +0800 Subject: [PATCH 01/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9B=BD=E5=AE=B6=E5=8C=96=E7=B9=81=E4=BD=93=E5=8F=B0=E6=B9=BE?= =?UTF-8?q?=E3=80=81=E7=B9=81=E4=BD=93=E9=A6=99=E6=B8=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main_local.dart | 2 +- .../mineMultiLanguage_page.dart | 3 +++ .../mineMultiLanguage_state.dart | 15 ++++++------ lib/translations/current_locale_tool.dart | 24 +++++++------------ 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/lib/main_local.dart b/lib/main_local.dart index bd256362..9e30d007 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.sky; + F.appFlavor = Flavor.xhj; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart b/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart index 86e75fe5..a5a83f84 100755 --- a/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart +++ b/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart @@ -5,6 +5,7 @@ import 'package:star_lock/mine/mineMultiLanguage/mineMultiLanguage_state.dart'; import 'package:star_lock/translations/current_locale_tool.dart'; import '../../app_settings/app_colors.dart'; +import '../../app_settings/app_settings.dart'; import '../../tools/commonItem.dart'; import '../../tools/titleAppBar.dart'; import '../../translations/app_dept.dart'; @@ -86,6 +87,8 @@ class _MineMultiLanguagePageState extends State { if (state.currentLanguageType.value == lanType) { state.seletLocale = e; + AppLog.log( + 'e:$e lanType:$lanType state.currentLanguageType.value:${state.currentLanguageType.value} Get.locale!.languageCode:${Get.locale!.languageCode} Get.locale!.countryCode:${Get.locale!.countryCode}'); } l.add( CommonItem( diff --git a/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart b/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart index a91eba99..29396160 100755 --- a/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart +++ b/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart @@ -4,20 +4,21 @@ import 'package:star_lock/app_settings/app_settings.dart'; import '../../tools/store_service.dart'; import '../../translations/app_dept.dart'; +import '../../translations/current_locale_tool.dart'; class MineMultiLanguageState { - // MineMultiLanguageState() { - // resetLan(); - // } + MineMultiLanguageState() {} List get languages { return appDept.deptSupportedLocales; } - Rx currentLanguageType = - StoreService.to.getLanguageCode()!.isEmpty - ? LanguageType.system.obs - : ExtensionLanguageType.fromLocale(Get.locale!).obs; + Rx currentLanguageType = StoreService.to + .getLanguageCode()! + .isEmpty + ? LanguageType.system.obs + : ExtensionLanguageType.fromLocale(CurrentLocaleTool.getCurrentLocale()) + .obs; late Locale seletLocale; } diff --git a/lib/translations/current_locale_tool.dart b/lib/translations/current_locale_tool.dart index 10c79e49..07e485a8 100644 --- a/lib/translations/current_locale_tool.dart +++ b/lib/translations/current_locale_tool.dart @@ -8,18 +8,15 @@ import 'app_dept.dart'; class CurrentLocaleTool { /// 获取当前语言的Locale字符串,没有的话获取系统的 static String getCurrentLocaleString() { - final Locale locale = StoreService.to.getLanguageCode()!.isNotEmpty + final String languageCode = StoreService.to.getLanguageCode()!.isNotEmpty ? appDept.deptSupportedLocales .where((Locale element) => - element.languageCode.toString() == - getCurrentLocaleWithLanguageCode( - StoreService.to.getLanguageCode()!) - .languageCode) + element.toString() == StoreService.to.getLanguageCode()!) .first - : Get.deviceLocale!; // Get.deviceLocale; - final String languageCode = convertLocale(locale).toString(); - // AppLog.log( - // '11111locale.toString(): ${locale.toString()} locale: $locale languageCode:$languageCode 从本地获取code:${StoreService.to.getLanguageCode()}'); + .toString() + : convertLocale(Get.deviceLocale!).toString(); // Get.deviceLocale; + // final String languageCode = convertLocale(locale).toString(); + // AppLog.log('11111locale.toString(): ${locale.toString()} locale: $locale languageCode:$languageCode 从本地获取code:${StoreService.to.getLanguageCode()}'); return languageCode; } @@ -28,15 +25,12 @@ class CurrentLocaleTool { final Locale locale = StoreService.to.getLanguageCode()!.isNotEmpty ? appDept.deptSupportedLocales .where((Locale element) => - element.languageCode.toString() == - getCurrentLocaleWithLanguageCode( - StoreService.to.getLanguageCode()!) - .languageCode) + element.toString() == StoreService.to.getLanguageCode()!) .first : Get.deviceLocale!; // Get.deviceLocale; final Locale getLocale = convertLocale(locale); - // AppLog.log( - // '222locale.toString(): ${locale.toString()} locale: $locale getLocale:$getLocale 从本地获取code:${StoreService.to.getLanguageCode()}'); + AppLog.log( + '222locale.toString(): ${locale.toString()} locale: $locale getLocale:$getLocale 从本地获取code:${StoreService.to.getLanguageCode()}'); return getLocale; } From ddf590c321ec05e86e9735115d40182af66f927f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Tue, 31 Dec 2024 13:57:22 +0800 Subject: [PATCH 02/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=BD=91=E5=85=B3=E6=A8=A1=E5=9D=97=E3=80=81=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E5=BC=80=E9=94=81=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E4=B8=BA?= =?UTF-8?q?60=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lockDetail/lockDetail_logic.dart | 4 +- lib/main_local.dart | 2 +- .../gatewayConfigurationWifi_logic.dart | 5 +- .../gatewayConfigurationWifi_page.dart | 1 - .../gatewayGetWifiList_logic.dart | 1 - .../gatewayConnectionLockList_logic.dart | 5 +- .../gatewayConnectionLockList_page.dart | 2 +- .../gatewayDetail/gatewayDetail_logic.dart | 6 +- .../gatewayList/gatewayList_logic.dart | 10 +-- .../selectGetewayList_logic.dart | 16 ++-- lib/network/api_provider.dart | 79 ++++++++++--------- lib/network/api_provider_base.dart | 5 +- lib/network/api_repository.dart | 72 +++++++++-------- pubspec.yaml | 2 +- 14 files changed, 109 insertions(+), 101 deletions(-) diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index e6cf086b..074847ea 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -606,8 +606,8 @@ class LockDetailLogic extends BaseGetXController { // 远程开锁 Future remoteOpenLock() async { - final LoginEntity entity = await ApiRepository.to - .remoteOpenLock(lockId: state.keyInfos.value.lockId.toString()); + final LoginEntity entity = await ApiRepository.to.remoteOpenLock( + lockId: state.keyInfos.value.lockId.toString(), timeOut: 60); if (entity.errorCode!.codeIsSuccessful) { showToast('已开锁'.tr); } diff --git a/lib/main_local.dart b/lib/main_local.dart index 9e30d007..f56b6d65 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.xhj; + F.appFlavor = Flavor.xhj_pre; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart index 1cf70a9e..17344cda 100644 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart @@ -31,7 +31,8 @@ class GatewayConfigurationWifiLogic extends BaseGetXController { networkName: state.wifiNameTF.text, networkMac: state.gatewayModel.wifiMac, version: state.gatewayModel.gatewayVersion, - gatewayJson: jsonDecode(state.gatewayJson)); + gatewayJson: jsonDecode(state.gatewayJson), + timeout: 60); if (entity.errorCode!.codeIsSuccessful) { showToast('配网成功'.tr, something: () { // eventBus.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); @@ -42,7 +43,7 @@ class GatewayConfigurationWifiLogic extends BaseGetXController { Future getGatewayConfiguration() async { final GetGatewayConfigurationEntity entity = - await ApiRepository.to.getGatewayConfiguration(); + await ApiRepository.to.getGatewayConfiguration(timeout: 60); if (entity.errorCode!.codeIsSuccessful) { state.getGatewayConfigurationStr = entity.data ?? ''; // AppLog.log('state.getGatewayConfigurationStr:${state.getGatewayConfigurationStr}'); diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart index 02433378..e1e20481 100755 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart @@ -3,7 +3,6 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/appRouteObserver.dart'; import '../../../../tools/commonItem.dart'; diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart index 28f471e9..9d671e45 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/blue/io_gateway/io_gateway_configuringWifi.dart'; import 'package:star_lock/blue/io_gateway/io_gateway_getWifiList.dart'; import 'package:star_lock/tools/baseGetXController.dart'; diff --git a/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_logic.dart b/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_logic.dart index d670c100..1865d315 100644 --- a/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_logic.dart +++ b/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_logic.dart @@ -12,7 +12,8 @@ class GatewayConnectionLockListLogic extends BaseGetXController { Future gatewayConnectionLockListDataRequest() async { final GatewayConnectionLockListEntity entity = await ApiRepository.to - .gatewayConnectionLockLoadData(gatewayId: state.gatewayId.value); + .gatewayConnectionLockLoadData( + gatewayId: state.gatewayId.value, timeout: 60); if (entity.errorCode!.codeIsSuccessful) { state.itemDataList.value = entity.data!.list!; } @@ -21,7 +22,7 @@ class GatewayConnectionLockListLogic extends BaseGetXController { Future gatewayScanDevice() async { final LoginEntity entity = await ApiRepository.to - .gatewayScanDevice(gatewayId: state.gatewayId.value); + .gatewayScanDevice(gatewayId: state.gatewayId.value, timeout: 60); if (entity.errorCode!.codeIsSuccessful) { gatewayConnectionLockListDataRequest(); } diff --git a/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_page.dart b/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_page.dart index 7eaaa516..8978cfce 100755 --- a/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_page.dart +++ b/lib/mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_page.dart @@ -49,7 +49,7 @@ class _GatewayConnectionLockListPageState Obx(() => Expanded( child: state.itemDataList.value.isNotEmpty ? ListView.builder( - itemCount: 10, + itemCount: state.itemDataList.value.length, itemBuilder: (BuildContext c, int index) { final GatewayConnectionLockItemEntity entity = state.itemDataList[index]; diff --git a/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart b/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart index 5ea251f0..eabb827f 100644 --- a/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart +++ b/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart @@ -12,7 +12,8 @@ class GatewayDetailLogic extends BaseGetXController { Future deletGateway(int isForce) async { final LoginEntity entity = await ApiRepository.to.gatewayDelet( gatewayId: state.getewayItemData.value.gatewayId ?? 0, - isForce: isForce); + isForce: isForce, + timeout: 60); if (entity.errorCode!.codeIsSuccessful) { showToast('删除成功'.tr, something: () { // eventBus.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); @@ -27,7 +28,8 @@ class GatewayDetailLogic extends BaseGetXController { Future updateGateway(String gatewayName) async { final LoginEntity entity = await ApiRepository.to.gatewayUpdate( gatewayId: state.getewayItemData.value.gatewayId ?? 0, - gatewayName: gatewayName); + gatewayName: gatewayName, + timeout: 60); if (entity.errorCode!.codeIsSuccessful) { showToast('修改成功'.tr, something: () { // eventBus.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); diff --git a/lib/mine/gateway/gatewayList/gatewayList_logic.dart b/lib/mine/gateway/gatewayList/gatewayList_logic.dart index cb99572f..7606aaae 100644 --- a/lib/mine/gateway/gatewayList/gatewayList_logic.dart +++ b/lib/mine/gateway/gatewayList/gatewayList_logic.dart @@ -1,4 +1,3 @@ - import 'package:star_lock/tools/baseGetXController.dart'; import '../../../login/login/entity/LoginEntity.dart'; @@ -18,9 +17,7 @@ class GatewayListLogic extends BaseGetXController { pageNo = 1; } final GetewayDataEntity entity = await ApiRepository.to.getGatewayListData( - pageNo: pageNo.toString(), - pageSize: pageSize, - ); + pageNo: pageNo.toString(), pageSize: pageSize, timeout: 60); if (entity.errorCode!.codeIsSuccessful) { // 更新数据列表 state.getewayListData.addAll(entity.data!.list!); @@ -51,7 +48,6 @@ class GatewayListLogic extends BaseGetXController { // @override // void onInit() { // super.onInit(); - // gatewayDistributionNetwork(); + // gatewayDistributionNetwork(); // } - -} \ No newline at end of file +} diff --git a/lib/mine/mineSet/transferGateway/selectGetewayList_logic.dart b/lib/mine/mineSet/transferGateway/selectGetewayList_logic.dart index 26333cdd..558d4027 100755 --- a/lib/mine/mineSet/transferGateway/selectGetewayList_logic.dart +++ b/lib/mine/mineSet/transferGateway/selectGetewayList_logic.dart @@ -1,20 +1,17 @@ - import 'package:star_lock/mine/mineSet/transferGateway/selectGetewayList_entity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../network/api_repository.dart'; import 'selectGetewayList_state.dart'; -class SelectGetewayListLogic extends BaseGetXController{ +class SelectGetewayListLogic extends BaseGetXController { SelectGetewayListState state = SelectGetewayListState(); // 获取锁列表 - Future getGetewayListData() async{ - final GetewayDataEntity entity = await ApiRepository.to.getGatewayListData( - pageNo: '1', - pageSize: '20' - ); - if(entity.errorCode!.codeIsSuccessful){ + Future getGetewayListData() async { + final GetewayDataEntity entity = await ApiRepository.to + .getGatewayListData(pageNo: '1', pageSize: '20', timeout: 60); + if (entity.errorCode!.codeIsSuccessful) { state.getewayListData.value = entity.data!.list!; } } @@ -25,5 +22,4 @@ class SelectGetewayListLogic extends BaseGetXController{ getGetewayListData(); } - -} \ No newline at end of file +} diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 76677fa1..aa72dd07 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -1727,21 +1727,23 @@ class ApiProvider extends BaseProvider { })); // 获取网关列表 - Future getGatewayListData(String pageNo, String pageSize) => post( - gatewaykListURL.toUrl, - jsonEncode({'pageNo': pageNo, 'pageSize': pageSize})); + Future getGatewayListData( + String pageNo, String pageSize, int timeout) => + post(gatewaykListURL.toUrl, + jsonEncode({'pageNo': pageNo, 'pageSize': pageSize}), + timeout: timeout); // 添加网关 Future addGatewayNetwork( - String gatewayName, - String gatewayMac, - String serialNumber, - int gatewayType, - String networkName, - String networkMac, - String version, - Map gatewayJson, - ) => + String gatewayName, + String gatewayMac, + String serialNumber, + int gatewayType, + String networkName, + String networkMac, + String version, + Map gatewayJson, + int timeout) => post( addGatewayURL.toUrl, jsonEncode({ @@ -1753,37 +1755,37 @@ class ApiProvider extends BaseProvider { 'networkMac': networkMac, 'version': version, 'gatewayJson': gatewayJson, - })); + }), + timeout: timeout); // 删除网关 - Future deletGateway(int gatewayId, int isForce) => post( - deletGatewayURL.toUrl, - jsonEncode({ - 'gatewayId': gatewayId, - 'isForce': isForce, - })); + Future deletGateway(int gatewayId, int isForce, int timeout) => + post( + deletGatewayURL.toUrl, + jsonEncode({ + 'gatewayId': gatewayId, + 'isForce': isForce, + }), + timeout: timeout); // 网关更新 Future gatewayUpdate( - int gatewayId, - String gatewayName, - ) => + int gatewayId, String gatewayName, int timeout) => post( updateGatewayURL.toUrl, jsonEncode({ 'gatewayId': gatewayId, 'gatewayName': gatewayName, - })); + }), + timeout: timeout); // 远程开锁 - Future remoteOpenLock( - String lockId, - ) => - post( - remoteOpenLockURL.toUrl, - jsonEncode({ - 'lockId': lockId, - })); + Future remoteOpenLock(String lockId, int timeOut) => post( + remoteOpenLockURL.toUrl, + jsonEncode({ + 'lockId': lockId, + }), + timeout: timeOut); // 转移网关确认 Future transferGatewayConfirmInfoData( @@ -1808,14 +1810,17 @@ class ApiProvider extends BaseProvider { })); // 获取网关配置 - Future getGatewayConfiguration() => - post(getGatewayConfigURL.toUrl, jsonEncode({})); + Future getGatewayConfiguration(int timeout) => + post(getGatewayConfigURL.toUrl, jsonEncode({}), timeout: timeout); - Future gatewayConnectionLockListLoadData(int gatewayId) => - post(gatewayListByLockURL.toUrl, jsonEncode({'gatewayId': gatewayId})); + Future gatewayConnectionLockListLoadData( + int gatewayId, int timeout) => + post(gatewayListByLockURL.toUrl, jsonEncode({'gatewayId': gatewayId}), + timeout: timeout); - Future gatewayScanDevice(int gatewayId) => - post(gatewayScanDeviceURL.toUrl, jsonEncode({'gatewayId': gatewayId})); + Future gatewayScanDevice(int gatewayId, int timeout) => + post(gatewayScanDeviceURL.toUrl, jsonEncode({'gatewayId': gatewayId}), + timeout: timeout); // 移除坏锁 Future removeBrokenLockData(List lockIdList) => diff --git a/lib/network/api_provider_base.dart b/lib/network/api_provider_base.dart index e6563cdb..2d941506 100755 --- a/lib/network/api_provider_base.dart +++ b/lib/network/api_provider_base.dart @@ -37,6 +37,7 @@ class BaseProvider extends GetConnect with Api { bool? isUserBaseUrl = true, // 文件上传不使用baseUrl bool? isShowErrMsg = true, // 是否显示没有网络时的提示 bool? isShowNetworkErrorMsg = true, // 是否显示网络其他报错 如403 500等 + int? timeout = 15, }) async { AppLog.log('post: url:$url body:$body'); if (isUnShowLoading == false) { @@ -47,6 +48,8 @@ class BaseProvider extends GetConnect with Api { } else { httpClient.baseUrl = '${F.apiPrefix}/api'; } + httpClient.timeout = timeout!.seconds; + // AppLog.log('timeout:$timeout httpClient.timeout:${httpClient.timeout}'); var res = await super.post(url, body, contentType: contentType, headers: headers, @@ -78,7 +81,7 @@ class BaseProvider extends GetConnect with Api { statusText: res.statusText, ); } else {} - if(isShowNetworkErrorMsg ?? true){ + if (isShowNetworkErrorMsg ?? true) { getDataResult(res.body); } return res; diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 1f793ff0..53d9b263 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -1912,22 +1912,24 @@ class ApiRepository { // 获取网关列表 Future getGatewayListData( - {required String pageNo, required String pageSize}) async { - final res = await apiProvider.getGatewayListData(pageNo, pageSize); + {required String pageNo, + required String pageSize, + required int timeout}) async { + final res = await apiProvider.getGatewayListData(pageNo, pageSize, timeout); return GetewayDataEntity.fromJson(res.body); } // 添加网关 - Future gatewayDistributionNetwork({ - required String gatewayName, - required String gatewayMac, - required String serialNumber, - required int gatewayType, - required String networkName, - required String networkMac, - required String version, - required Map gatewayJson, - }) async { + Future gatewayDistributionNetwork( + {required String gatewayName, + required String gatewayMac, + required String serialNumber, + required int gatewayType, + required String networkName, + required String networkMac, + required String version, + required Map gatewayJson, + required int timeout}) async { final res = await apiProvider.addGatewayNetwork( gatewayName, gatewayMac, @@ -1936,25 +1938,27 @@ class ApiRepository { networkName, networkMac, version, - gatewayJson); + gatewayJson, + timeout); return LoginEntity.fromJson(res.body); } // 删除网关 - Future gatewayDelet({ - required int gatewayId, - required int isForce, - }) async { - final res = await apiProvider.deletGateway(gatewayId, isForce); + Future gatewayDelet( + {required int gatewayId, + required int isForce, + required int timeout}) async { + final res = await apiProvider.deletGateway(gatewayId, isForce, timeout); return LoginEntity.fromJson(res.body); } // 网关更新 - Future gatewayUpdate({ - required int gatewayId, - required String gatewayName, - }) async { - final res = await apiProvider.gatewayUpdate(gatewayId, gatewayName); + Future gatewayUpdate( + {required int gatewayId, + required String gatewayName, + required int timeout}) async { + final res = + await apiProvider.gatewayUpdate(gatewayId, gatewayName, timeout); return LoginEntity.fromJson(res.body); } @@ -1970,22 +1974,23 @@ class ApiRepository { // 网关-附近的锁 Future gatewayConnectionLockLoadData( - {required int gatewayId}) async { - final res = await apiProvider.gatewayConnectionLockListLoadData(gatewayId); + {required int gatewayId, required int timeout}) async { + final res = + await apiProvider.gatewayConnectionLockListLoadData(gatewayId, timeout); return GatewayConnectionLockListEntity.fromJson(res.body); } // 网关-扫描设备 - Future gatewayScanDevice({ - required int gatewayId, - }) async { - final res = await apiProvider.gatewayScanDevice(gatewayId); + Future gatewayScanDevice( + {required int gatewayId, required int timeout}) async { + final res = await apiProvider.gatewayScanDevice(gatewayId, timeout); return LoginEntity.fromJson(res.body); } // 远程开锁 - Future remoteOpenLock({required String lockId}) async { - final res = await apiProvider.remoteOpenLock(lockId); + Future remoteOpenLock( + {required String lockId, required int timeOut}) async { + final res = await apiProvider.remoteOpenLock(lockId, timeOut); return LoginEntity.fromJson(res.body); } @@ -2000,8 +2005,9 @@ class ApiRepository { } // 获取网关配置 - Future getGatewayConfiguration() async { - final res = await apiProvider.getGatewayConfiguration(); + Future getGatewayConfiguration( + {required int timeout}) async { + final res = await apiProvider.getGatewayConfiguration(timeout); return GetGatewayConfigurationEntity.fromJson(res.body); } diff --git a/pubspec.yaml b/pubspec.yaml index 2d34dcf6..30320b8d 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -104,7 +104,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.85+2024120301:完善网关功能 # 1.0.85+2024120401:修复网关问题,打包给谢敬调试 -version: 1.0.85+2024121301 +version: 1.0.85+2024123102 environment: sdk: '>=2.12.0 <3.0.0' From 40112dfb37cdefb6121a3e8de0b46eed3d8ba1a8 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Tue, 31 Dec 2024 14:24:58 +0800 Subject: [PATCH 03/67] =?UTF-8?q?other:=20pre=EF=BC=8Cdev=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/android/app/build.gradle b/android/app/build.gradle index 21be3ed4..1d9aea6d 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -240,7 +240,11 @@ android { productFlavors.dev.signingConfig signingConfigs.debug productFlavors.pre.signingConfig signingConfigs.debug productFlavors.sky.signingConfig signingConfigs.sky + productFlavors.sky_dev.signingConfig signingConfigs.sky + productFlavors.sky_pre.signingConfig signingConfigs.sky productFlavors.xhj.signingConfig signingConfigs.xhj + productFlavors.xhj_dev.signingConfig signingConfigs.xhj + productFlavors.xhj_pre.signingConfig signingConfigs.xhj } release { // 高德地图导致release编译模式下应用闪退,根据:[高德地图在Debug模式下运行正常但是打Release包时则闪退解决办法](https://blog.csdn.net/weixin_39370093/article/details/109631210) @@ -252,7 +256,11 @@ android { productFlavors.dev.signingConfig signingConfigs.debug productFlavors.pre.signingConfig signingConfigs.debug productFlavors.sky.signingConfig signingConfigs.sky + productFlavors.sky_dev.signingConfig signingConfigs.sky + productFlavors.sky_pre.signingConfig signingConfigs.sky productFlavors.xhj.signingConfig signingConfigs.xhj + productFlavors.xhj_dev.signingConfig signingConfigs.xhj + productFlavors.xhj_pre.signingConfig signingConfigs.xhj } } From 00a6a113a92cc7396f3bdd9993dbe14b04f59bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Thu, 2 Jan 2025 16:15:41 +0800 Subject: [PATCH 04/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_ar.json | 5 +++-- lan/lan_bg.json | 5 +++-- lan/lan_bn.json | 5 +++-- lan/lan_cs.json | 5 +++-- lan/lan_da.json | 5 +++-- lan/lan_de.json | 5 +++-- lan/lan_el.json | 5 +++-- lan/lan_en.json | 8 +++----- lan/lan_es.json | 5 +++-- lan/lan_et.json | 5 +++-- lan/lan_fi.json | 5 +++-- lan/lan_fr.json | 5 +++-- lan/lan_he.json | 5 +++-- lan/lan_hk.json | 5 +++-- lan/lan_hr.json | 5 +++-- lan/lan_hu.json | 5 +++-- lan/lan_id.json | 5 +++-- lan/lan_it.json | 5 +++-- lan/lan_ja.json | 5 +++-- lan/lan_keys.json | 8 +++----- lan/lan_kk.json | 5 +++-- lan/lan_ko.json | 5 +++-- lan/lan_lt.json | 5 +++-- lan/lan_ms.json | 5 +++-- lan/lan_nl.json | 5 +++-- lan/lan_pl.json | 5 +++-- lan/lan_pt.json | 5 +++-- lan/lan_ro.json | 5 +++-- lan/lan_ru.json | 5 +++-- lan/lan_sk.json | 5 +++-- lan/lan_sr_cyrl.json | 7 ++++--- lan/lan_sv.json | 5 +++-- lan/lan_th.json | 5 +++-- lan/lan_tr.json | 5 +++-- lan/lan_tw.json | 5 +++-- lan/lan_uk.json | 5 +++-- lan/lan_vi.json | 5 +++-- lan/lan_zh.json | 9 +++------ .../lockDetail/lockSet/faceUnlock/faceUnlock_page.dart | 3 ++- lib/translations/app_dept.dart | 4 ++-- lib/translations/current_locale_tool.dart | 2 +- lib/translations/translation_message.dart | 2 +- 42 files changed, 121 insertions(+), 92 deletions(-) diff --git a/lan/lan_ar.json b/lan/lan_ar.json index 44cffeca..cc05a60a 100644 --- a/lan/lan_ar.json +++ b/lan/lan_ar.json @@ -582,7 +582,6 @@ "商城": "مول", "我的": "لي", "微信公众号推送": "حساب عام Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "لفتح wechat لتلقي رسائل التنبيه ، تحتاج إلى الانتباه إلى قفل Skye الذكي wechat الحساب العام أولاً ، يرجى حفظ رمز الاستجابة السريعة واستخدام wechat لمسح الإعدادات", "蓝牙": "بلوتوث", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "الوصول إلى أذونات البلوتوث مطلوب لاستخدام معلومات الموقع لوظيفة مفتاح الإضافة", "请输入Email": "أدخل بريدك الإلكتروني", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "اتبع النظام" + "跟随系统": "اتبع النظام", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف بصمات القفل. هل أنت متأكد أنك تريد إعادة ضبطه ؟", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟" } \ No newline at end of file diff --git a/lan/lan_bg.json b/lan/lan_bg.json index 6567d1c8..1ff0814d 100644 --- a/lan/lan_bg.json +++ b/lan/lan_bg.json @@ -583,7 +583,6 @@ "商城": "Мол", "我的": "Мой", "微信公众号推送": "Публичен акаунт wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "За да отворите wechat, за да получавате алармени съобщения, първо трябва да обърнете внимание на публичната сметка на skye smart lock wechat, моля, запишете qr кода и използвайте wechat, за да сканирате настройките", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "За използване на информацията за местоположението на функцията за добавяне на ключ е необходим достъп до bluetooth разрешения", "请输入Email": "Въведете вашия имейл", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Следете система" + "跟随系统": "Следете система", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "След нулиране, пръстовите отпечатъци на заключването ще бъдат изтрити. Сигурен ли сте, че искате да го нулирате?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?" } \ No newline at end of file diff --git a/lan/lan_bn.json b/lan/lan_bn.json index 1542a4ab..795fae0c 100644 --- a/lan/lan_bn.json +++ b/lan/lan_bn.json @@ -582,7 +582,6 @@ "商城": "XmallName", "我的": "My", "微信公众号推送": "ইয়াক", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "টোপেনডেট হোয়াট্ট", "蓝牙": "নিকট্রিয়াথ", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "ক্ষেত্রে ট্যাক্সট lu▁ইমেরিসিসোসিয়েশনস ...বিরোধী ...বিরোধী", "请输入Email": "দ্বিগুণ", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "এক্ফক্লোসিস্টেম" + "跟随系统": "এক্ফক্লোসিস্টেম", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?" } \ No newline at end of file diff --git a/lan/lan_cs.json b/lan/lan_cs.json index 4954aa0f..7481a2b9 100644 --- a/lan/lan_cs.json +++ b/lan/lan_cs.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "My", "微信公众号推送": "Veřejný účet wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Chcete-li otevřít wechat a přijímat poplašné zprávy, musíte nejprve věnovat pozornost veřejnému účtu skye smart lock wechat, uložte qr kód a použijte wechat k skenování nastavení", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Pro použití informací o umístění funkce přidat klíč je zapotřebí přístup k oprávněním bluetooth.", "请输入Email": "Zadejte e-mail", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Sledovat systém" + "跟随系统": "Sledovat systém", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetování budou otisky prstů zámku odstraněny. Opravdu ho chcete obnovit?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?" } \ No newline at end of file diff --git a/lan/lan_da.json b/lan/lan_da.json index ee31f06f..d31899a2 100644 --- a/lan/lan_da.json +++ b/lan/lan_da.json @@ -582,7 +582,6 @@ "商城": "Indkøbscent", "我的": "Je", "微信公众号推送": "Vichat offentlige konto", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "For at åbne Wechat for at modtage alarmbeskeder, skal du være opmærksom på Skye Smart Lock vichat offentlige konto først, gem venligst QR-koden og brug wechat til at scanne indstillinger", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Adgang til Bluetooth-tilladelser er påkrævet for at bruge placeringsinformationen for tilføje nøglefunktionens placering", "请输入Email": "Indtast din e- mail", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Følg systemet" + "跟随系统": "Følg systemet", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?" } \ No newline at end of file diff --git a/lan/lan_de.json b/lan/lan_de.json index ef466e35..049563a7 100644 --- a/lan/lan_de.json +++ b/lan/lan_de.json @@ -582,7 +582,6 @@ "商城": "Einkaufs zentrum", "我的": "Meine", "微信公众号推送": "Wechat öffentliches Konto", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Um Wechat zu öffnen, um Alarm meldungen zu erhalten, müssen Sie zuerst auf das öffentliche Konto von Skye Smart Lock wechat achten. Speichern Sie den QR-Code und verwenden Sie wechat, um die Einstellungen zu scannen", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Zugriff auf Bluetooth-Berechtigungen ist erforderlich, um die Standort informationen der Add-Key-Funktion zu verwenden", "请输入Email": "Geben Sie Ihre E-Mail-Adresse ein", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "System folgen" + "跟随系统": "System folgen", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Finger abdrücke des Schlosses gelöscht. Sind Sie sicher, dass Sie es zurücksetzen wollen?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?" } \ No newline at end of file diff --git a/lan/lan_el.json b/lan/lan_el.json index 8615448e..82a15dfe 100644 --- a/lan/lan_el.json +++ b/lan/lan_el.json @@ -582,7 +582,6 @@ "商城": "Εμπορικό", "我的": "Μου", "微信公众号推送": "Συνομιλία δημόσιου λογαριασμού", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Για να ανοίξετε τη συζήτηση για να λάβετε μηνύματα συναγερμού, θα πρέπει να δώσετε προσοχή στο Skye Smart Lock δημόσιο λογαριασμό για τη συζήτηση. παρακαλώ αποθηκεύστε τον κωδικό QR και χρησιμοποιήστε τη συνομιλία για σάρωση των ρυθμίσεων", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Απαιτείται πρόσβαση στις άδειες Bluetooth για τη χρήση των πληροφοριών τοποθεσίας της λειτουργίας βασικής προσθήκης", "请输入Email": "Εισάγετε το email σας", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Ακολουθήστε το σύστημα" + "跟随系统": "Ακολουθήστε το σύστημα", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;" } \ No newline at end of file diff --git a/lan/lan_en.json b/lan/lan_en.json index e203f2c4..a4376a71 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -584,7 +584,6 @@ "商城": "mall", "我的": "my", "微信公众号推送": "Wechat public account", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "To open wechat to receive alarm messages, you need to pay attention to Skye Smart Lock wechat public account first, please save the QR code and use wechat to scan the Settings", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Access to Bluetooth permissions is required to use the location information of the add key function", "请输入Email": "Enter your Email", @@ -1089,7 +1088,6 @@ "修改名字": "Edit name", "时": "hour", "分": "minute", - "Amazon Alexa": "Amazon Alexa", "您可以使用Alexa进行开锁、闭锁和查看锁状态": "You can use Alexa to unlock, lock and check the lock status", "支持的国家": "Supported countries", @@ -1102,12 +1100,10 @@ "支持的语言": "Supported languages", "英语": "English", "Google Home操作流程的值": "1. Use the Smart lock APP to add locks and gateways \n\n2. Enable the remote unlocking function of the lock in the APP (this function is turned off by default). Without this option, the lock does not support Google Home \n\n3. Install the Google Home APP and click the \"+\" button in the top left corner \n\n4. On the Settings page, select \"Work with Google\" \n\n5. Search for \"ScienerSmart\" and use the smart lock APP account and password to authorize", - "密码需至少包含数字/字母/字符中的2种组合": "The password must contain at least 2 of the following: numbers, letters, and special characters", "已开锁": "Unlocked", "已闭锁": "Locked", "两次密码不一致哦": "The passwords are inconsistent", - "中功率": "Medium power", "常规使用": "Regular use", "扫描设备": "Scan device", @@ -1122,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Follow system" + "跟随系统": "Follow system", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?" } diff --git a/lan/lan_es.json b/lan/lan_es.json index 6be6e12e..b9c06ea5 100644 --- a/lan/lan_es.json +++ b/lan/lan_es.json @@ -582,7 +582,6 @@ "商城": "Centro comercial", "我的": "Mi", "微信公众号推送": "Cuenta pública de Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Para abrir wechat para recibir mensajes de alarma, debe prestar atención a Skye Smart Lock wechat cuenta pública primero, guarde el código QR y use wechat para escanear la configuración", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Se requiere el acceso a los permisos de Bluetooth para usar la información de ubicación de la función de tecla agregar", "请输入Email": "Ingrese su correo electrónico", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Seguir sistema" + "跟随系统": "Seguir sistema", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Después de restablecer, se eliminarán las huellas dactilares del bloqueo. ¿Está seguro de que desea restablecerlo?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?" } \ No newline at end of file diff --git a/lan/lan_et.json b/lan/lan_et.json index 36e7dbd6..e7209737 100644 --- a/lan/lan_et.json +++ b/lan/lan_et.json @@ -582,7 +582,6 @@ "商城": "Kaubamaja", "我的": "Minu", "微信公众号推送": "Jutt avalik konto", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Et avada häiresõnumite vastuvõtmiseks, peate esmalt tähelepanu Skye Smart Locki avalikule kontole, palun salvesta QR koodi ja kasuta seadistuste skaneerimiseks", "蓝牙": "BluetoothName", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Juurdepääs Bluetooth-i õigustele on vaja, et kasutada asukoha lisamise funktsiooni asukoha teavet", "请输入Email": "Sisesta oma e- postil", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Süsteemi jälgimine" + "跟随系统": "Süsteemi jälgimine", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?" } \ No newline at end of file diff --git a/lan/lan_fi.json b/lan/lan_fi.json index be6b3412..727a8557 100644 --- a/lan/lan_fi.json +++ b/lan/lan_fi.json @@ -582,7 +582,6 @@ "商城": "Ostoskeskus", "我的": "Minun", "微信公众号推送": "Keskustele julkinen tili", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Voidakseen avata keskustelua hälytysviestien vastaanottamiseksi sinun on kiinnitettävä huomiota Skye Smart Lockin julkiseen keskusteluun. Tallenna QR-koodi ja käytä keskustelua asetusten kartoittamiseen", "蓝牙": "BluetoothName", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Pääsy Bluetooth-oikeuksiin vaaditaan käyttämään sijaintitietoja lisätä avaintoiminnon lisäämiseksi", "请输入Email": "Anna sähköposti", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Seuraa järjestelmää" + "跟随系统": "Seuraa järjestelmää", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?" } \ No newline at end of file diff --git a/lan/lan_fr.json b/lan/lan_fr.json index 41653eba..f630b6df 100644 --- a/lan/lan_fr.json +++ b/lan/lan_fr.json @@ -582,7 +582,6 @@ "商城": "Centre commercial", "我的": "Mon", "微信公众号推送": "Compte public Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Pour ouvrir wechat pour recevoir des messages d'alarme, vous devez faire attention à Skye Smart Lock compte public wechat d'abord, s'il vous plaît enregistrer le code QR et utiliser wechat pour scanner les paramètres", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "L'accès aux autorisations Bluetooth est nécessaire pour utiliser les informations de localisation de la fonction de touche d'ajout", "请输入Email": "Entrez votre email", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Suivre le système" + "跟随系统": "Suivre le système", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?" } \ No newline at end of file diff --git a/lan/lan_he.json b/lan/lan_he.json index 964fde7b..4ed3a79a 100644 --- a/lan/lan_he.json +++ b/lan/lan_he.json @@ -582,7 +582,6 @@ "商城": "קניון", "我的": "שלי", "微信公众号推送": "חשבון הציבור", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "כדי לפתוח wechat כדי לקבל הודעות אזעקה, עליך לשים לב כדי skye חכם מנעול wechat code, אנא שמור את קוד qr ולהשתמש wechat כדי לסרוק את ההגדרות", "蓝牙": "בלוץ", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "גישה הרשאות Bluetooth נדרש להשתמש במידע המיקום של פונקציית מפתח הוספת", "请输入Email": "הזן את כתובת הדוא \"ל שלך", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "מערכת מעקב" + "跟随系统": "מערכת מעקב", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?" } \ No newline at end of file diff --git a/lan/lan_hk.json b/lan/lan_hk.json index d7ad3f6c..c8471d71 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -583,7 +583,6 @@ "商城": "购物中心", "我的": "我的", "微信公众号推送": "微信公众账号", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "打开微信接收报警信息,需先关注天凯智能锁微信公众账号,保存二维码后使用微信扫描设置", "蓝牙": "蓝牙", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "使用add key功能的位置信息需要有蓝牙权限", "请输入Email": "输入你的电子邮箱", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "跟踪系统" + "跟随系统": "跟踪系统", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,锁上的指纹会被删除。你确定要重置吗?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,锁的远程控制将被删除。你想重置它吗?" } \ No newline at end of file diff --git a/lan/lan_hr.json b/lan/lan_hr.json index 557389ba..756e9c3d 100644 --- a/lan/lan_hr.json +++ b/lan/lan_hr.json @@ -582,7 +582,6 @@ "商城": "Centar.", "我的": "Moj moj", "微信公众号推送": "Razgovaraj o javnom računu", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Da biste otvorili razgovor i primali alarmne poruke, morate obratiti pažnju na Skye Smart Lock čavrlja javni račun prvo, Molim spremite QR kod i koristite we chat za skeniranje postavke", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Pristup Bluetooth dozvolama je potreban za korištenje informacija o lokaciji funkcije dodavanja ključeva", "请输入Email": "Unesite svoj email", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Prati sistem:" + "跟随系统": "Prati sistem:", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?" } \ No newline at end of file diff --git a/lan/lan_hu.json b/lan/lan_hu.json index 58ad7bbf..5e47b0c3 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "My", "微信公众号推送": "Wechat nyilvános számla", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "A wechat megnyitásához a riasztási üzenetek fogadásához először a skye smart lock wechat nyilvános számlára kell figyelni, kérjük, mentse el a qr kódot és használja a wechat-et a beállítások beolvasásához", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "A bluetooth engedélyekhez való hozzáférés szükséges ahhoz, hogy a kulcs hozzáadása függvény helyének adatait használhassuk", "请输入Email": "Írja be az e-mail", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Follow system" + "跟随系统": "Follow system", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?" } \ No newline at end of file diff --git a/lan/lan_id.json b/lan/lan_id.json index 71306282..698dbd83 100644 --- a/lan/lan_id.json +++ b/lan/lan_id.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "My", "微信公众号推送": "Akun publik Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Untuk membuka wechat untuk menerima pesan alarm, Anda perlu perhatian Skye kunci pintar akun publik wechat terlebih dahulu, Harap simpan kode QR dan gunakan wechat untuk memindai pengaturan", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Akses ke Izin Bluetooth diperlukan untuk menggunakan informasi lokasi fungsi kunci Tambah", "请输入Email": "Masukkan Email anda", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Sistem mengikuti" + "跟随系统": "Sistem mengikuti", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?" } \ No newline at end of file diff --git a/lan/lan_it.json b/lan/lan_it.json index 93144303..cd375d3c 100644 --- a/lan/lan_it.json +++ b/lan/lan_it.json @@ -582,7 +582,6 @@ "商城": "Centro commerciale", "我的": "Il mio", "微信公众号推送": "Conto pubblico Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Per aprire wechat per ricevere messaggi di allarme, è necessario prestare attenzione prima all'account pubblico Skye Smart Lock wechat, salva il codice QR e usa wechat per scansionare le impostazioni", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Per utilizzare le informazioni sulla posizione della funzione add key è necessario l'accesso alle autorizzazioni Bluetooth", "请输入Email": "Inserisci la tua email", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Seguire il sistema" + "跟随系统": "Seguire il sistema", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Dopo il reset, le impronte digitali del lucchetto verranno cancellate. Sei sicuro di volerlo resettare?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?" } \ No newline at end of file diff --git a/lan/lan_ja.json b/lan/lan_ja.json index 39576260..ef2509f4 100644 --- a/lan/lan_ja.json +++ b/lan/lan_ja.json @@ -582,7 +582,6 @@ "商城": "モール", "我的": "私の", "微信公众号推送": "Wechatパブリックアカウント", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Wechatを開いてアラームメッセージを受信するには、まずSkye Smart Lock wechat公開アカウントに注意を払う必要があります。QRコードを保存し、wechatを使用して設定をスキャンしてください。", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "追加キー機能の位置情報を使用するには、Bluetooth権限へのアクセスが必要です。", "请输入Email": "メールを入力", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "システムに従う" + "跟随系统": "システムに従う", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?" } \ No newline at end of file diff --git a/lan/lan_keys.json b/lan/lan_keys.json index 1656967f..bf8f6820 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -587,7 +587,6 @@ "商城": "mall", "我的": "my", "微信公众号推送": "微信公众号推送", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置", "蓝牙": "蓝牙", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "需要访问蓝牙权限才能使用添加钥匙功能的位置信息", "请输入Email": "请输入Email", @@ -788,7 +787,6 @@ "导出": "导出", "批量导出": "批量导出", "读取记录": "读取记录", - "手机需联网": "手机需联网", "设备": "设备", "消息": "消息", "智能分析": "智能分析", @@ -1090,7 +1088,6 @@ "修改名字": "修改名字", "时": "时", "分": "分", - "Amazon Alexa": "Amazon Alexa", "您可以使用Alexa进行开锁、闭锁和查看锁状态": "您可以使用Alexa进行开锁、闭锁和查看锁状态", "支持的国家": "支持的国家", @@ -1107,7 +1104,6 @@ "已开锁": "已开锁", "已闭锁": "已闭锁", "两次密码不一致哦": "两次密码不一致哦", - "中功率": "中功率", "常规使用": "常规使用", "扫描设备": "扫描设备", @@ -1122,5 +1118,7 @@ "日简称": "日简称", "时简称": "时简称", "分简称": "分简称", - "跟随系统": "跟随系统" + "跟随系统": "跟随系统", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?" } diff --git a/lan/lan_kk.json b/lan/lan_kk.json index ca429781..9e6961bc 100644 --- a/lan/lan_kk.json +++ b/lan/lan_kk.json @@ -582,7 +582,6 @@ "商城": "Ескері", "我的": "Менін", "微信公众号推送": "Жалпы тіркелгі тіркеу", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Ескерту хабарламасын алу үшін, алдымен Skye Smart Lock wechat ашық тіркелгі тіркелгісін ашу керек. QR кодын сақтау және баптауларды сканың үшін wechat қолданыңын", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Кілттерді қосу функцияның орналасуы қолдану үшін Bluetooth рұқсаттарын қатынау керек еті", "请输入Email": "Эл. поштаңызды келтіріңіз", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Жүйені қолдану" + "跟随系统": "Жүйені қолдану", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?" } \ No newline at end of file diff --git a/lan/lan_ko.json b/lan/lan_ko.json index 11ff733a..eddb7629 100644 --- a/lan/lan_ko.json +++ b/lan/lan_ko.json @@ -582,7 +582,6 @@ "商城": "몰", "我的": "내", "微信公众号推送": "위챗 공개 계정", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "경보 메시지를 받기 위해 wechat을 열려면 먼저 Skye Smart Lock wechat 공개 계정에주의를 기울여야합니다. QR 코드를 저장하고 wechat을 사용하여 설정을 스캔하십시오.", "蓝牙": "블루투스", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "추가 키 기능의 위치 정보를 사용하려면 Bluetooth 권한에 대한 액세스가 필요합니다.", "请输入Email": "이메일 입력", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "시스템을 따르십시오" + "跟随系统": "시스템을 따르십시오", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?" } \ No newline at end of file diff --git a/lan/lan_lt.json b/lan/lan_lt.json index 1c203b01..3be128da 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "Mano", "微信公众号推送": "Wechat viešoji sąskaita", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Norėdami atidaryti „ wechat “, kad gautumėte signalizacijos pranešimus, pirmiausia reikia atkreipti dėmesį į „ skye smart lock wechat“ viešąją sąskaitą, įrašykite qr kodą ir naudokite „ wechat “, kad nuskaitytumėte nustatymus.", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Prieiga prie „ bluetooth “leidimų reikalinga norint naudoti rakto pridėties funkcijos vietos informaciją", "请输入Email": "Įveskite savo el. laišką", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Sekti sistema" + "跟随系统": "Sekti sistema", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?" } \ No newline at end of file diff --git a/lan/lan_ms.json b/lan/lan_ms.json index 3d3a59e7..9e382f28 100644 --- a/lan/lan_ms.json +++ b/lan/lan_ms.json @@ -582,7 +582,6 @@ "商城": "Pusat membeli-belah", "我的": "Saya", "微信公众号推送": "Akaun awam Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Untuk membuka wechat untuk menerima mesej penggera, anda perlu memberi perhatian kepada Skye Smart Lock wechat akaun awam terlebih dahulu, sila simpan kod QR dan gunakan wechat untuk mengimbas tetapan", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Akses kepada kebenaran Bluetooth diperlukan untuk menggunakan maklumat lokasi fungsi tambah utama", "请输入Email": "Masukkan e-mel anda", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Ikut system" + "跟随系统": "Ikut system", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?" } \ No newline at end of file diff --git a/lan/lan_nl.json b/lan/lan_nl.json index 07669fa1..545dd0a9 100644 --- a/lan/lan_nl.json +++ b/lan/lan_nl.json @@ -582,7 +582,6 @@ "商城": "Winkelcentrum", "我的": "Mijn", "微信公众号推送": "Wechat openbaar account", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Om wechat te openen om alarmberichten te ontvangen, moet u eerst aandacht besteden aan Skye Smart Lock wechat openbare account, sla de QR-code op en gebruik wechat om de instellingen te scannen", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Toegang tot Bluetooth-machtigingen is vereist om de locatie-informatie van de add-sleutelfunctie te gebruiken", "请输入Email": "Voer uw e-mail in", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Systeem volgen" + "跟随系统": "Systeem volgen", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?" } \ No newline at end of file diff --git a/lan/lan_pl.json b/lan/lan_pl.json index b50c37e6..cb25c002 100644 --- a/lan/lan_pl.json +++ b/lan/lan_pl.json @@ -582,7 +582,6 @@ "商城": "Centrum handlowe", "我的": "Mój", "微信公众号推送": "Konto publiczne Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Aby otworzyć wechat, aby otrzymywać komunikaty alarmowe, należy najpierw zwrócić uwagę na konto publiczne Wechat Skye Smart Lock, zapisz kod QR i użyj wechat, aby zeskanować Ustawienia", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Dostęp do uprawnień Bluetooth jest wymagany do korzystania z informacji o lokalizacji funkcji dodawania klucza", "请输入Email": "Wpisz swój e-mail", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Śledź system" + "跟随系统": "Śledź system", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?" } \ No newline at end of file diff --git a/lan/lan_pt.json b/lan/lan_pt.json index a08af884..d77d3b0e 100644 --- a/lan/lan_pt.json +++ b/lan/lan_pt.json @@ -582,7 +582,6 @@ "商城": "Shopping", "我的": "Meu", "微信公众号推送": "Conta pública Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Para abrir o wechat para receber mensagens de alarme, você precisa prestar atenção à conta pública do Skye Smart Lock wechat primeiro, salve o código QR e use o wechat para digitalizar as configurações", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Acesso a permissões Bluetooth é necessário para usar as informações de localização da função adicionar chave", "请输入Email": "Digite seu Email", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Siga o sistema" + "跟随系统": "Siga o sistema", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?" } \ No newline at end of file diff --git a/lan/lan_ro.json b/lan/lan_ro.json index 6d572f88..e0f4f397 100644 --- a/lan/lan_ro.json +++ b/lan/lan_ro.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "Ma", "微信公众号推送": "Căutați contul public.", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Pentru a deschide chat pentru a primi mesaje de alarmă, trebuie să acordați atenție la Skye Smart Lock We chat cont public în primul rând, salvați codul QR și folosiți chat pentru a scana Setările", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Accesul la permisiunile Bluetooth este necesar pentru a utiliza informațiile de locație ale funcției de adăugare cheie", "请输入Email": "Introduceți email", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Urmează sistemul:" + "跟随系统": "Urmează sistemul:", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?" } \ No newline at end of file diff --git a/lan/lan_ru.json b/lan/lan_ru.json index 08faace8..be2e5622 100644 --- a/lan/lan_ru.json +++ b/lan/lan_ru.json @@ -582,7 +582,6 @@ "商城": "Торговый центр", "我的": "Мой", "微信公众号推送": "Публичный аккаунт Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Чтобы открыть WeChat для получения тревожных сообщений, вам необходимо сначала обратить внимание на общедоступную учетную запись WeChat Skye Smart Lock, сохраните QR-код и используйте WeChat для сканирования настроек.", "蓝牙": "Блютуз", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Доступ к разрешениям Bluetooth требуется для использования информации о местоположении функции добавления ключа", "请输入Email": "Введите свой адрес электронной почты", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Следуйте системе" + "跟随系统": "Следуйте системе", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?" } \ No newline at end of file diff --git a/lan/lan_sk.json b/lan/lan_sk.json index cadd2541..b72ccb15 100644 --- a/lan/lan_sk.json +++ b/lan/lan_sk.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "My", "微信公众号推送": "Wechat verejný účet", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Ak chcete otvoriť wechat pre prijímanie poplašných správ, musíte venovať pozornosť skye smart lock wechat verejný účet najprv, prosím, uložiť qr kód a použiť wechat pre skenovanie nastavenia", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Prístup k oprávneniam bluetooth je potrebný na použitie informácií o polohe funkcie pridať kľúča", "请输入Email": "Zadajte svoj e-mail", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Sledovať systém" + "跟随系统": "Sledovať systém", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetovaní budú prstové odtlačky zámku vymazané. Ste si istí, že chcete obnoviť?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?" } \ No newline at end of file diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json index e79136b2..381e1bcc 100644 --- a/lan/lan_sr_cyrl.json +++ b/lan/lan_sr_cyrl.json @@ -181,7 +181,7 @@ "隐藏无效开锁权限": "Сакриј неважећи приступ", "APP开锁时需手机连网的锁": "Браве које захтевају телефон на мрежи", "增值服务": "Услуге", - "关于": "O nama", + "关于": "O programu", "退出": "Одјавити се", "删除账号": "Избриши налог", "个人信息": "Информације о налогу", @@ -583,7 +583,6 @@ "商城": "Центру", "我的": "Мој", "微信公众号推送": "Вецхат јавни налог", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Да бисте отворили вецхат за примање алармних порука, морате обратити пажњу на Скај Смарт Лоцк вецхат јавни рачун прво, молимо вас да сачувате КР код и користите вецхат да скенирате подешавања", "蓝牙": "Блуетоотх", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Приступ Блуетоотх дозволама је потребан да бисте користили информације о локацији функције додавања кључа", "请输入Email": "Унесите своју е-пошту", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Пратите систем" + "跟随系统": "Пратите систем", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Након ресетовања, отисци прстију браве ће бити избрисани. Да ли сте сигурни да желите да га ресетујете?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?" } \ No newline at end of file diff --git a/lan/lan_sv.json b/lan/lan_sv.json index 9235a008..b1f95839 100644 --- a/lan/lan_sv.json +++ b/lan/lan_sv.json @@ -582,7 +582,6 @@ "商城": "Mall", "我的": "Ja", "微信公众号推送": "Vichatta offentligt konto", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "För att öppna wechatt för att ta emot larmmeddelanden, måste du vara uppmärksam på Skye Smart Lock vichatt offentliga konto först, spara QR-koden och använd wechat för att skanna inställningar", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Tillgång till Bluetooth-rättigheter krävs för att använda platsinformationen för lägg till nyckelfunktionen lägg till.", "请输入Email": "Skriv in din e- post@ info: whatsthis", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Följ system" + "跟随系统": "Följ system", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter återställd, kommer låsets fingeravtryck tas bort. Är du säker på att du vill återställa den?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?" } \ No newline at end of file diff --git a/lan/lan_th.json b/lan/lan_th.json index e4020c44..45abbb64 100644 --- a/lan/lan_th.json +++ b/lan/lan_th.json @@ -582,7 +582,6 @@ "商城": "ห้างสรรพสินค้าเล็กๆ", "我的": "ของฉัน", "微信公众号推送": "บัญชีสาธารณะ WeChat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "ในการเปิด WeChat เพื่อรับข้อความเตือนคุณต้องใส่ใจกับบัญชีสาธารณะของ Skye Smart Lock WeChat ก่อนโปรดบันทึกรหัส QR และใช้ WeChat เพื่อสแกนการตั้งค่า", "蓝牙": "บลูทูธ", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "การเข้าถึงการอนุญาตบลูทูธจะต้องใช้ข้อมูลตำแหน่งของฟังก์ชั่นเพิ่มคีย์", "请输入Email": "การป้อนอีเมลของคุณ", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "ระบบติดตามผล" + "跟随系统": "ระบบติดตามผล", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วลายนิ้วมือของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม" } \ No newline at end of file diff --git a/lan/lan_tr.json b/lan/lan_tr.json index 04d9df57..53ae8ad3 100644 --- a/lan/lan_tr.json +++ b/lan/lan_tr.json @@ -582,7 +582,6 @@ "商城": "Alışveriş merkezi", "我的": "Benim", "微信公众号推送": "Wechat kamu hesabı", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Alarm mesajları almak için wechat açmak için, ilk önce skye akıllı kilit wechat kamu hesabına dikkat etmeniz gerekir, lütfen qr kodunu kaydedin ve ayarları taramak için wechat'i kullanın", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Ekle tuş fonksiyonunun konum bilgilerini kullanmak için bluetooth izinlerine erişim gereklidir", "请输入Email": "Email girin", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Sistemi takip et" + "跟随系统": "Sistemi takip et", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?" } \ No newline at end of file diff --git a/lan/lan_tw.json b/lan/lan_tw.json index 39b35337..9b69c146 100644 --- a/lan/lan_tw.json +++ b/lan/lan_tw.json @@ -582,7 +582,6 @@ "商城": "商場", "我的": "我的", "微信公众号推送": "微信公眾賬號", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "打開微信接收報警信息,需要先關注斯凱智能鎖微信公眾賬號,請保存二維碼,使用微信掃描設置", "蓝牙": "藍牙", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "需要訪問藍牙權限才能使用添加鍵功能的位置信息", "请输入Email": "輸入您的電子郵件", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "跟蹤系統" + "跟随系统": "跟蹤系統", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?" } \ No newline at end of file diff --git a/lan/lan_uk.json b/lan/lan_uk.json index 7bef26fa..fc64e240 100644 --- a/lan/lan_uk.json +++ b/lan/lan_uk.json @@ -583,7 +583,6 @@ "商城": "торго́вий центр", "我的": "мій", "微信公众号推送": "Публічний обліковий запис Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Щоб відкрити wechat для отримання тривожних повідомлень, вам потрібно спочатку звернути увагу на загальнодоступний обліковий запис wechat Skye Smart Lock, збережіть QR-код і за допомогою wechat відскануйте налаштування", "蓝牙": "Технологія Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Доступ до дозволів Bluetooth потрібен для використання інформації про місцезнаходження функції додавання ключа", "请输入Email": "Введіть свою електронну пошту", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Система стеження за" + "跟随系统": "Система стеження за", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?" } \ No newline at end of file diff --git a/lan/lan_vi.json b/lan/lan_vi.json index 2584157d..b83db737 100644 --- a/lan/lan_vi.json +++ b/lan/lan_vi.json @@ -582,7 +582,6 @@ "商城": "Trung tâm mua sắm", "我的": "Của tôi", "微信公众号推送": "Tài khoản công cộng Wechat", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "Để mở Wechat để nhận tin nhắn báo động, trước tiên bạn cần chú ý đến tài khoản công cộng Skye Smart Lock WeChat, Vui lòng lưu mã QR và sử dụng Wechat để quét cài đặt", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Cần truy cập vào quyền của bluetooth để sử dụng thông tin vị trí của chức năng thêm phím", "请输入Email": "Nhập email của bạn", @@ -1119,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "Hệ thống theo dõi" + "跟随系统": "Hệ thống theo dõi", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sau khi đặt lại, dấu vân tay của khóa sẽ bị xóa. Bạn có chắc chắn muốn thiết lập lại nó?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?" } \ No newline at end of file diff --git a/lan/lan_zh.json b/lan/lan_zh.json index 522b21da..ce17267b 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -316,7 +316,6 @@ "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?": "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?", "监控": "监控", "视频日志": "视频日志", - "网关设备": "网关设备", "开门器": "开门器", "面容开锁": "面容开锁", "开门方向设置": "开门方向设置", @@ -586,7 +585,6 @@ "商城": "商城", "我的": "我的", "微信公众号推送": "微信公众号推送", - "开启微信接收报警消息需要先关注锁通通锁微信公众号,请保存二维码并使用微信扫一扫设置": "开启微信接收报警消息需要先关注锁通通锁微信公众号,请保存二维码并使用微信扫一扫设置", "蓝牙": "蓝牙", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "需要访问蓝牙权限才能使用添加钥匙功能的位置信息", "请输入Email": "请输入Email", @@ -787,7 +785,6 @@ "导出": "导出", "批量导出": "批量导出", "读取记录": "读取记录", - "手机需联网": "手机需联网", "设备": "设备", "消息": "消息", "智能分析": "智能分析", @@ -1091,7 +1088,6 @@ "修改名字": "修改名字", "时": "时", "分": "分", - "Amazon Alexa": "Amazon Alexa", "您可以使用Alexa进行开锁、闭锁和查看锁状态": "您可以使用Alexa进行开锁、闭锁和查看锁状态", "支持的国家": "支持的国家", @@ -1108,7 +1104,6 @@ "已开锁": "已开锁", "已闭锁": "已闭锁", "两次密码不一致哦": "两次密码不一致哦", - "中功率": "中功率", "常规使用": "常规使用", "扫描设备": "扫描设备", @@ -1123,5 +1118,7 @@ "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "跟随系统" + "跟随系统": "跟随系统", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?" } diff --git a/lib/main/lockDetail/lockSet/faceUnlock/faceUnlock_page.dart b/lib/main/lockDetail/lockSet/faceUnlock/faceUnlock_page.dart index 7a8ebaef..2d895126 100755 --- a/lib/main/lockDetail/lockSet/faceUnlock/faceUnlock_page.dart +++ b/lib/main/lockDetail/lockSet/faceUnlock/faceUnlock_page.dart @@ -73,7 +73,8 @@ class _FaceUnlockPageState extends State { }); // _openBottomItemSheet(state.antiMisoperationStrList.value, 1); }), - Expanded(child: SizedBox(height: 30.h)), + // Expanded(child: SizedBox(height: 30.h)), + SizedBox(height: 60.h), _buildTipsView(), SizedBox( height: 60.h, diff --git a/lib/translations/app_dept.dart b/lib/translations/app_dept.dart index 55cf2762..c58d5de8 100755 --- a/lib/translations/app_dept.dart +++ b/lib/translations/app_dept.dart @@ -48,7 +48,7 @@ extension ExtensionAppDept on AppDept { const Locale bgL = Locale('bg', 'BG'); const Locale kkL = Locale('kk', 'KZ'); const Locale bnL = Locale('bn', 'BD'); - const Locale hbsL = Locale('hr', 'BA'); + const Locale hbsL = Locale('hr', 'HR'); const Locale thL = Locale('th', 'TH'); const Locale idL = Locale('id', 'ID'); const Locale fiL = Locale('fi', 'FI'); @@ -581,7 +581,7 @@ extension ExtensionLanguageType on LanguageType { } break; case LanguageType.croatian: - if (locale.languageCode == 'hr' && locale.countryCode == 'BA') { + if (locale.languageCode == 'hr' && locale.countryCode == 'HR') { return locale; } break; diff --git a/lib/translations/current_locale_tool.dart b/lib/translations/current_locale_tool.dart index 07e485a8..d8efd460 100644 --- a/lib/translations/current_locale_tool.dart +++ b/lib/translations/current_locale_tool.dart @@ -123,7 +123,7 @@ class CurrentLocaleTool { case 'bn': return const Locale('bn', 'BD'); case 'hr': - return const Locale('hr', 'BA'); + return const Locale('hr', 'HR'); case 'th': return const Locale('th', 'TH'); case 'id': diff --git a/lib/translations/translation_message.dart b/lib/translations/translation_message.dart index b20ed713..4f41e0fd 100755 --- a/lib/translations/translation_message.dart +++ b/lib/translations/translation_message.dart @@ -35,7 +35,7 @@ class TranslationMessage extends Translations { 'bg_BG': TranslationLoader.bgDic, 'kk_KZ': TranslationLoader.kkDic, 'bn_BD': TranslationLoader.bnDic, - 'hr_BA': TranslationLoader.hrDic, + 'hr_HR': TranslationLoader.hrDic, 'th_TH': TranslationLoader.thDic, 'id_ID': TranslationLoader.idDic, 'fi_FI': TranslationLoader.fiDic, From 687eea4031501b47919bdbab0da0ea794cc5344f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Thu, 2 Jan 2025 17:52:24 +0800 Subject: [PATCH 05/67] =?UTF-8?q?fix:=201=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8A=9F=E8=83=BD=E5=85=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main_local.dart | 2 +- .../selectLockType/selectLockType_page.dart | 53 +++++++++---------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/lib/main_local.dart b/lib/main_local.dart index f56b6d65..ca85c5fa 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.xhj_pre; + F.appFlavor = Flavor.sky_pre; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/mine/addLock/selectLockType/selectLockType_page.dart b/lib/mine/addLock/selectLockType/selectLockType_page.dart index bb8dfa20..511b4e01 100755 --- a/lib/mine/addLock/selectLockType/selectLockType_page.dart +++ b/lib/mine/addLock/selectLockType/selectLockType_page.dart @@ -18,7 +18,8 @@ class SelectLockTypePage extends StatefulWidget { State createState() => _SelectLockTypePageState(); } -class _SelectLockTypePageState extends State with BaseWidget { +class _SelectLockTypePageState extends State + with BaseWidget { final SelectLockTypeLogic logic = Get.put(SelectLockTypeLogic()); final SelectLockTypeState state = Get.find().state; @@ -79,36 +80,34 @@ class _SelectLockTypePageState extends State with BaseWidget return [ lockTypeItem('images/lockType/lockType_doorLock.png', '门锁'.tr, () { CommonDataManage().seletLockType = 1; - Navigator.pushNamed(context, Routers.addLockPage, + Get.toNamed(Routers.addLockPage, arguments: {'getLockType': 1}); }), if (!F.isLite) - lockTypeItem('images/lockType/lockType_NFCLock.png', - 'NFC无源锁'.tr, () { + lockTypeItem('images/lockType/lockType_NFCLock.png', 'NFC无源锁'.tr, () { CommonDataManage().seletLockType = 2; // Navigator.pushNamed(context, Routers.addLockPage); + logic.getNearByLimits(); }), if (!F.isLite) - lockTypeItem('images/lockType/lockType_padlock.png', - '挂锁'.tr, () { - CommonDataManage().seletLockType = 3; + lockTypeItem('images/lockType/lockType_padlock.png', '挂锁'.tr, () { + CommonDataManage().seletLockType = 3; // Navigator.pushNamed(context, Routers.addLockPage); + logic.getNearByLimits(); }), - lockTypeItem('images/lockType/lockType_safeLock.png', - '保险箱锁'.tr, () { - CommonDataManage().seletLockType = 4; + lockTypeItem('images/lockType/lockType_safeLock.png', '保险箱锁'.tr, () { + CommonDataManage().seletLockType = 4; Navigator.pushNamed(context, Routers.addLockPage, arguments: {'getLockType': 4}); }), - lockTypeItem('images/lockType/lockType_parkingLock.png', - '车位锁'.tr, () { - CommonDataManage().seletLockType = 5; + lockTypeItem('images/lockType/lockType_parkingLock.png', '车位锁'.tr, () { + CommonDataManage().seletLockType = 5; Navigator.pushNamed(context, Routers.addLockPage, arguments: {'getLockType': 5}); }), - lockTypeItem('images/lockType/lockType_entranceGuardLock.png', - '智能门禁'.tr, () { - CommonDataManage().seletLockType = 6; + lockTypeItem('images/lockType/lockType_entranceGuardLock.png', '智能门禁'.tr, + () { + CommonDataManage().seletLockType = 6; Navigator.pushNamed(context, Routers.addLockPage, arguments: {'getLockType': 6}); }), @@ -117,17 +116,17 @@ class _SelectLockTypePageState extends State with BaseWidget // TranslationLoader.lanKeys!.bicycleLock!.tr, () { // Navigator.pushNamed(context, Routers.addLockPage); // }), - if (!F.isLite) - lockTypeItem('images/lockType/lockType_gatewayLock.png', - '网关'.tr, () { - CommonDataManage().seletLockType = 7; - Get.toNamed(Routers.selectGatewayTypeNextTipPage); - }), - if (!F.isLite) - lockTypeItem('images/lockType/lockType_camera.png', '网络摄像头'.tr, () { - CommonDataManage().seletLockType = 8; - // Navigator.pushNamed(context, Routers.gatewayListPage); - }), + // if (!F.isLite) + lockTypeItem('images/lockType/lockType_gatewayLock.png', '网关'.tr, () { + CommonDataManage().seletLockType = 7; + Get.toNamed(Routers.selectGatewayTypeNextTipPage); + }), + // if (!F.isLite) + lockTypeItem('images/lockType/lockType_camera.png', '网络摄像头'.tr, () { + CommonDataManage().seletLockType = 8; + // Navigator.pushNamed(context, Routers.gatewayListPage); + logic.getNearByLimits(); + }), ]; } From 42f873d5c34e9fb71d2e832ca06a63597e028041 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 2 Jan 2025 18:14:53 +0800 Subject: [PATCH 06/67] =?UTF-8?q?fix:=201=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8A=9F=E8=83=BD=E5=85=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/mine/addLock/selectLockType/selectLockType_page.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mine/addLock/selectLockType/selectLockType_page.dart b/lib/mine/addLock/selectLockType/selectLockType_page.dart index 511b4e01..3688d0ae 100755 --- a/lib/mine/addLock/selectLockType/selectLockType_page.dart +++ b/lib/mine/addLock/selectLockType/selectLockType_page.dart @@ -83,13 +83,13 @@ class _SelectLockTypePageState extends State Get.toNamed(Routers.addLockPage, arguments: {'getLockType': 1}); }), - if (!F.isLite) + // if (!F.isLite) lockTypeItem('images/lockType/lockType_NFCLock.png', 'NFC无源锁'.tr, () { CommonDataManage().seletLockType = 2; // Navigator.pushNamed(context, Routers.addLockPage); logic.getNearByLimits(); }), - if (!F.isLite) + // if (!F.isLite) lockTypeItem('images/lockType/lockType_padlock.png', '挂锁'.tr, () { CommonDataManage().seletLockType = 3; // Navigator.pushNamed(context, Routers.addLockPage); From 830d4ae9384abc7ca64e505cb5a9b74a38d11bb9 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 2 Jan 2025 18:52:25 +0800 Subject: [PATCH 07/67] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dalexa=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AF=AD=E8=A8=80=E5=88=97=E8=A1=A8=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/mine/mineSet/mineSet/mineSet_logic.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/mine/mineSet/mineSet/mineSet_logic.dart b/lib/mine/mineSet/mineSet/mineSet_logic.dart index 40dbc7be..d888914a 100755 --- a/lib/mine/mineSet/mineSet/mineSet_logic.dart +++ b/lib/mine/mineSet/mineSet/mineSet_logic.dart @@ -184,4 +184,10 @@ class MineSetLogic extends BaseGetXController { // state.currentLanguage.value = CurrentLocaleTool.getCurrentLocaleString(); // }); // } + + @override + Future onReady() async { + super.onReady(); + getUserInfoRequest(); + } } From 8159c7cedaeee8a5d7d0c4f78a4a230e7c128add Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 3 Jan 2025 11:35:58 +0800 Subject: [PATCH 08/67] =?UTF-8?q?ci:=20=E4=BF=AE=E5=A4=8Dgitlab=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E6=9B=B4=E6=8D=A2=E5=90=8E=E6=97=A0=E6=B3=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=9F=9F=E5=90=8D=E6=8E=A8=E9=80=81tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 01d706a8..1c09e949 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -95,7 +95,8 @@ generate_git_tag: - bash pre_build.sh sky - project_url=$(echo $CI_PROJECT_URL | sed 's/http:\/\///') - echo "project_url:$project_url" - - git remote set-url origin http://gitlab-ci-token:${GITLAB_ACCESS_TOKEN}@$project_url.git + - echo "CI_SERVER_FQDN:$CI_SERVER_FQDN" + - git remote set-url origin git@$CI_SERVER_FQDN:StarlockTeam/app-starlock.git script: - bash tag_generator.sh generate_tag From 0ee31a0f6273892e4a0a483af6446b91505e9865 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 3 Jan 2025 11:45:26 +0800 Subject: [PATCH 09/67] =?UTF-8?q?ci:=20=E4=BF=AE=E5=A4=8Dgitlab=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E6=9B=B4=E6=8D=A2=E5=90=8E=E6=97=A0=E6=B3=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=9F=9F=E5=90=8D=E6=8E=A8=E9=80=81tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1c09e949..6ae1079e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -95,8 +95,8 @@ generate_git_tag: - bash pre_build.sh sky - project_url=$(echo $CI_PROJECT_URL | sed 's/http:\/\///') - echo "project_url:$project_url" - - echo "CI_SERVER_FQDN:$CI_SERVER_FQDN" - - git remote set-url origin git@$CI_SERVER_FQDN:StarlockTeam/app-starlock.git + - echo "CI_SERVER_FQDN:$CI_SERVER_FQDN/CI_PROJECT_ROOT_NAMESPACE:$CI_PROJECT_ROOT_NAMESPACE/CI_PROJECT_NAME:$CI_PROJECT_NAME" + - git remote set-url origin git@$CI_SERVER_FQDN:$CI_PROJECT_ROOT_NAMESPACE/$CI_PROJECT_NAME.git script: - bash tag_generator.sh generate_tag From c5e473d24ee98189a6c3ca1cd2da46b8c304bedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Fri, 3 Jan 2025 14:35:12 +0800 Subject: [PATCH 10/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=B9=81=E4=BD=93=E5=8F=B0=E6=B9=BE=E7=BF=BB=E8=AF=91=E4=B9=8B?= =?UTF-8?q?=E5=90=8E=E7=AE=80=E4=BD=93=E4=B8=AD=E6=96=87=E8=BE=83=E5=A4=9A?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_hk.json | 1996 +++++++++++++++++++++++------------------------ 1 file changed, 998 insertions(+), 998 deletions(-) diff --git a/lan/lan_hk.json b/lan/lan_hk.json index c8471d71..e774f098 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -1,1124 +1,1124 @@ { - "星锁": "星锁", - "锁通通": "锁在", - "点击开锁,长按闭锁": "触摸解锁,长按锁定", + "星锁": "星空鎖", + "锁通通": "鎖定直通", + "点击开锁,长按闭锁": "掂解鎖,按住鎖定", "考勤": "出席", - "考勤设置": "考勤设置", - "电子钥匙": "eKeys", + "考勤设置": "考勤設置", + "电子钥匙": "eKey", "添加卡": "添加卡", - "卡号": "卡号", - "添加指纹": "添加指纹", - "指纹号": "指纹数量", - "遥控": "远程", - "添加人脸": "添加的脸", - "门锁日志": "门锁日志", - "密码号": "密码数字", - "添加者": "操作符", - "添加时间": "时间", + "卡号": "卡號", + "添加指纹": "添加指紋", + "指纹号": "指紋號碼", + "遥控": "遠程", + "添加人脸": "添加面", + "门锁日志": "門鎖日誌", + "密码号": "密碼編號", + "添加者": "算子", + "添加时间": "時間", "重置": "重置", - "请输入手机号或者邮箱": "电话号码或电邮地址", - "工作时间": "工作时间", - "工作日设置": "工作时间设置", - "星期一": "周一", - "星期二": "周二", - "星期三": "周三", - "星期四": "周四", + "请输入手机号或者邮箱": "電話號碼或電子郵件", + "工作时间": "工作時間", + "工作日设置": "工作日設置", + "星期一": "星期一", + "星期二": "星期二", + "星期三": "星期三", + "星期四": "星期四", "星期五": "星期五", - "星期六": "周六", - "星期日": "周日", - "简写周一": "米", + "星期六": "星期六", + "星期日": "星期日", + "简写周一": "M", "简写周二": "T", "简写周三": "W", "简写周四": "T", "简写周五": "F", - "简写周六": "年代", - "简写周日": "年代", - "周一": "我的", + "简写周六": "S", + "简写周日": "S", + "周一": "星期一", "周二": "星期二", - "周三": "结婚", - "周四": "星期四", - "周五": "星期五", + "周三": "拉埋天窗", + "周四": "周四", + "周五": "周五", "周六": "坐", - "周日": "太阳", - "群发钥匙": "发送多个ekey", - "锁": "锁", + "周日": "太陽", + "群发钥匙": "發送多個ekey", + "锁": "鎖", "请添加": "收件人", - "允许远程开锁": "远程解锁", - "请输入验证码": "验证码", - "获取密码": "生成密码", - "请给密码命名": "为这个密码输入一个名称", - "密码有限期为6个小时,只能使用一次": "此密码必须在当前时间起6小时内使用,否则将因安全原因暂停使用。此密码只可使用一次。", - "手动输入6-9位数字作为密码。可在锁旁边通过手机蓝牙添加,也可以通过网关远程添加": "手动输入6 ~ 9位数字作为密码。可以通过手机蓝牙添加旁边的锁,还是通过网关远程添加", - "获取": "得到", - "添加": "添加", - "删除公司": "删除公司", - "密码详情": "密码信息", - "修改密码": "改变密码", - "添加虹膜": "添加虹膜", - "添加门磁": "门传感器", - "添加无线键盘": "无线键盘", - "添加手掌": "添加棕榈", - "请输入员工账号": "输入员工账号", - "批量授权锁": "授予多个锁", - "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权的管理员将拥有操作此锁的多数权限。", - "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "此功能允许您通过网关远程解锁智能锁。此功能只能通过蓝牙开启或关闭。", - "排列方式": "列表类型", - "早到榜": "早期的列表", - "迟到榜": "晚列表", - "当前模式": "当前模式", - "勤奋榜": "努力工作清单", - "延迟时间": "延迟时间", - "经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效。": "时间过后,锁会自动锁上。请先解锁一次,以使设置可用。", - "时间": "时间", - "开始时间": "开始时间", - "结束时间": "结束时间", - "工作时间设置": "工作时间设置", + "允许远程开锁": "遠程解鎖", + "请输入验证码": "驗證碼", + "获取密码": "生成密碼", + "请给密码命名": "輸入此密碼的名稱", + "密码有限期为6个小时,只能使用一次": "此密碼必須在當前時間之後6鐘頭內使用,否則將出於安全原因被暫停。此密碼只能使用一次。", + "手动输入6-9位数字作为密码。可在锁旁边通过手机蓝牙添加,也可以通过网关远程添加": "手動輸入6-9位數字作為密碼。 可透過手機藍牙喺鎖隔离添加,或透過網關遠程添加", + "获取": "獲取", + "添加": "加", + "删除公司": "刪除公司", + "密码详情": "密碼信息", + "修改密码": "更改密碼", + "添加虹膜": "添加光圈", + "添加门磁": "門傳感器", + "添加无线键盘": "無線鍵盤", + "添加手掌": "添加Palm", + "请输入员工账号": "輸入員工嘅賬戶", + "批量授权锁": "授予多個鎖", + "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授權管理員將擁有操作此鎖嘅多數權限。", + "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "此功能允許你透過網關遠程解鎖Smart Lock。此功能只能透過藍牙打開或關閉。", + "排列方式": "列表類型", + "早到榜": "早期列表", + "迟到榜": "遲到名單", + "当前模式": "電流模式", + "勤奋榜": "勤力做嘢清單", + "延迟时间": "延遲時間", + "经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效。": "該時間之後,鎖將自動鎖定。 請先解鎖一次,以使設置可用。", + "时间": "時間", + "开始时间": "開始時間", + "结束时间": "結束時間", + "工作时间设置": "工作時間設置", "常开模式": "通道模式", - "常开时间": "在这段时间里", - "常开日期": "在这些日子里", - "添加员工": "添加员工", - "编辑员工": "编辑人员", + "常开时间": "喺呢個時期", + "常开日期": "喺呢啲日子度", + "添加员工": "添加員工", + "编辑员工": "編輯員工", "节假日": "假期", "打卡方式": "方法", - "员工是否有钥匙": "已经有了钥匙", - "上班时间": "起始时间", - "下班时间": "结束营业的时间", + "员工是否有钥匙": "已經有ekey", + "上班时间": "開始時間", + "下班时间": "關閉時間", "本周": "本周", - "单休": "一天周末", - "双休": "为期两天的周末", - "单双休": "One-two-day周末", - "年": "一年", + "单休": "周末一日遊", + "双休": "兩日周末", + "单双休": "一至二天周末", + "年": "年", "月": "月", "放假日期": "假期", "补班日期": "工作日", "添加假日": "添加假日", - "开始日期": "开始日期", - "必填": "要求", - "结束日期": "结束日期", - "日榜": "每天", + "开始日期": "開始日期", + "必填": "必填", + "结束日期": "結束日期", + "日榜": "日常", "月榜": "每月", - "考勤记录": "记录", - "假日信息": "假期的信息", - "基本信息": "基础知识", - "无线键盘": "无线键盘", - "选择无线键盘": "添加键盘", - "门磁": "门传感器", - "自动闭锁": "汽车锁", - "锁声音": "锁的声音", - "防撬报警": "夯警报", - "重置键": "重置按钮", - "锁时间": "锁定时钟", - "诊断": "诊断", - "上传数据": "上传数据", - "导入其他锁数据": "从另一个锁导入", + "考勤记录": "記錄", + "假日信息": "節日信息", + "基本信息": "基本", + "无线键盘": "無線鍵盤", + "选择无线键盘": "添加鍵盤", + "门磁": "門傳感器", + "自动闭锁": "自動鎖定", + "锁声音": "鎖定聲音", + "防撬报警": "篡改警報", + "重置键": "重置按鈕", + "锁时间": "鎖定時鐘", + "诊断": "診斷", + "上传数据": "上傳數據", + "导入其他锁数据": "Import frome another lock (從另一個鎖中導入)", "锁升级": "固件更新", - "标记房态": "房间状态", - "开锁提醒": "解锁的通知", - "微信二维码": "解锁二维码", - "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "持电子钥匙的人可以通过微信扫描二维码开门。每个锁的二维码都不一样。您可以打印出来并粘贴到相应的锁旁边", - "锁编号": "锁的数量", - "电量": "电池", - "锁分组": "锁定组", - "选择分组": "选择组", - "创建新分组": "创建组", - "管理员开锁密码": "管理员密码", + "标记房态": "房間狀態", + "开锁提醒": "解鎖通知", + "微信二维码": "解鎖二維碼", + "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "有電子鎖匙嘅人可以透過微信掃描呢個二維碼嚟開門。 每個鎖嘅二維碼都不同。 你可以將其打印出嚟並粘貼到相應嘅鎖隔离", + "锁编号": "鎖號", + "电量": "電池", + "锁分组": "Lock Group", + "选择分组": "選擇組", + "创建新分组": "創建組", + "管理员开锁密码": "管理員密碼", "更新": "更新", - "电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新": "电池电量将通过网关或手机蓝牙更新", - "当屏幕闪烁时,点击下一步": "当键盘闪烁时,单击next", - "输入*529#或按设置键": "输入*529#或按Settings键", - "长按重置键2秒": "按住复位键2秒", - "附近的设备": "附近的设备", - "暂无数据": "没有数据", - "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "您将能够获得门的状态与门传感器与网关在一起。只允许一个传感器与锁相关联。", - "开始": "开始", - "全天": "所有的时间", - "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "您可以为通行模式设置多个时间段。在设定的时间段内,锁被解锁后将保持打开状态。", - "请选择锁音量": "请选择锁定音量", - "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "按“ON”键,你会听到锁发出的声音", + "电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新": "電池電量將透過網關或手機藍牙更新", + "当屏幕闪烁时,点击下一步": "当鍵盤閃爍時單擊Next (下一步)", + "输入*529#或按设置键": "輸入*529#或按設置鍵", + "长按重置键2秒": "按住重置掣2秒", + "附近的设备": "附近設備", + "暂无数据": "無數據", + "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "你將能夠使用門傳感器和網關獲取門狀態。 只允許一個傳感器與鎖關聯。", + "开始": "開始", + "全天": "所有時間", + "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "你可以為通道模式設置多個時間段。 設定緊嘅時間內,鎖喺解鎖後將保持打開狀態。", + "请选择锁音量": "請選擇鎖定卷", + "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "打開後,您將聽到鎖發出的聲音", "低": "低", - "较低": "介质低", - "中": "媒介", - "较高": "中等高", + "较低": "中低", + "中": "中等", + "较高": "中高", "高": "高", - "开启后,锁被撬动时,会发出报警声": "通过打开,您启用了TAMPER警报。", - "关闭后,重置键无效,锁要通过app删除后才能重新添加": "通过关闭,RESET按钮被禁用。", - "校准时间": "校准时间", - "诊断是读取锁内的配置信息并上传,以便工作人员分析故障的原因": "诊断是读取锁内部的配置信息并上传,以便工作人员分析故障原因", - "上传": "上传", - "本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待": "从锁上传数据到服务器。这可能需要几分钟", - "请选择要从哪把锁导入": "选择要导入的锁", + "开启后,锁被撬动时,会发出报警声": "打開之後,將啟用TAMPER警報。", + "关闭后,重置键无效,锁要通过app删除后才能重新添加": "關閉之後,RESET掣被禁用。", + "校准时间": "校準時間", + "诊断是读取锁内的配置信息并上传,以便工作人员分析故障的原因": "診斷係讀取鎖內嘅配置信息並上傳,以便工作人員分析故障原因", + "上传": "上傳", + "本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待": "把數據由lock上傳到服務器。 可能需要幾分鐘時間", + "请选择要从哪把锁导入": "選擇要從中導入嘅鎖", "有新版本": "有新版本", - "当前版本": "当前版本", + "当前版本": "當前版本", "升级": "更新", - "空闲": "空", - "已入住": "被占领的", - "多语言": "语言", - "添加锁": "加锁", - "锁地址": "锁的地址", - "选择锁类型": "选择锁类型", - "NFC无源锁": "NFC无源锁", - "添加设备": "添加设备", - "网关": "网关", - "客服": "客户服务", - "设置": "设置", - "更多设置": "更多的设置", - "消息推送": "通知推", - "锁用户管理": "锁定用户", - "拥有的钥匙": "与此用户关联的eKeys", - "批量授权": "权限管理", - "关联设备": "相关的设备", - "关联姓名": "相关的名字", - "转移智能锁": "把锁", - "选择锁": "屏幕锁", + "空闲": "空置", + "已入住": "佔領", + "多语言": "語言", + "添加锁": "添加鎖", + "锁地址": "鎖定地址", + "选择锁类型": "選擇鎖類型", + "NFC无源锁": "NFC無源鎖", + "添加设备": "添加設備", + "网关": "網關", + "客服": "顧客服務", + "设置": "設置", + "更多设置": "更多設置", + "消息推送": "通知推送", + "锁用户管理": "鎖定用戶", + "拥有的钥匙": "與此用戶關聯嘅eKey", + "批量授权": "權限管理", + "关联设备": "關聯設備", + "关联姓名": "關聯名稱", + "转移智能锁": "轉移鎖定", + "选择锁": "屏幕鎖定", "接收人信息": "收件人", - "转移网关": "传输网关", - "锁屏": "屏幕锁", - "已关闭": "从", - "已开启": "在", - "开启": "打开", - "确定要开启重置键?": "继续启用重置按钮?", - "确定要关闭重置键?": "继续禁用重置按钮?", - "隐藏无效开锁权限": "隐藏无效访问", - "APP开锁时需手机连网的锁": "锁需要手机在线", - "增值服务": "服务", - "关于": "关于", - "退出": "注销", - "删除账号": "删除账户", - "个人信息": "账户信息", - "头像": "《阿凡达》", - "昵称": "昵称", - "请输入昵称": "请输入您的昵称", + "转移网关": "傳輸網關", + "锁屏": "屏幕鎖定", + "已关闭": "關閉", + "已开启": "上", + "开启": "開", + "确定要开启重置键?": "繼續啟用Reset掣?", + "确定要关闭重置键?": "繼續禁用Reset掣?", + "隐藏无效开锁权限": "隱藏無效訪問權限", + "APP开锁时需手机连网的锁": "需要在線電話嘅鎖", + "增值服务": "服務業", + "关于": "大約", + "退出": "註銷", + "删除账号": "刪除帳戶", + "个人信息": "賬戶信息", + "头像": "化身", + "昵称": "暱稱", + "请输入昵称": "請輸入您的暱稱", "修改昵称": "重命名", - "修改账号": "编辑帐户", - "重置密码": "重置密码", - "安全问题": "安全问题", - "为了你的账号安全,修改账号前请先使用验证码验证": "为保证您的帐户安全,请在修改帐户前进行帐户密码验证", - "请输入新账号": "请输入新帐户", - "找回密码和登录新设备时,可通过绑定的手机验证": "绑定电话号码将用于接收验证码。", - "找回密码和登录新设备时,可通过绑定的邮箱验证": "绑定电子邮件将用于接收验证码。", - "原密码": "当前的密码", - "新密码": "新密码", - "确认密码": "确认密码", - "当你手机丢了,可以通过回答设置的安全问题来登录新设备": "如果您的手机丢失,您可以通过回答安全问题登录新手机。", - "问题一": "问题1", - "问题二": "问题2", - "问题三": "问题3", - "请输入你的答案": "请输入答案", - "即将到期": "很快到期", - "去授权": "点击授权", - "修改名称": "编辑的名字", - "状态": "状态", - "WiFi名称": "无线网络名称", - "网络MAC": "网络MAC", - "网关升级": "网关更新", - "网关连接的锁": "连接到此网关的锁", - "信号强": "强大的", - "选择网关类型": "选择网关类型", - "添加网关": "添加网关", - "重新通电": "重新连接电源", - "指示灯": "指示灯", - "选择网关": "选择网关", - "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "不支持5G。请选择2.4G WiFi。", - "WiFi密码": "WiFi Passward", - "请输入WiFi密码": "输入WiFi密码", - "网关名称": "网关的名字", - "请输入网关名称": "输入网关名称", + "修改账号": "編輯賬戶", + "重置密码": "重置密碼", + "安全问题": "安全問題", + "为了你的账号安全,修改账号前请先使用验证码验证": "為咗你賬戶嘅安全,請修改賬戶前使用賬戶密碼驗證緊", + "请输入新账号": "請輸入新賬戶", + "找回密码和登录新设备时,可通过绑定的手机验证": "绑定電話號碼將用于接收驗證碼。", + "找回密码和登录新设备时,可通过绑定的邮箱验证": "绑定電子郵件將用于接收驗證碼。", + "原密码": "當前密碼", + "新密码": "新密碼", + "确认密码": "確認密碼", + "当你手机丢了,可以通过回答设置的安全问题来登录新设备": "如果您的手機丟失了,你可以透過答安全問題嚟登錄新手機。", + "问题一": "問題1", + "问题二": "問卷調查2", + "问题三": "問卷調查3", + "请输入你的答案": "請輸入您的答案", + "即将到期": "即將過期", + "去授权": "前往授權", + "修改名称": "編輯名稱", + "状态": "地位", + "WiFi名称": "Wifi名稱", + "网络MAC": "網絡MAC", + "网关升级": "網關更新", + "网关连接的锁": "連接到此網关嘅鎖", + "信号强": "強", + "选择网关类型": "選擇Gateway Type (網關類型)", + "添加网关": "添加網關", + "重新通电": "重新連接電源", + "指示灯": "指示燈", + "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "網關上電之後,長按復位鍵5秒,指示燈交替閃爍時點擊下一步", + "选择网关": "選擇Gateway (網關)", + "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "唔撐5G。 請選擇2.4G嘅WiFi。", + "WiFi密码": "WiFi通行證", + "请输入WiFi密码": "輸入WiFi密碼", + "网关名称": "網關名稱", + "请输入网关名称": "輸入網關名稱", "IP地址": "IP地址", - "子网掩码": "子网掩码", - "默认网关": "默认网关", - "自动获取DNS服务器地址": "自动获取DNS服务器地址", - "首选DNS": "首选DNS", - "备选DNS": "选择域名", - "不使用静态IP": "没有使用静态IP", - "使用静态IP": "使用静态IP", - "请输入IP地址": "输入IP地址", - "请输入子网掩码": "输入子网掩码", - "请输入默认网关": "输入默认网关", - "所有锁": "所有的锁", - "搜索所有类型的锁": "扫描所有类型的锁", - "门锁": "门锁", - "挂锁": "挂锁", - "保险箱锁": "安全锁", - "智能门禁": "智能访问控制", - "车位锁": "停车锁", - "摸亮触摸屏": "触摸任何键激活键盘", - "摸亮触摸屏,锁进入可添加状态,点击下一步": "请触摸任意键激活锁并将其置于配对模式。按下一个", - "附近的锁": "附近的锁", - "如需修改名字请重新命名,点击确定添加锁": "如果要更改名称,请重命名,单击“确定”添加锁定", - "添加锁时,手机必须在锁旁边": "添加锁时,手机必须在锁旁边", - "登录": "登录", - "注册": "注册", - "我已阅读并同意": "我读过并同意了", - "验证码": "代码", - "密码必须是8-20位,至少包括数字/字母/符号中的2种": "您的密码必须有8-20个字符,并包括至少两种类型的数字,字母和符号", - "手机": "电话", - "邮箱": "电子邮件", - "请输入邮箱": "输入你的电子邮箱", - "国家/地区": "国家/地区", - "你所在的国家/地区": "你的国家/地区", - "选择国家/地区": "选择您的国家或地区", - "获取验证码": "获取代码", - "商务合作": "业务", - "电脑网页版": "网络系统", - "酒店系统": "酒店系统", - "说明书网页版": "用户手册", - "高级功能": "先进的功能", - "记录保存": "记录保留", - "您可通过短信将密码、电子钥匙信息发给接收人。": "短信可用于向接收方发送密码和密钥信息。", - "您可通过邮件将密码、电子钥匙信息发给接收人。": "该电子邮件可用于发送密码和ekey信息给收件人。", - "购买实名认证提示": "开启该功能后,您需要使用指纹、人脸或账号密码打开APP, 3分钟内无需再次验证", - "请选择你希望的实名认证频次": "请选择您需要的实名认证频率", + "子网掩码": "子網掩碼", + "默认网关": "默認網關", + "自动获取DNS服务器地址": "自動獲取DNS服務器地址", + "首选DNS": "首選DNS", + "备选DNS": "備用DNS", + "不使用静态IP": "唔使用靜態IP", + "使用静态IP": "使用靜態IP", + "请输入IP地址": "輸入IP地址", + "请输入子网掩码": "輸入Subnet Mask", + "请输入默认网关": "輸入默認網关", + "所有锁": "所有鎖", + "搜索所有类型的锁": "掃描所有類型嘅鎖", + "门锁": "門鎖", + "挂锁": "掛鎖", + "保险箱锁": "安全鎖", + "智能门禁": "智能門禁", + "车位锁": "泊車鎖", + "摸亮触摸屏": "掂任意鍵以激活鍵盤", + "摸亮触摸屏,锁进入可添加状态,点击下一步": "請觸摸任意鍵以激活鎖並將其置於配對模式。", + "附近的锁": "附近鎖", + "如需修改名字请重新命名,点击确定添加锁": "如果要更改名稱,請重命名,單擊OK添加鎖", + "添加锁时,手机必须在锁旁边": "添加鎖時,手機必須位於鎖隔离", + "登录": "登錄", + "注册": "註冊", + "我已阅读并同意": "我已閱讀並同意", + "验证码": "法典", + "密码必须是8-20位,至少包括数字/字母/符号中的2种": "您的密碼必須包含8-20個字符,並且至少包含兩種類型嘅數字:字母同符號", + "手机": "電話", + "邮箱": "電子郵件", + "请输入邮箱": "輸入您的電子郵件", + "国家/地区": "國家/地區", + "你所在的国家/地区": "你所在嘅國家/地區", + "选择国家/地区": "選擇您的國家或地區", + "获取验证码": "獲取代碼", + "商务合作": "商", + "电脑网页版": "Web系統", + "酒店系统": "酒店系統", + "说明书网页版": "用戶使用手冊", + "高级功能": "高級功能", + "记录保存": "記錄保留", + "您可通过短信将密码、电子钥匙信息发给接收人。": "SMS可用于向收件人發送密碼同ekey信息。", + "您可通过邮件将密码、电子钥匙信息发给接收人。": "該電子郵件可用于向收件人發送密碼同ekey信息。", + "购买实名认证提示": "啟用該功能之後,您需要使用您的指紋、人面或賬戶密碼打開APP。 3分鐘內無需再次驗證", + "请选择你希望的实名认证频次": "請選擇所需嘅实名認證頻率", "仅首次": "第一次", - "每日一次": "一天一次", - "每周一次": "一周一次", + "每日一次": "每日一次", + "每周一次": "每周一次", "每月一次": "每月一次", - "当前状态": "当前的状态", - "试用中": "受审", - "高级功能权益内容": "先进的功能", - "短信模板": "短信模板", - "邮件模板": "电子邮件模板", - "发卡工具": "卡编码器", - "购买高级功能须知": "请注意", - "购买高级功能提示": "更高级的功能正在开发中,如果您需要,欢迎您根据锁的数量打开服务。高级功能只适用于您自己的锁。如果您是授权管理员,请联系该锁的顶级管理员开启该服务", - "免费体验": "免费试用", - "立即开通": "打开现在", - "购买短信": "买手机", - "购买邮件": "购买电子邮件", - "购买实名认证次数": "购买实名认证次数", - "开通高级功能": "启用高级功能", - "选择套餐": "选择包", + "当前状态": "現狀", + "试用中": "試用期", + "高级功能权益内容": "高級功能", + "短信模板": "短信糢闆", + "邮件模板": "電子郵件糢闆", + "发卡工具": "卡編碼器", + "购买高级功能须知": "通知", + "购买高级功能提示": "更高級嘅功能開發緊中,如果您需要,欢迎你根據鎖嘅數量打開服務。 高級功能僅適用於您自己嘅鎖。 如果你係授權管理員,請聯繫鎖嘅頂級管理員以打開服務", + "免费体验": "免費試用", + "立即开通": "而家打開", + "购买短信": "購買短信", + "购买邮件": "購買EMail", + "购买实名认证次数": "購買实名認證次數", + "开通高级功能": "啟用高級功能", + "选择套餐": "選擇Package (套餐)", "支付方式": "付款方式", "支付宝": "支付宝", "去支付": "支付", - "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人": "您可以自己定义消息。它用于向他人发送密码和密钥信息。", - "高级功能仅能用于你自己的锁": "高级功能只能应用于您自己的锁。", - "新建模板": "创造模板", - "类型": "类型", - "模版内容": "模板内容", - "预览": "预览", - "房间名": "房间", - "预计产生短信条数": "估计的消息段", - "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。": "此功能允许您隐藏一段时间内无效的密码、密钥、卡片和指纹。", - "对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁": "用户的手机需要在线才能通过APP解锁这些选定的锁。", - "配置WiFi": "配置无线网络", - "请输入WiFi名字": "请输入Wifi名称", - "WiFi配网": "WiFi分布网络", - "胁迫卡": "压力卡片", - "员工是否有密码": "已经有了密码", - "员工是否有卡": "已经有卡了", - "员工是否有指纹": "已经设置指纹", - "获取钥匙": "得到关键", - "获取卡": "让卡", - "获取指纹": "得到指纹", - "安全验证": "身份验证", - "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?": "您的所有账户信息将从平台上永久删除,且无法恢复。要删除吗?", - "监控": "监控", - "视频日志": "视频日志", - "开门器": "开门器", - "面容开锁": "脸解锁", - "开门方向设置": "开启方向集", - "电机功率设置": "MotorPower设置", - "开锁时是否需联网": "如果解锁时需要上网", - "选择要加入分组的锁": "选择要添加到该组的lockS", - "锁数量": "锁的数量", - "小米IOT平台": "小米物联网平台", - "面容开锁设置": "面部解锁设置", - "感应距离": "感应距离", - "防误开": "防止开错", - "防误开已关闭,关门后仍可使用面容开锁": "防止误开已关闭,关闭后仍可使用面锁", - "添加和使用面容开锁时": "解锁时添加并使用人脸", - "添加和使用面容开锁时提示": "\n1、请尽量保持单人在门前操作;\n2、请站在门锁前约0.5~0.8米,面向门锁;\n3. 请保持面部畅通,露出五官;\n4. 当人脸识别异常时,可以手动触摸数字键盘上的任意键重新启动人脸识别。", - "秒": "年代", - "请根据门锁实际情况,请谨慎选择电机功率:": "请根据门锁的实际情况仔细选择电机功率:", - "小功率:": "小功率:", - "耗电少": "更少的电力消耗", - "大功率": "高功率:", - "大功率提示": "如果锁舌在开锁时不能正常缩回,或需要驱动\n天地挂钩,建议选用大功率的。此时,功耗将为\n增加。", - "开门方向设置提示": "请慎重选择你家的开门方向(如果选错方向,将无法正常开门和关门):", - "左开": "打开了", - "右开": "开放的权利", - "判断方法:": "判断方法:", - "判断方法内容": "那人站在房子外面,面向大门。\n如果门的铰链或轴在左边,则门是开着的;\n如果门的铰链或轴在右边,则门是右开的。\n如果设置错误,将不能正常开门和关门。\n建议由安装或维护人员操作。", - "录像时段": "视频插槽", - "密码": "密码", - "卡": "卡片", - "指纹": "指纹", - "人脸": "脸", - "配件商城": "锁购物中心", - "公司名称": "公司名称", - "请输入公司名字": "输入公司名称", + "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人": "你可以自己定義消息。 它用于把密碼同ekey嘅信息發送畀其他人。", + "高级功能仅能用于你自己的锁": "高級功能只能應用您自己嘅鎖。", + "新建模板": "創建糢闆", + "类型": "類型", + "模版内容": "糢闆內容", + "预览": "預覽", + "房间名": "房間", + "预计产生短信条数": "估計嘅消息細分", + "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。": "此功能允許您隱藏在一段時間內無效的密碼、ekey、卡和指紋。", + "对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁": "用戶嘅手機需要在線才能使用APP解鎖呢啲選定嘅鎖。", + "配置WiFi": "配置WiFi", + "请输入WiFi名字": "請輸入Wifi名稱", + "WiFi配网": "WiFi分配網絡", + "胁迫卡": "壓力卡", + "员工是否有密码": "已有密碼", + "员工是否有卡": "已有卡", + "员工是否有指纹": "已設置指紋", + "获取钥匙": "獲取密鑰", + "获取卡": "獲取卡", + "获取指纹": "獲取Fingerprint", + "安全验证": "身份驗證", + "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?": "您的所有帳戶信息都將由平台上永久刪除,並且無法 Recovered.Do 你要刪除?", + "监控": "監控", + "视频日志": "視頻日誌", + "开门器": "開門器", + "面容开锁": "人面解鎖", + "开门方向设置": "打開方向集", + "电机功率设置": "電機功率設置", + "开锁时是否需联网": "解鎖時需要Internet時", + "选择要加入分组的锁": "選擇要添加到此組嘅lockS", + "锁数量": "鎖倉金額", + "小米IOT平台": "小米物聯網平台", + "面容开锁设置": "面部解鎖套裝", + "感应距离": "感應距離", + "防误开": "防止錯誤打開", + "防误开已关闭,关门后仍可使用面容开锁": "防止誤開已關閉,關門後仍可使用人面解鎖", + "添加和使用面容开锁时": "解鎖時添加和使用人面", + "添加和使用面容开锁时提示": "\n1、請盡量保持單人門前操作;\n2、請站在門鎖前約0.5~0.8米處,面向門鎖;\n3.請保持面部遮擋,露出面部特徵;\n4.当人面識別異常時,你可以輕觸數字鍵盤上嘅任意鍵,手動重啟人面識別。", + "秒": "S", + "请根据门锁实际情况,请谨慎选择电机功率:": "請根據門鎖的實際情況仔細選擇電機功率:", + "小功率:": "微瓦:", + "耗电少": "功耗更低", + "大功率": "大功率:", + "大功率提示": "如果鎖舌在解鎖時無法正常縮回,或需要驅動\n天地鈎,建議選擇高功率。 此時,功耗將為\n增加。", + "开门方向设置提示": "請仔細選擇開門的方向(如果選錯了方向,將無法正常開門和關門):", + "左开": "左開", + "右开": "打開右側", + "判断方法:": "判斷方法:", + "判断方法内容": "嗰個人企喺屋外,面對住入口嘅門。\n如果門的銦鏈或軸在左側,則門保持打開狀態;\n如果門的銦鏈或軸在右側,則門是右開的。\n如果設置錯誤,則無法正常打開和關閉門。\n建議由安裝或維護人員操作。", + "录像时段": "視頻老虎機", + "密码": "密碼", + "卡": "卡", + "指纹": "指紋", + "人脸": "面臨", + "配件商城": "鎖商城", + "公司名称": "公司名稱", + "请输入公司名字": "輸入公司名稱", "提示": "提示", - "是否删除?": "是否删除?", - "员工信息": "员工信息", - "员工": "工作人员", - "打卡方式无效": "不可用", - "中国": "中国", - "选择钥匙": "选择ekey", - "编辑": "编辑", - "无": "没有", - "有": "是的", - "请输入姓名": "请输入名称", - "获取人脸": "让脸", - "选择密码": "选择密码", - "选择卡": "选择卡", - "选择指纹": "选择指纹", - "选择人脸": "选择面对", - "员工是否有人脸": "员工是否有脸", - "同时删除员工钥匙": "删除他/她的密钥", - "删除": "删除", - "确定要删除员工吗?": "删除该员工", - "月统计": "每月统计数据", - "迟到": "晚些时候", - "早退": "早走", - "未打卡": "没有记录", - "钥匙将在": "此密钥将在", - "天后失效": "天(s)", - "电量更新时间:": "电池更新时间:", - "新增配件": "添加", - "钥匙不可用": "密钥不可用", - "正在开锁中...": "解锁……", - "你的钥匙": "你的关键", - "常开模式启动!长按闭锁": "开启模式启动!长按锁定", - "演示模式": "演示模式", - "请先同意用户协议及隐私政策": "请先同意本用户协议及隐私政策", - "用户协议": "用户条款", - "隐私政策": "隐私政策", - "注册成功": "注册成功", - "你所在的": "你入选了", - "手机号": "电话号码", - "忘记密码": "忘记了密码", + "是否删除?": "是否刪除?", + "员工信息": "員工信息", + "员工": "員工", + "打卡方式无效": "唔可以利用嘅", + "中国": "中國", + "选择钥匙": "選擇ekey", + "编辑": "編輯", + "无": "唔係", + "有": "係", + "请输入姓名": "請輸入名稱", + "获取人脸": "獲取人面", + "选择密码": "選擇密碼", + "选择卡": "選擇卡", + "选择指纹": "選擇指紋", + "选择人脸": "選擇面", + "员工是否有人脸": "員工是否有脸", + "同时删除员工钥匙": "刪除他/她的ekey", + "删除": "刪除", + "确定要删除员工吗?": "刪除此員工", + "月统计": "每月統計數據", + "迟到": "晚", + "早退": "提前離開", + "未打卡": "暫無記錄", + "钥匙将在": "此ekey將在", + "天后失效": "天", + "电量更新时间:": "電池更新時間:", + "新增配件": "加", + "钥匙不可用": "密鑰不可用", + "正在开锁中...": "解鎖。。。", + "你的钥匙": "您的密鑰", + "常开模式启动!长按闭锁": "打開模式開始了! 長按鎖定", + "演示模式": "Demo模式", + "请先同意用户协议及隐私政策": "請先同意用戶協議和私隱政策", + "用户协议": "用戶條款", + "隐私政策": "私隱策略", + "注册成功": "註冊成功", + "你所在的": "您正在", + "手机号": "電話號碼", + "忘记密码": "忘記密碼", "重置成功": "重置成功", - "确定要退出吗?": "退出吗?", - "功能暂未开放": "功能尚未打开", - "设置成功": "设置成功", - "删除成功": "删除成功", + "确定要退出吗?": "退出?", + "功能暂未开放": "函數尚未打開", + "设置成功": "設置成功", + "删除成功": "刪除成功", "单次": "一次性", "永久": "永久", - "限时": "定时", - "自定义": "自定义", + "限时": "定時", + "自定义": "習慣", "清空码": "擦除", - "循环": "反复出现的", + "循环": "經常性", "工作日": "工作日", - "每日": "每天", + "每日": "日常", "周末": "周末", - "确定要删除吗?": "删除吗?", - "该锁的密码都将被删除": "此锁的所有密码将被删除", - "已过期": "无效的", - "该锁的电子钥匙都将被删除": "此锁的所有ekey都将被删除", - "同时删除其发送的所有钥匙,钥匙删除后不能恢复": "删除与此ekey关联的所有ekey。此步骤不可撤消!", - "删除钥匙会在用户APP连网后生效": "当用户的APP连接到网络时,eKey将被删除", - "有效时间": "有效的时间", + "确定要删除吗?": "刪除?", + "该锁的密码都将被删除": "此鎖嘅所有密碼都將被刪除", + "已过期": "無效", + "该锁的电子钥匙都将被删除": "此鎖嘅所有eKey將被刪除", + "同时删除其发送的所有钥匙,钥匙删除后不能恢复": "DELETE與此ekey關聯嘅所有ekey。 此步驟無法撤消!", + "删除钥匙会在用户APP连网后生效": "当用戶嘅APP連接到網絡時,eKey將被刪除", + "有效时间": "生效時間", "接收者": "收件人", - "仅管理自己创建的用户": "只管理自己的用户", - "远程开锁": "远程解锁", - "请输入钥匙名称": "请输入密钥名称", + "仅管理自己创建的用户": "僅打理自己嘅用戶", + "远程开锁": "遠程解鎖", + "请输入钥匙名称": "請輸入密鑰名稱", "修改成功": "修改成功", - "冻结": "冻结", - "解除冻结": "解冻", - "授权": "授权", - "取消授权": "取消授权", - "同时解冻其发送的钥匙": "解冻该用户发出的所有密钥", - "会在用户APP连网后生效": "当用户的APP连接到网络时,此密钥将被解冻", - "同时冻结其发送的钥匙": "冻结该用户颁发的所有密钥", - "冻结会在用户APP连网后生效": "当用户的APP连接到网络时,此ekey将被冻结", - "取消授权会在用户APP连网后生效": "当用户的APP连接到网络时,用户将失去其权限", - "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授权用户具有与锁管理器几乎相同的权限(例如:发送密钥和密码的能力)", - "失效时间需晚于生效时间": "过期时间必须晚于有效时间", - "生效时间需晚于当前时间": "生效时间必须晚于当前时间", - "失效日期需晚于生效日期": "有效期必须晚于生效日期", - "修改有效期": "改变时间", - "生效日期": "开始日期", - "失效日期": "结束日期", - "开锁": "解锁", - "开锁成功": "解锁成功", - "请选择锁": "请选择锁", - "请选择接收者": "请选择接收方", - "请选择有效期": "请选择有效期限", - "请选择发送方式": "请选择发送方式", - "请选择结束时间": "请选择结束时间", - "完成": "完整的", - "有效日": "周期", - "发送成功": "发送成功", - "请选择开始时间": "请选择开始时间", - "选择用户": "选择收件人", - "已选中": "选择", - "确定": "确定", - "请选择要发送的锁": "请选择锁", - "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。": "人脸实名认证是指用户在解锁手机APP前需要对自己的脸部进行验证,验证后即可解锁。", - "分享": "分享", - "请输入接收者账号": "请输入接收人账户", - "接收者号码未注册,请重新发送": "收件人号码未注册,请重新发送", - "是否发送电子钥匙给未注册账号": "您要发送密钥到新帐户吗", + "冻结": "凍結", + "解除冻结": "解凍", + "授权": "授權", + "取消授权": "取消授權", + "同时解冻其发送的钥匙": "解凍此用戶發佈嘅所有ekey", + "会在用户APP连网后生效": "当用戶嘅APP連接到網絡時,此ekey將被解凍", + "同时冻结其发送的钥匙": "凍結此用戶發佈嘅所有ekey", + "冻结会在用户APP连网后生效": "当用戶嘅APP連接到網絡時,此ekey將被凍結", + "取消授权会在用户APP连网后生效": "当用戶嘅APP連接到網絡時,用戶將失去佢/她的權限", + "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授權用戶具有與LOCK Manager幾乎相同嘅權限(例如。 能夠發送ekey同密碼)", + "失效时间需晚于生效时间": "過期時間必須遲於生效時間", + "生效时间需晚于当前时间": "生效時間必須遲於當前時間", + "失效日期需晚于生效日期": "到期日期必須遲於生效日期", + "修改有效期": "更改期", + "生效日期": "開始日期", + "失效日期": "結束日期", + "开锁": "開鎖", + "开锁成功": "解鎖成功", + "请选择锁": "請選擇鎖", + "请选择接收者": "請選擇接收器", + "请选择有效期": "請選擇有效期", + "请选择发送方式": "請選擇發送方式", + "请选择结束时间": "請選擇結束時間", + "完成": "完成", + "有效日": "循環", + "发送成功": "發送成功", + "请选择开始时间": "請選擇開始時間", + "选择用户": "選擇收件人", + "已选中": "選擇", + "确定": "確定", + "请选择要发送的锁": "請選擇鎖", + "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。": "人面实名認證係指用戶喺解鎖手機APP之前需要驗證自己嘅面,驗證就可以解鎖。", + "分享": "共享", + "请输入接收者账号": "請輸入收款人賬戶", + "接收者号码未注册,请重新发送": "收件人號碼未登記,請重新發送", + "是否发送电子钥匙给未注册账号": "是否要把ekey發送到新帳戶", "取消": "取消", - "标记成功": "标志着成功", - "微信好友": "微信的朋友", + "标记成功": "標記成功", + "微信好友": "微信好友", "短信": "短信", - "邮件": "电子邮件", - "更多": "更多的", - "您好,您的电子钥匙生成成功": "您好,您的电子密钥生成成功", - "生效时间不能小于当前时间": "有效时间不能小于当前时间", - "结束时间不能小于当前时间": "结束时间不能小于当前时间", - "是否为管理员": "是管理员吗?", - "已连接到锁,请将卡靠近门锁的读卡区": "连接。将卡片贴在读卡器上", - "尝试连接设备...": "连接与锁。请稍等…", + "邮件": "電子郵件", + "更多": "更多", + "您好,您的电子钥匙生成成功": "您好,您的電子密鑰已成功生成", + "生效时间不能小于当前时间": "生效時間不能小於當前時間", + "结束时间不能小于当前时间": "結束時間不能小於當前時間", + "是否为管理员": "係管理員嗎", + "已连接到锁,请将卡靠近门锁的读卡区": "已連接。把卡靠喺讀卡器上", + "尝试连接设备...": "Connecting with Lock. 請稍候...", "地理位置": "地理位置", - "检查以确保以下地址是正确的": "请检查以下地址是否正确", - "地图加载中,请稍候。。": "地图正在加载中,请稍等…", - "跳过": "跳过", - "还未获取到位置信息哦,请耐心等待一下!": "位置信息尚未获取,请耐心等待!", - "请填写信息": "请填写这些信息", + "检查以确保以下地址是正确的": "檢查以確保以下地址正確", + "地图加载中,请稍候。。": "地圖正在加載中,請稍候...", + "跳过": "跳", + "还未获取到位置信息哦,请耐心等待一下!": "位置信息尚未獲取,請耐心等待!", + "请填写信息": "請填寫信息", "有效期": "有效期", - "生效时间": "开始时间", - "失效时间": "结束时间", - "上传成功": "上传成功", - "未生效": "不活跃的", - "已生效": "有效的", - "指纹详情": "指纹信息", - "添加过程中,请根据提示,在指纹采集器上进行多次的抬起按压": "您将被要求将您的手指放在传感器几次。请按照提示……", - "开始添加": "开始", - "请将您的手指按下": "将手指放在传感器上", - "根据提示,抬起手指后再进行下一次指纹采集": "按照提示去做……您将需要将手指移到传感器上以进行下一个记录", + "生效时间": "開始時間", + "失效时间": "結束時間", + "上传成功": "上傳成功", + "未生效": "無效", + "已生效": "有效", + "指纹详情": "指紋信息", + "添加过程中,请根据提示,在指纹采集器上进行多次的抬起按压": "你將需要把手指多次放在傳感器上。 請按照提示操作...", + "开始添加": "開始", + "请将您的手指按下": "把手指放在傳感器上", + "根据提示,抬起手指后再进行下一次指纹采集": "按照提示操作... 你將需要把手指移開並放在傳感器上以用于下一條記錄", "添加成功": "添加成功", "更新成功": "更新成功", - "搜索": "搜索", - "重置后,该锁的卡都将被删除哦,确认要重置吗?": "重置后,锁上的卡会被删除,您要重置吗?", - "已失效": "无效的", + "搜索": "搜尋", + "重置后,该锁的卡都将被删除哦,确认要重置吗?": "重置之後,鎖嘅卡將被刪除,你要重置啊?", + "已失效": "無效", "卡详情": "卡信息", - "请输入": "请在这里输入", - "关闭后,智能锁将设置为全天常开模式,直到手动关闭": "通过关闭,锁将保持解锁一整天,直到它被手动锁定", - "请输入小于或等于60的数字": "请输入一个小于60的数字", + "请输入": "請在此處輸入", + "关闭后,智能锁将设置为全天常开模式,直到手动关闭": "透過關閉,鎖將日保持解鎖狀態晒,直到它被手動鎖定", + "请输入小于或等于60的数字": "請輸入小於60嘅數字", "操作成功": "操作成功", - "管理员密码相同,无需修改": "管理员密码保持一致,无需修改", - "请输入6-9位数字": "长度为6 ~ 9位", - "请输入6-9位管理员密码": "请输入6-9位的管理员密码", - "请输入新的管理员密码": "请输入新的管理员密码", - "未分组": "未分组的", - "请输入分组名称": "创建组", - "创建成功": "创建成功", - "设置锁分组成功": "设置锁组成功", - "电池1电量": "电池1", - "电池2电量": "电池2", - "电量更新时间": "电池更新时间", - "锁电量更新成功": "锁定电源更新成功", - "您的钥匙未生效": "你的钥匙没用", - "您的钥匙已冻结": "你的钥匙被冻住了", - "您的钥匙已过期": "您的钥匙过期了", - "常开模式开启": "锁处于通道模式", - "超级管理员": "超级管理员", - "授权管理员": "使管理", - "普通用户": "普通用户", + "管理员密码相同,无需修改": "管理員密碼相同,無需修改", + "请输入6-9位数字": "長度6-9位", + "请输入6-9位管理员密码": "請輸入6-9位數字嘅管理員密碼", + "请输入新的管理员密码": "請輸入新嘅管理員密碼", + "未分组": "未分組", + "请输入分组名称": "創建組", + "创建成功": "創造成功", + "设置锁分组成功": "設置鎖組成功", + "电池1电量": "電池1", + "电池2电量": "電池2", + "电量更新时间": "電池更新時間", + "锁电量更新成功": "鎖定電源更新成功", + "您的钥匙未生效": "您的密鑰無效", + "您的钥匙已冻结": "您的密鑰已被凍結", + "您的钥匙已过期": "您的密鑰已過期", + "常开模式开启": "鎖處於Passage Mode", + "超级管理员": "超級管理員", + "授权管理员": "設為admin", + "普通用户": "普通用戶", "余": "平衡", - "天": "一天", - "删除锁后,所有信息都会一起删除,确定删除锁吗?": "删除锁后,所有信息将被一并删除,您确定要删除锁吗?", - "请输入登录密码": "请输入应用程式密码", - "删除设备失败,请确保在设备附近,设备未被连接,设备已打开": "删除设备失败,请确保设备在设备附近,设备未连接,设备已打开", - "用户无权限": "用户没有权限", - "创建公司后,考勤功能才能使用": "请先创建一个公司", - "是否删除钥匙?": "删除这个密钥?", - "邮箱绑定成功": "邮件绑定成功", - "手机绑定成功": "手机绑定成功", - "网络访问失败,请检查网络是否正常": "请求失败。网络不可用,请检查并连接到3G/4G/WIFI", - "清空": "清晰的", - "是否清空?": "清楚了吗?", + "天": "日", + "删除锁后,所有信息都会一起删除,确定删除锁吗?": "刪除鎖後,所有信息都會一起刪除,您確定要刪除鎖嗎?", + "请输入登录密码": "請輸入應用程序密碼", + "删除设备失败,请确保在设备附近,设备未被连接,设备已打开": "刪除設備失敗,請確保設備喺設備附近,設備未連接,設備已開機", + "用户无权限": "用戶冇權限", + "创建公司后,考勤功能才能使用": "請先創建公司", + "是否删除钥匙?": "刪除呢個ekey?", + "邮箱绑定成功": "電子郵件绑定成功", + "手机绑定成功": "手機绑定成功", + "网络访问失败,请检查网络是否正常": "請求網絡不可用,請檢查並將您的設備連接到3G/4G/WIFI", + "清空": "清楚", + "是否清空?": "清楚?", "消息详情": "消息信息", - "创建时间": "创建时间", - "管理员详情": "管理员详细信息", - "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "如果有人强迫你开门,你可以用这张卡。告警信息将被发送给管理员。要使用此功能,请确保您的锁处于在线状态。", - "请不要将胁迫卡用于日常开锁": "请不要在日常使用中使用强制卡。", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "如果有人强迫你开门,你可以用这个指纹。告警信息将被发送给管理员。要使用此功能,请确保您的锁处于在线状态。", - "请不要将胁迫指纹用于日常开锁": "请不要日常使用强制指纹。", - "创建公司": "创建一家公司", - "公司名称不能超过30个字符": "公司名称不能超过30个字符", - "公司名称不能小于6个字符": "公司名称不能少于6个字符", - "WIFI列表": "无线网络列表", + "创建时间": "創建時間", + "管理员详情": "管理員詳細信息", + "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "如果有人強迫你開門,你可以使用呢張卡。 警報消息將發送畀管理員。 要使用此功能,請確保您的鎖處於在線狀態。", + "请不要将胁迫卡用于日常开锁": "請不要將強制卡用于日常使用。", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "如果有人強行開門,您可以使用此指紋。 警報消息將發送畀管理員。 要使用此功能,請確保您的鎖處於在線狀態。", + "请不要将胁迫指纹用于日常开锁": "請不要將強制指紋用于日常使用。", + "创建公司": "創建公司", + "公司名称不能超过30个字符": "公司名稱唔可以超過30個字符", + "公司名称不能小于6个字符": "公司名稱不能少於6個字符", + "WIFI列表": "WIFI列表", "刷新": "刷新", - "手动配网": "人工配电网", - "远距离": "长途", - "中距离": "中等距离", - "近距离": "短的距离", - "锁时间更新成功": "锁定时间更新成功", - "锁用户": "锁定用户", - "请选择常开日期": "请选择开放日期", - "结束时间不能小于开始时间哦": "结束时间不能小于开始时间", - "介绍": "我们的故事", - "个人信息收集清单": "个人信息收集清单", - "应用权限说明": "应用权限说明", + "手动配网": "手動分配網絡", + "远距离": "長距離", + "中距离": "中距離", + "近距离": "短距離", + "锁时间更新成功": "鎖定時間更新成功", + "锁用户": "鎖定用戶", + "请选择常开日期": "請選擇開放日期", + "结束时间不能小于开始时间哦": "結束時間不能小於開始時間", + "介绍": "我哋嘅故仔", + "个人信息收集清单": "個人信息收集列表", + "应用权限说明": "應用程序權限說明", "第三方信息共享清单": "第三方信息共享列表", - "请选择您的位置": "请选择您的位置", - "请先选择位置": "请先选择位置", - "管理员密码": "管理员密码", - "如需修改,请输入新的管理员密码(6位),点击确定即可修改": "如果需要修改,请输入新的管理员密码(6位数字),单击“确定”进行修改", + "请选择您的位置": "請選擇您的位置", + "请先选择位置": "請先選擇位置", + "管理员密码": "管理員密碼", + "如需修改,请输入新的管理员密码(6位),点击确定即可修改": "如需修改,請輸入新嘅管理員密碼( 6位數字),點擊確定進行修改", "修改": "修改", - "网络摄像头": "相机", + "网络摄像头": "相機", "重命名": "重命名", - "分组下的锁将被移到未分组里": "组下的锁将移至未分组状态", - "编辑成功": "编辑成功", - "厂商": "制造商", - "型号": "模型", - "密码生成后,请在当日23:59前使用一次进行激活,否则过0点后未激活则失效。密码激活后,有效期内不限次数使用。": "密码生成后,请在当天23:59之前使用一次激活,否则0点后无效。密码激活后,在有效期内可以无限次使用。", - "密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "密码生成后,请在当天23:59前使用,否则0点后无效。清除码用于清除今天0点之前产生的所有密码。", - "密码生成后,请在当日23:59前使用,否则过0点后失效。": "密码生成后,请在当天23:59前使用,否则0点后无效。", - "清空密码底部提示": "密码有效期到清空当天23:59\n空内容1:当天0:00之前生成的所有密码(0:00之后生成的密码不受清除密码影响,可继续使用)\n空内容2:清空密码所有自定义密码(已使用和未使用)在使用后立即清空\n要完全清除所有密码,请使用“重置所有密码”功能", - "相机": "相机", - "相册": "照片", - "读写": "存储", + "分组下的锁将被移到未分组里": "組下嘅鎖將移至ungrouped", + "编辑成功": "編輯成功", + "厂商": "製造者", + "型号": "型", + "密码生成后,请在当日23:59前使用一次进行激活,否则过0点后未激活则失效。密码激活后,有效期内不限次数使用。": "密碼生成之後,請在當天23:59之前使用一次激活,否則0啲後無效。 密碼激活後,在有效期內可以無限次使用。", + "密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "密碼生成之後,請在當天23:59之前使用,否則0啲後無效。 明文碼用于清除今日0啲之前生成嘅所有密碼。", + "密码生成后,请在当日23:59前使用,否则过0点后失效。": "密碼生成之後,請在當天23:59之前使用,否則0啲後無效。", + "清空密码底部提示": "密碼有效期至清空當天23:59\n 空內容1:當天0:00之前生成嘅所有密碼(當天0:00之後生成嘅密碼不受清空密碼影響,可以繼續使用)\n空內容2:清除密碼使用後立即清除所有自定義密碼(已使用和未使用)\n要完全清除所有密碼,請使用重置所有密碼功能", + "相机": "相機", + "相册": "相", + "读写": "存儲", "定位": "位置", - "需要访问相机权限才能拍照上传文件例如头像上传": "需要使用摄像头拍照和上传文件,例如上传头像", - "需要访问相机权限才能使用相册图片上传文件上传头像": "使用相册图片上传文件和头像需要访问摄像头", - "需要访问读写权限才能使用本地图片上传头像": "使用本地映像上传头像需要具有读写权限", - "需要访问定位权限才能使用添加钥匙功能的位置信息": "使用add键功能需要访问位置信息", - "申请": "应用程序", - "权限": "许可", - "不允许": "不允许", - "允许": "允许", - "权限被拒绝": "没有权限", - "请手动在系统设置中开启": "请在系统设置中手动启用", - "权限以继续使用应用": "继续使用应用程序的权限。", - "去设置": "把它设置好", - "当前网络": "当前网络", + "需要访问相机权限才能拍照上传文件例如头像上传": "需要訪問相機才能拍照和上傳文件,例如上傳個人資料照片", + "需要访问相机权限才能使用相册图片上传文件上传头像": "需要訪問相機才能使用相冊圖像上傳文件同頭像", + "需要访问读写权限才能使用本地图片上传头像": "需要具有讀取和寫入權限才能使用本地圖像上傳頭像", + "需要访问定位权限才能使用添加钥匙功能的位置信息": "需要訪問位置信息才能使用添加鍵功能", + "申请": "應用", + "权限": "許可", + "不允许": "唔允許", + "允许": "允許", + "权限被拒绝": "權限食檸檬", + "请手动在系统设置中开启": "請喺系統設置中手動啟用", + "权限以继续使用应用": "繼續使用應用程序嘅權限。", + "去设置": "開始設置", + "当前网络": "當前網絡", "位置信息": "位置信息", - "请输入wifi名称": "请输入wifi名称", + "请输入wifi名称": "請輸入wifi名稱", "虹膜": "虹膜", - "手掌": "棕榈", - "商城": "购物中心", - "我的": "我的", - "微信公众号推送": "微信公众账号", - "蓝牙": "蓝牙", - "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "使用add key功能的位置信息需要有蓝牙权限", - "请输入Email": "输入你的电子邮箱", - "请输入手机号": "输入您的电话号码", - "家人到家": "家人到家了", - "添加家人": "添加家庭成员", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "如果锁具未联网,则无法及时发送密码、刷卡、指纹等开门方式的提醒。", + "手掌": "手掌", + "商城": "商場", + "我的": "我", + "微信公众号推送": "微信公眾號", + "蓝牙": "藍牙", + "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "需要訪問藍牙權限才能使用添加鍵功能嘅位置信息", + "请输入Email": "輸入您的電子郵件", + "请输入手机号": "輸入您的電話號碼", + "家人到家": "家人到家", + "添加家人": "添加家庭成員", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "如果鎖冇連接互聯網,則無法及時發送密碼、卡、指紋同其他開門方式嘅提醒。", "消息提醒": "提醒", - "开门通知": "开始注意到", - "N天未开门": "N天没有开门", - "门未关好": "门没关", - "防拆报警": "防拆报警", - "低电量提醒": "电池电量过低", - "胁迫开门": "强行开门", - "有人按门铃": "有人按了门铃", - "有人出现在门口": "有人出现在门口", + "开门通知": "開業通知", + "N天未开门": "N日唔開門", + "门未关好": "門未關閉", + "防拆报警": "篡改警報", + "低电量提醒": "電池電量低", + "胁迫开门": "強制開門", + "有人按门铃": "有人按了門鈴", + "有人出现在门口": "有人出現喺門口", "提醒方式": "提醒方法", - "开门方式": "开门法", - "请选择": "请选择", - "家人": "家庭成员", - "保存": "保存", - "APP推送": "应用推", + "开门方式": "開門方法", + "请选择": "請選擇", + "家人": "家人", + "保存": "救", + "APP推送": "APP推送", "管理员": "管理", - "未启用": "未启用", - "已启用": "启用", - "省电模式": "省电模式", - "逗留抓拍模式": "停留捕获模式", - "实时监控模式": "实时监控模式", - "自定义模式": "自定义模式", - "猫眼设置": "猫眼设置", - "猫眼工作模式": "猫眼工作方式", - "自动亮屏": "自动亮屏", - "亮屏持续时间": "屏幕准时", + "未启用": "未啟用", + "已启用": "啟用", + "省电模式": "省電模式", + "逗留抓拍模式": "保持拍攝模式", + "实时监控模式": "實時監控模式", + "自定义模式": "自定義模式", + "猫眼设置": "貓眼鑲嵌", + "猫眼工作模式": "貓眼工作模式", + "自动亮屏": "自動亮屏", + "亮屏持续时间": "屏幕開啟時間", "逗留警告": "保持警告", - "异常警告": "异常的警告", + "异常警告": "異常警告", "短信提醒": "短信", - "邮件提醒": "电子邮件", - "N天未开门提醒": "N天没有开门", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网": "如果有人强迫你开锁,你可以用这个指纹。告警信息将被发送给管理员。要使用此功能,请确保您的锁处于在线状态。", - "胁迫指纹": "迫使指纹", - "指纹列表": "指纹列表", - "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "在设定时间后,如果锁未打开,系统将发送提醒信息给指定的收件人。此功能要求锁连接到互联网。", - "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "开启提醒功能后,当锁定电池电量低于20%、10%和5%时,系统会向指定的接收人发送提醒信息。", - "未开门时间": "不开门的日子", - "添加和使用面容开锁时:": "解锁时添加和使用Face:", - "关锁": "关闭锁", - "功能": "函数", - "配件": "部分", - "云存": "云存储", - "本地": "本地", - "3天滚动储存": "3天滚动存储", - "去升级": "现在升级", - "下载列表": "下载列表", - "已下载": "下载", - "全部视频": "所有的视频", - "已为本设备免费提供3大滚动视频储存服务": "该设备已免费提供三次滚动视频存储服务", - "视频播放": "视频播放", - "全选": "所有", - "请选择要删除的视频": "请选择要删除的视频", - "请选择要下载的视频": "请选择您要下载的影片", - "欢迎使用": "欢迎使用", - "用户协议和隐私政策概要": "用户协议和隐私政策摘要", - "协议概要": "协议总结", - "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "感谢您使用此应用程序。我们非常重视您的个人信息和隐私保护。使用本产品前,请仔细阅读", - "《用户协议》": "用户条款", + "邮件提醒": "電子郵件", + "N天未开门提醒": "N日唔開門", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网": "如果有人強迫您打開鎖,您可以使用此指紋。 警報消息將發送畀管理員。 要使用此功能,請確保您的鎖處於在線狀態。", + "胁迫指纹": "強制指紋", + "指纹列表": "指紋列表", + "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "超過設定的時間,如果鎖沒有打開,系統會向指定的收件人發送提醒消息。 此功能需要把鎖連接到互聯網。", + "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "啟用提醒之後,当鎖芯電量低於20%、10%同5%時,系統會向指定收件人發送提醒消息。", + "未开门时间": "唔開門嘅天數", + "添加和使用面容开锁时:": "解鎖時添加並使用人面:", + "关锁": "關閉鎖", + "功能": "功能", + "配件": "部件", + "云存": "雲存儲", + "本地": "呢個地方", + "3天滚动储存": "3天滾動存儲", + "去升级": "立即升級", + "下载列表": "下載列表", + "已下载": "下載", + "全部视频": "所有視頻", + "已为本设备免费提供3大滚动视频储存服务": "此設備已免費提供三種滾動視頻存儲服務", + "视频播放": "視頻播放", + "全选": "都", + "请选择要删除的视频": "請選擇你要刪除嘅視頻", + "请选择要下载的视频": "請選擇你要下載嘅視頻", + "欢迎使用": "歡迎使用", + "用户协议和隐私政策概要": "用戶協議和私隱政策摘要", + "协议概要": "實驗方案總結", + "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "感謝您使用此應用程序。 我哋非常重視您的個人信息和私隱保護。 使用本產品前,請仔細閱讀", + "《用户协议》": "用戶條款", "和": "和", - "《隐私政策》": "“私隐政策”", - "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”,即表示您同意并接受所有条款。如果您选择不同意,您将不能使用我们的产品和服务,并将退出应用程序。", - "不同意": "不同意", + "《隐私政策》": "《私隱政策》", + "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "嘅全部內容。 點擊“同意”,即表示你同意並接受所有條款。 如果您選擇不同意,您將無法使用我們的產品和服務,並將退出應用程序。", + "不同意": "反對", "同意": "同意", - "该功能是高级功能,请开通后再使用": "这是高级功能。请先启用它。", - "常用程序": "常见的项目", - "该锁已被重置": "锁已重置", - "需要访问读写权限才能使用手动升级固件": "手动升级固件需要具有读写权限", - "错误D固件,请选择正确的文件": "固件错误,请选择正确的文件", - "非SYD固件,请选择正确的文件": "非SYD固件,请选择正确的文件", - "文件校验失败 0x01": "文件验证失败0x01", - "解析元数据失败,请选择正确的文件": "解析元数据失败,请选择正确的文件", - "文件校验失败 0x02": "文件校验失败0x02", - "文件校验失败 0x03": "文件验证失败0x03", - "固件升级完成": "固件升级完成", - "记录": "记录", - "开通高级功能后才可以对锁进行管理": "请先开启高级功能对锁进行管理。", - "去开通": "启用", - "实名认证": "实名认证", - "当前剩余数量": "剩下的", - "购买": "买", - "实名认证为付费功能,请购买后再使用": "实名认证为付费功能,请购买后使用", - "密码不一致哦": "密码不一致", + "该功能是高级功能,请开通后再使用": "這是高級功能。 請先啟用它。", + "常用程序": "常用程序", + "该锁已被重置": "鎖已重置", + "需要访问读写权限才能使用手动升级固件": "手動升級固件需要具有讀取和寫入權限", + "错误D固件,请选择正确的文件": "固件錯誤,請選擇正確的文件", + "非SYD固件,请选择正确的文件": "非SYD固件,請選擇正確的文件", + "文件校验失败 0x01": "文件驗證失敗0x01", + "解析元数据失败,请选择正确的文件": "無法解析元數據,請選擇正確的文件", + "文件校验失败 0x02": "文件驗證失敗0x02", + "文件校验失败 0x03": "文件驗證失敗0x03", + "固件升级完成": "固件升級已完成", + "记录": "記錄", + "开通高级功能后才可以对锁进行管理": "請先啟用高級功能嚟打理鎖。", + "去开通": "使", + "实名认证": "实名認證", + "当前剩余数量": "剩餘", + "购买": "買", + "实名认证为付费功能,请购买后再使用": "实名認證為付費功能,請購買後使用", + "密码不一致哦": "密碼不一緻", "退出添加": "退出添加", - "管理员已满": "管理全", - "用户已满": "用户已满", - "锁上面添加指纹已满": "添加指纹锁已满", - "指纹已存在": "指纹已经存在。", - "锁上面添加人脸已满": "上面加脸锁满了", - "人脸已存在": "脸已经存在了", - "锁上面添加卡已满": "以上加卡锁定已满", + "管理员已满": "管理員已滿", + "用户已满": "用戶已滿", + "锁上面添加指纹已满": "在鎖已滿時添加指紋", + "指纹已存在": "指紋已存在。", + "锁上面添加人脸已满": "添加面上方嘅鎖定已滿", + "人脸已存在": "人面已存在", + "锁上面添加卡已满": "添加卡上方嘅鎖已滿", "卡已存在": "卡已存在", - "锁上面添加密码已满": "上面的锁添加密码已满", - "密码已存在": "已经存在相同的密码。请选择一个不同的", - "请输入密码": "请输入密码", - "暂无密码,无需重置": "无需密码,无需重置", - "真实姓名": "的真实姓名", - "身份证号": "身份证号码", - "请输入真实姓名": "请输入您的真实姓名", - "请输入身份证号": "请输入您的身份证号", - "请输入身份证号和真实姓名": "请输入您的身份证号和真实姓名", - "点击返回设备配对": "轻按“返回设备配对”", - "无法连接?尝试升级": "不能连接?尝试升级", - "固件升级提示": "固件升级提示", - "请先获取固件文件到手机本地,再选择升级": "请先获取固件文件到本地,然后选择“升级”", - "固件升级中": "固件正在升级", - "取消升级": "取消升级", - "固件传输中": "传输中的固件", - "关闭": "关掉", - "传输中'": "在运输过程中", - "操作记录": "记录", - "修改姓名": "编辑的名字", - "传输中": "在运输过程中", - "发送人": "发行的", - "发送时间": "一次发布", + "锁上面添加密码已满": "以上鎖添加密碼已滿", + "密码已存在": "已存在相同嘅密碼。 請選擇其他", + "请输入密码": "請輸入密碼", + "暂无密码,无需重置": "無需密碼,無需重置", + "真实姓名": "真實姓名", + "身份证号": "身份證號碼", + "请输入真实姓名": "請輸入您的真實姓名", + "请输入身份证号": "請輸入您的身份證號碼", + "请输入身份证号和真实姓名": "請輸入您的身份證號碼和真實姓名", + "点击返回设备配对": "點按返回設備配對", + "无法连接?尝试升级": "無法連接? 嘗試升級", + "固件升级提示": "固件升級提示", + "请先获取固件文件到手机本地,再选择升级": "請獲取固件文件先到本地話機,然後選擇Upgrade", + "固件升级中": "固件正在升級", + "取消升级": "取消升級", + "固件传输中": "正在傳輸的固件", + "关闭": "關閉", + "传输中'": "運輸中", + "操作记录": "記錄", + "修改姓名": "編輯名稱", + "传输中": "運輸中", + "发送人": "頒發單位", + "发送时间": "發佈時間", "钥匙详情": "ekey信息", "姓名": "名字", - "发送": "发送", - "请确认姓名全名和身份证号码是否正确": "请确认全名和身份证号是否正确", - "传输期间请勿离开当前页面": "在传输过程中不离开当前页面", + "发送": "發送", + "请确认姓名全名和身份证号码是否正确": "請確認全名和身份證號碼正確無誤", + "传输期间请勿离开当前页面": "傳輸過程中唔好離開當前頁面", "机型": "模型", "硬件版本": "硬件版本", "固件版本": "固件版本", - "手动升级": "手动升级", - "设备连接中...": "设备连接…", - "未避免异常情况,请在门打开时升级": "不可避免的例外,请在门打开时升级", - "钥匙无效": "密钥无效", - "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "无法连接到锁。请重新启动您的手机蓝牙,然后再试一次。", - "如果是全自动锁,请使屏幕变亮": "如果是全自动锁,请将屏幕调亮", - "正在尝试闭锁……": "试图锁定。请稍等…", - "清空记录": "清晰的记录", - "是否要删除操作记录?": "继续删除记录?", - "被删除的记录不能恢复": "记录删除后将无法恢复。", - "全部事件": "所有事件", - "开锁事件": "打开事件", - "异常事件": "异常事件", - "门铃事件": "门铃事件", - "视频事件": "视频事件", - "请开启蓝牙": "请打开蓝牙", - "请选择有效日": "请选择生效日期", - "公司名字长度不能小于 6 ": "公司名称的长度不能小于6", - "已是最新版本": "没有更新", - "一": "一个", - "二": "两个", - "三": "三个", - "四": "四个", - "五": "五个", - "六": "六个", - "日": "太阳", - "新建短信模版": "伟大的短信模板", - "新建邮件模版": "创建电子邮件模板", - "自定义短信模版": "短信模板", - "自定义邮件模版": "电子邮件模板", + "手动升级": "手動升級", + "设备连接中...": "設備正在連接...", + "未避免异常情况,请在门打开时升级": "不可避免的例外情況,請在艙門打開時升艙", + "钥匙无效": "密鑰無效", + "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "無法連接到鎖。請重新啟動手機嘅Blutooth並重試。", + "如果是全自动锁,请使屏幕变亮": "如果係全自動鎖,請讓屏幕更光", + "正在尝试闭锁……": "嘗試鎖定。 請稍候。。。", + "清空记录": "清除記錄", + "是否要删除操作记录?": "繼續刪除記錄?", + "被删除的记录不能恢复": "刪除後無法恢復記錄。", + "全部事件": "所有活動", + "开锁事件": "解鎖事件", + "异常事件": "異常事件", + "门铃事件": "門鈴事件", + "视频事件": "視頻事件", + "请开启蓝牙": "請打開Bluetooth", + "请选择有效日": "請選擇生效日期", + "公司名字长度不能小于 6 ": "公司名稱嘅長度唔可以小於6", + "已是最新版本": "無更新", + "一": "一", + "二": "二", + "三": "三", + "四": "四", + "五": "五", + "六": "六", + "日": "太陽", + "新建短信模版": "創建SMS糢闆", + "新建邮件模版": "創建電子郵件糢闆", + "自定义短信模版": "短信糢闆", + "自定义邮件模版": "電子郵件糢闆", "名称": "名字", - "星星锁": "星锁", - "无考勤记录": "没有记录", - "大家干劲十足": "每个人都及时到来", - "工作时长未出炉": "无工作时间", - "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家/地区的选择会影响数据安全。您目前已选择阿尔巴尼亚,请确认后再继续。", - "确认国家或地区": "确认国家/地区", - "我知道了": "明白了吗", - "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "要接收重要的更新,请点击“确定”并在设置中启用通知。", - "开启后,可通过长按锁上的设置键重新上电,用APP重新添加": "开机后,可以长按锁上的设置键重新开机,用APP重新添加", - "已有": "当前的", - "新增": "新", - "账号格式错误": "坏的格式", - "接收者信息为空": "收件人信息为空", - "请输入时间(秒)": "请输入时间(秒)", - "加载数据失败": "加载数据失败", - "重试": "再试一次", - "升级中,是否退出": "升级过程中,是否退出", - "下一步": "下一个", + "星星锁": "星形鎖", + "无考勤记录": "暫無記錄", + "大家干劲十足": "個個都及時嚟", + "工作时长未出炉": "無工作時間", + "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "國家/地區嘅選擇會影響數據安全。 你目前已選擇阿爾巴尼亞,請繼續之前確認緊。", + "确认国家或地区": "確認國家/地區", + "我知道了": "明喇", + "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "要接收重要更新,請單擊“確定”並喺設置中啟用通知。", + "开启后,可通过长按锁上的设置键重新上电,用APP重新添加": "開機後可以透過長按鎖上嘅設置鍵重新開機,並透過APP添加番", + "已有": "當前", + "新增": "新增功能", + "账号格式错误": "格式錯誤", + "接收者信息为空": "收件人信息為空", + "请输入时间(秒)": "請輸入時間(秒)", + "加载数据失败": "加載數據失敗", + "重试": "試多次", + "升级中,是否退出": "升級過程中,是否退出", + "下一步": "下一個", "公寓": "公寓", - "个人用户": "个人", - "星寓": "明星的公寓", - "账号": "账户", - "请输入手机号或email": "电话号码或电邮地址", - "请输入星寓管理员的账号": "请输入星级公寓管理员账号", - "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "所选锁的所有数据将永久传输给接收方。", - "暂不支持跨平台转移,敬请期待": "跨平台传输暂时不支持,敬请期待", - "移除坏锁": "移动故障/损坏的锁到垃圾桶", - "转移确认": "确认转让", - "本次共转移": "这次共", - "把智能锁": "智能锁", - "确认": "好吧", - "移除成功": "删除成功", - "转移成功": "转移成功", - "该已锁被删除": "被锁的被删除", - "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "被授权的管理员只能管理自己创建的密码、密钥等。", - "添加授权管理员": "创建管理", - "导出记录": "出口记录", - "选择时间段": "选择时间段", + "个人用户": "個人", + "星寓": "Star apartment (星辰公寓)", + "账号": "帳戶", + "请输入手机号或email": "電話號碼或電子郵件", + "请输入星寓管理员的账号": "請輸入星際公寓管理員嘅賬號", + "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "所選鎖嘅所有數據將永久傳輸畀接收者。", + "暂不支持跨平台转移,敬请期待": "暫時唔撐跨平台傳輸,敬請期待", + "移除坏锁": "將故障/損壞的鎖移至廢紙簍", + "转移确认": "確認轉移", + "本次共转移": "今次一共", + "把智能锁": "智能鎖", + "确认": "仲可以", + "移除成功": "刪除成功", + "转移成功": "傳輸成功", + "该已锁被删除": "鎖定嘅已刪除", + "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "授權管理員只能打理自己創建嘅密碼、ekeys等。", + "添加授权管理员": "創建Admin", + "导出记录": "導出記錄", + "选择时间段": "選擇時間段", "导出": "出口", - "批量导出": "批量出口", - "读取记录": "刷新记录", - "设备": "设备", + "批量导出": "批量導出", + "读取记录": "刷新記錄", + "设备": "裝置", "消息": "消息", "智能分析": "智能分析", - "精准识别设备事件,过滤无效信息": "准确识别设备事件,过滤掉无效信息", - "系统设置": "系统设置", - "系统的全局配置在此项内进行设置": "在此设置系统的全局配置", - "导出操作记录": "出口记录", - "立即查看": "视图", - "导出成功": "导出成功", - "发送钥匙": "发送ekey", + "精准识别设备事件,过滤无效信息": "準確識別設備事件並過濾掉無效信息", + "系统设置": "系統設置", + "系统的全局配置在此项内进行设置": "系統嘅全局配置在此項中設置", + "导出操作记录": "導出記錄", + "立即查看": "视圖", + "导出成功": "導出成功", + "发送钥匙": "發送ekey", "进度": "率", - "失败": "失败的", - "人脸详情": "面对细节", - "感应到门前约1.5米有人时,将自动启动面部识别开锁。": "当感应到门前1.5米左右有人时,人脸识别解锁会自动启动。", - "感应到门前约0.8米有人时,将自动启动面部识别开锁。": "当感应到门前0.8米左右有人时,人脸识别解锁会自动启动。", - "感应到门前约0.5米有人时,将自动启动面部识别开锁。": "当感应到门前0.5米左右有人时,人脸识别解锁会自动启动。", - "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感应距离已关闭,您需要手动触摸键盘上的任意键进行人脸识别解锁。", - "防误开已打开,开锁后": "防误开启已开启,解锁后", - "秒内不可使用面容开锁": "面部解锁不能在几秒钟内使用", - "掌静脉": "手掌静脉", - "添加掌静脉": "添加掌脉", - "胁迫掌静脉": "强迫掌静脉", - "请不要将胁迫掌静脉用于日常开锁": "请不要使用强制掌纹进行日常解锁", - "已连接到锁,请自然张开手掌,掌心正对摄像头": "接通锁后,请自然张开手掌,掌心正对摄像头", - "掌静脉详情": "手掌静脉细节", - "掌静脉号": "掌脉数", - "蓝牙未打开,请到设置里面打开蓝牙": "蓝牙未开启,请在设置中开启蓝牙", - "删除用户时,会将用户拥有的钥匙一起删除。": "如果用户被删除,与该用户关联的所有ekey也将被删除。", - "配置网络": "配置网络", + "失败": "失敗", + "人脸详情": "人面細節", + "感应到门前约1.5米有人时,将自动启动面部识别开锁。": "当感應到門前約1.5米处有人時,會自動啟動人面識別解鎖。", + "感应到门前约0.8米有人时,将自动启动面部识别开锁。": "当感應到門前約0.8米处有人時,會自動啟動人面識別解鎖。", + "感应到门前约0.5米有人时,将自动启动面部识别开锁。": "当感應到門前約0.5米处有人時,會自動啟動人面識別解鎖。", + "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感應距離已關閉,你需要手動觸摸鍵盤上嘅任意鍵才能進行人面識別解鎖。", + "防误开已打开,开锁后": "防錯開啟已開啟,解鎖後", + "秒内不可使用面容开锁": "秒內無法使用人面解鎖", + "掌静脉": "手掌靜脈", + "添加掌静脉": "添加手掌靜脈", + "胁迫掌静脉": "手掌靜脈受力", + "请不要将胁迫掌静脉用于日常开锁": "請不要使用脅迫手掌靜脈進行日常解鎖", + "已连接到锁,请自然张开手掌,掌心正对摄像头": "連接鎖時,請自然張開手掌,手掌正對著攝像頭", + "掌静脉详情": "手掌靜脈細節", + "掌静脉号": "手掌靜脈數", + "蓝牙未打开,请到设置里面打开蓝牙": "藍牙未開啟,請喺設置中打開藍牙", + "删除用户时,会将用户拥有的钥匙一起删除。": "如果用戶被刪除,則與該用戶關聯嘅任何ekey都將被刪除。", + "配置网络": "配置網絡", "你好": "你好", "成功": "成功的", - "类型选择": "类型选择", - "请选择要使用哪种类型": "请选择要使用的类型", - "系统邮件(推荐)": "系统邮件(推荐)", - "系统短信(推荐)": "系统短信(推荐)", - "邮件将从软件平台直接发给用户,请根据需要在软件里购买邮件数量。": "邮件将从这个应用程序发送。请先购买邮件包。", - "短信将从软件平台直接发给用户,请根据需要在软件里购买短信数量。": "短信将从这个应用程序发送。请先购买电子邮件包。", - "个人邮件": "个人电子邮件", - "个人短信": "个人短信", - "邮件将从你的个人邮箱发给用户": "电子邮件将从您的个人电子邮件帐户发送。", - "短信将从你的个人手机号发给用户,费用由运营商从你的手机号扣除": "短信将从您的个人电话号码发送。你付钱给你的电信运营商。", - "为了更好地应用体验,请确定权限": "为了获得更好的应用体验,请确认权限", - "您第一次拒绝权限,请确定权限": "您是第一次拒绝权限,请确认权限", - "您第二次拒绝权限,请去应用设置开启权限": "您第二次拒绝了权限,请转到应用程序设置中启用权限", - "去应用市场": "去应用商店", - "温馨提示": "温馨提示", - "关闭应用": "关闭应用程序", - "开启微信接收报警消息需要先关注": "打开微信接收告警信息,需要执行以下操作", - "微信公众号,请保存二维码并使用微信扫一扫设置": "微信公众号,保存二维码,使用微信扫描设置", - "实名认证为付费功能,请联系锁的管理员购买后再使用": "实名认证为付费功能,请联系锁具管理员购买和使用", - "位置权限": "位置的许可", - "请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作": "请允许应用程序使用您的位置。用于扫描BLE锁和网关。", - "相机/相册权限": "相机/相册权限", - "请开启本地存储权限,允许应用读写设备上的照片及文件": "请允许应用程序从存储中读取和写入照片和文件。", - "点击选择": "按此选择", + "类型选择": "鍵入select", + "请选择要使用哪种类型": "請選擇要使用的類型", + "系统邮件(推荐)": "系統電子郵件(推薦)", + "系统短信(推荐)": "系統短信(推薦)", + "邮件将从软件平台直接发给用户,请根据需要在软件里购买邮件数量。": "電子郵件將從此應用程序發送,請購買電子郵件包先。", + "短信将从软件平台直接发给用户,请根据需要在软件里购买短信数量。": "短信將從此應用程序發送,請購買電子郵件包先。", + "个人邮件": "個人電子郵件", + "个人短信": "個人短信", + "邮件将从你的个人邮箱发给用户": "該電子郵件將由您的個人電子郵件帳戶發送。", + "短信将从你的个人手机号发给用户,费用由运营商从你的手机号扣除": "短信將由您的個人電話號碼發送。 你向電信運營商付款。", + "为了更好地应用体验,请确定权限": "為咗獲得更好嘅應用程序體驗,請確認權限", + "您第一次拒绝权限,请确定权限": "你第一次拒絕權限,請確認權限", + "您第二次拒绝权限,请去应用设置开启权限": "你第二次拒絕了權限,請前往應用程序設置以啟用權限", + "去应用市场": "前往應用商店", + "温馨提示": "溫馨提示", + "关闭应用": "關閉應用程序", + "开启微信接收报警消息需要先关注": "打開微信接收告警消息,需要關注", + "微信公众号,请保存二维码并使用微信扫一扫设置": "微信公眾號,保存二維碼並使用微信掃描設置", + "实名认证为付费功能,请联系锁的管理员购买后再使用": "实名認證為付費功能,請聯繫鎖管理員購買使用", + "位置权限": "位置權限", + "请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作": "請授權App使用您的位置。 它用于掃描BLE鎖和網关。", + "相机/相册权限": "相機/相冊權限", + "请开启本地存储权限,允许应用读写设备上的照片及文件": "請授權應用程序由存儲中讀取和寫入照片和文件。", + "点击选择": "單擊以選擇", "微信": "微信", - "朋友圈": "时刻", - "QQ": "QQ", - "QQ空间": "时不时神光", + "朋友圈": "時刻", + "QQ": "QQ客服", + "QQ空间": "QQ一", "微博": "微博", - "FaceBook": "脸谱网", - "链接": "链接", - "今天": "今天", - "密码错误": "无效的密码", - "网络中断": "网络中断", - "钥匙不存在": "键不存在", - "钥匙过期": "关键过期", - "钥匙已存在": "密钥已存在", - "密码失效": "密码无效", - "门锁时间异常": "门锁时间异常", - "APP(手机)未联网": "APP(手机)未连接互联网", - "数据不存在": "数据不存在", - "待接收": "BeReceived", - "已冻结": "冻", - "已删除": "删除", - "未知": "未知的", - "拖动下方滑块完成拼图": "将滑块拖动到正确的位置", - "验证成功": "验证成功", - "验证失败": "验证失败", - "向右拖动滑块填充拼图": "向右拖动滑块来填充拼图", - "请先获取到位置信息哦": "请先获取位置信息", - "请选择国家": "请选择国家", - "获取锁信息": "获取锁信息", - "锁数据异常,请重试": "锁数据异常,请重试", - "连接设备中...": "连接设备……", - "把锁": "锁", - "条": "带", + "FaceBook": "臉書", + "链接": "連結", + "今天": "今日", + "密码错误": "密碼無效", + "网络中断": "網絡中斷", + "钥匙不存在": "密鑰唔存在", + "钥匙过期": "密鑰已過期", + "钥匙已存在": "密鑰已存在", + "密码失效": "密碼無效", + "门锁时间异常": "門鎖時間異常", + "APP(手机)未联网": "APP (手機)未連接互聯網", + "数据不存在": "數據唔存在", + "待接收": "被接收", + "已冻结": "冷凍", + "已删除": "刪除", + "未知": "未知", + "拖动下方滑块完成拼图": "將滑塊拖動到正確嘅位置", + "验证成功": "驗證成功", + "验证失败": "驗證失敗", + "向右拖动滑块填充拼图": "向右拖動滑塊以填充拼圖", + "请先获取到位置信息哦": "請先獲取位置信息", + "请选择国家": "請選擇一個國家", + "获取锁信息": "獲取鎖定信息", + "锁数据异常,请重试": "鎖定數據異常,請重試", + "连接设备中...": "正在連接設備...", + "把锁": "鎖", + "条": "帶", "封": "密封", "次": "次", "支付成功": "支付成功", - "查看详情": "查看详细信息", - "请输入模板名称": "请输入模板名称", - "模版类型": "类型", - "再返回一次退出": "再退出", - "请先添加锁": "请先加锁", - "可视对讲": "可视对讲系统", - "详细日志": "详细的日志", - "已复制到剪切板": "复制", - "拍照": "照片", - "从相册选择": "从相册中选择", - "选择问题": "请选择问题", - "确认长度不足8位": "确认长度小于8位", - "新密码长度不足8位": "新密码长度小于8位", - "两次密码不一致": "密码不匹配。请再试一次", - "请点击获取验证码,验证码将发送到": "请获取验证码。代码将被发送到", - "切换": "开关", - "验证": "验证", - "验证成功,账号已删除": "验证成功,帐户已删除", - "该密码不是自定义密码,无法修改": "该密码不是自定义密码,不能修改", - "请选择设备要关联哪些姓名": "请选择该设备应关联的名称", - "请选择姓名要关联哪些设备": "请选择该名称应关联的设备", - "确定要移除所选中的坏锁吗?": "拆下故障锁?", - "邮件通知": "通过电子邮件通知", - "短信通知": "短信通知", - "您好,您的授权管理员生成成功": "您好,您的授权管理员已成功生成", - "请输入接收者姓名": "请在这里输入", + "查看详情": "查看詳情", + "请输入模板名称": "請輸入糢闆名稱", + "模版类型": "類型", + "再返回一次退出": "再次退出", + "请先添加锁": "請先添加鎖", + "可视对讲": "可視對講", + "详细日志": "詳細日誌", + "已复制到剪切板": "複製", + "拍照": "相片", + "从相册选择": "從相冊中選擇", + "选择问题": "請選擇一個問題", + "确认长度不足8位": "確認長度小於8位", + "新密码长度不足8位": "新密碼長度小於8位", + "两次密码不一致": "密碼唔匹配。請重試", + "请点击获取验证码,验证码将发送到": "請獲取驗證碼。 該代碼將被發送到", + "切换": "開關", + "验证": "驗證", + "验证成功,账号已删除": "驗證成功,帳戶已刪除", + "该密码不是自定义密码,无法修改": "此密碼唔係自定義密碼,無法修改", + "请选择设备要关联哪些姓名": "請選擇設備應關聯嘅名稱", + "请选择姓名要关联哪些设备": "請選擇名稱應與哪些設備關聯", + "确定要移除所选中的坏锁吗?": "移除故障鎖?", + "邮件通知": "透過電子郵件通知", + "短信通知": "透過SMS通知", + "您好,您的授权管理员生成成功": "您好,您的授權管理員已成功生成", + "请输入接收者姓名": "請在此處輸入", "版本更新": "版本更新", "下次再说": "下次", - "配网成功": "网络分销成功", - "配网失败": "网络分发失败", - "该锁的无线键盘都将被删除": "此锁的所有无线键盘将被删除", - "实时画面": "实时图片", - "适合门口较为安全的环境。": "适用于相对安全的门口环境。", - "仅发生特定事件才录像,并可查看实时画面。": "只记录特定的事件,可以查看实时画面。", - "一般情况下,满电可使用7-8个月": "正常情况下,充满电后可使用7-8个月", - "有人逗留或发生特定事件才录像,可随时查看": "有人停留或特定事件被记录下来,可以随时查看", - "实时画面。": "实时画面。", - "一般情况下,满电可使用5~6个月。": "正常情况下,充满电后可使用5~6个月。", - "适合门口人员复杂、较不安全的环境。": "适用于复杂且相对不安全的门口环境。", - "有人出现就录像,可随时查看实时画面。": "有人出现时进行记录,随时查看实时画面。", - "一般情况下,满电可使用2~4个月。": "正常情况下,充满电后可使用2~4个月。", - "根据您家门口实际情况设置录像和实时画面功能。": "根据门口的实际情况设置视频和实时图片功能。", - "可使用时长由具体设置决定。": "使用时间由具体设置决定。", - "查看": "视图", - "有人按门铃或发生": "有人按门铃或者", - "异常事件时": "异常事件", - "不录像": "没有视频", - "有人出现、按门铃": "有人出现,按了门铃", - "或发生异常事件时": "或者发生异常事件", + "配网成功": "網絡派成功", + "配网失败": "網絡派失敗", + "该锁的无线键盘都将被删除": "此鎖嘅所有無線鍵盤都將被刪除", + "实时画面": "實時圖片", + "适合门口较为安全的环境。": "適用於門口相對安全嘅環境。", + "仅发生特定事件才录像,并可查看实时画面。": "僅記錄特定事件,並可查看實時圖。", + "一般情况下,满电可使用7-8个月": "一般情況下,充滿電後可使用7-8個月", + "有人逗留或发生特定事件才录像,可随时查看": "有人入住或記錄特定事件,並且可以隨時查看", + "实时画面。": "實時圖片。", + "一般情况下,满电可使用5~6个月。": "一般情況下,充滿電後可使用5~6個月。", + "适合门口人员复杂、较不安全的环境。": "適用於複雜且相對唔安全嘅門口環境。", + "有人出现就录像,可随时查看实时画面。": "記錄有人出現時,隨時查看實時圖。", + "一般情况下,满电可使用2~4个月。": "一般情況下,充滿電後可使用2~4個月。", + "根据您家门口实际情况设置录像和实时画面功能。": "根據你屋企門口嘅實際情況設置視頻和實時圖功能。", + "可使用时长由具体设置决定。": "使用持續時間由具體設置決定。", + "查看": "视圖", + "有人按门铃或发生": "有人按門鈴定", + "异常事件时": "異常事件", + "不录像": "無視頻", + "有人出现、按门铃": "有人出現,按了門鈴", + "或发生异常事件时": "或發生異常事件", "逗留达到10秒": "停留10秒", - "约1.5米": "约1.5米", - "随时": "任何时候", - "立即录像": "立即记录", - "录像时机": "视频时间", - "有人出现时录像": "记录某人出现的时间", - "人体侦测距离": "人体探测距离", - "查看实时画面": "查看实时图片", - "自定义时间": "自定义时间", - "当日": "今天", - "次日": "第二天", - "自定义时段": "自定义时间段", - "发生事件时查看": "查看事件发生的时间", - "实时查看": "实时视图", - "有人在门口出现10秒后开始录像。": "有人在门口出现了10秒钟才开始录音。", - "有人按门铃时立即录像。": "当有人按门铃时,立即记录。", - "有人出现在门前1.5米范围时启动录像": "当有人出现在门前1.5米范围内时开始录制", - "约0.8米": "约0.8米", - "约3.0米": "约3.0米", - "添加指纹失败": "操作失败。", - "项": "项目", + "约1.5米": "約1.5米", + "随时": "隨時", + "立即录像": "立即錄製", + "录像时机": "視頻計時", + "有人出现时录像": "錄製某人出現時", + "人体侦测距离": "人體檢測距離", + "查看实时画面": "查看實時圖", + "自定义时间": "自定義時間", + "当日": "今日", + "次日": "翌", + "自定义时段": "自定義時間段", + "发生事件时查看": "查看事件發生嘅時間", + "实时查看": "實時視圖", + "有人在门口出现10秒后开始录像。": "有人在錄製前出現喺門口10秒鐘。", + "有人按门铃时立即录像。": "當有人按門鈴時立即錄製。", + "有人出现在门前1.5米范围时启动录像": "当門前1.5米範圍內有人出現時開始錄製", + "约0.8米": "約0.8米", + "约3.0米": "約3.0米", + "添加指纹失败": "操作失敗。", + "项": "項目", "播放中": "玩", - "下载": "下载", - "暂无下载内容": "无下载内容", + "下载": "下載", + "暂无下载内容": "無下載內容", "亮度": "亮度", - "音量": "体积", - "快进至": "快进到", - "快退至": "倒带,", - "暂无视频信息": "无视频信息", - "加载出错": "加载错误", - "请单人正对门锁,距离一个成年人手臂长度": "请独自站在门锁前,与门锁保持一臂的距离", - "(约0.6米)。": "(约0.6米)。", - "保持脸部无遮挡,露出五官。": "保持面部畅通,展示面部特征。", - "准备好了,开始添加": "准备好,开始添加", - "正在录入中...": "记录……", - "添加人脸失败": "添加脸失败", - "重置后,该锁的人脸都将被删除哦,确认要重置吗?": "重置后,锁的面将被删除。你确定要重置吗?", - "人脸号": "面对数量", - "虹膜详情": "虹膜的细节", - "虹膜号": "虹膜数量", - "选择设备类型": "选择设备类型", - "照明灯具": "照明灯具", - "电动窗帘": "电动窗帘", - "门窗传感器": "门窗传感器", - "传感器": "传感器", - "清除数据成功": "数据清除成功", - "1.锁没有联网,密码、IC卡、指纹等开门记录无法实时上传,可以点击右上角按钮,然后读取记录。": "锁具没有联网,无法实时上传密码、刷卡、指纹等开门方式的记录。", - "2.如果您需要保留历史记录,可以点击右上角按钮,然后导出记录": "如果需要保留历史记录,可以将历史记录导出。", - "看不到操作记录,可能原因有": "无法看到操作记录,可能原因", - "操作记录详情": "操作记录明细", - "操作时间": "操作时间", - "此模块功能需要锁联网后设置方可生效": "此模块功能需要在锁连接到互联网后进行设置才能生效", - "用户已存在": "用户已存在", - "钥匙数量已到上限": "键数已达到上限", - "附近没有可用网关": "附近没有可用的网关", - "正在创建安全连接...": "创建安全连接…", - "监视状态下不能发送录音": "监控模式下无法发送录音", - "挂断": "挂断电话", - "监视中暂不能开锁": "在监控期间不可解锁", - "长按说话": "长按说话", - "松开发送": "释放发送", - "请输入6位数字开锁密码": "请输入6位数的解锁密码", - "请输入开锁密码": "请输入解锁密码", - "接收者在有效期内可以不限次数使用": "收件人可在有效期内无限次使用电子密钥。", - "接收者可以使用此App开关锁": "收件人可以通过此应用程序锁定/解锁。", - "单次钥匙有效期为1小时,只能使用一次": "“一次性钥匙”有效期为一小时,只能使用一次。", - "接收者可以在有效期内的固定时间段里,不限次数使用": "收件人可以在固定的周期内无限次地使用密钥。", - "获取模板失败": "日志含义获取模板失败", + "音量": "卷", + "快进至": "快入到", + "快退至": "倒回到", + "暂无视频信息": "無視頻信息", + "加载出错": "加載錯誤", + "请单人正对门锁,距离一个成年人手臂长度": "請獨自站在門鎖前,保持一臂距離", + "(约0.6米)。": "(約0.6米)。", + "保持脸部无遮挡,露出五官。": "保持面部暢通無阻,露出五官。", + "准备好了,开始添加": "準備好,開始添加", + "正在录入中...": "錄音。。。", + "添加人脸失败": "添加人面失敗", + "重置后,该锁的人脸都将被删除哦,确认要重置吗?": "重置之後,鎖嘅面將被刪除。 你確定要重置啊?", + "人脸号": "面數", + "虹膜详情": "鳶尾花詳細信息", + "虹膜号": "虹膜數", + "选择设备类型": "選擇設備類型", + "照明灯具": "照明設備", + "电动窗帘": "電動窗簾", + "门窗传感器": "門窗傳感器", + "传感器": "傳感器", + "清除数据成功": "數據清除成功", + "1.锁没有联网,密码、IC卡、指纹等开门记录无法实时上传,可以点击右上角按钮,然后读取记录。": "該鎖未連接互聯網,因此無法實時上傳密碼、卡、指紋同其他開門方法嘅記錄。", + "2.如果您需要保留历史记录,可以点击右上角按钮,然后导出记录": "如果需要保留歷史記錄,可以導出它們。", + "看不到操作记录,可能原因有": "無法查看操作記錄,可能嘅原因", + "操作记录详情": "操作記錄詳細信息", + "操作时间": "操作時間", + "此模块功能需要锁联网后设置方可生效": "此糢塊功能需要喺鎖連接互聯網後設置才能生效", + "用户已存在": "用戶已存在", + "钥匙数量已到上限": "鍵數已達到上限", + "附近没有可用网关": "附近沒有可用的網關", + "正在创建安全连接...": "正在創建安全連接...", + "监视状态下不能发送录音": "無法在監控模式下發送錄製文件", + "挂断": "收線", + "监视中暂不能开锁": "監控期間無法解鎖", + "长按说话": "按住可講話", + "松开发送": "釋放以發送", + "请输入6位数字开锁密码": "請輸入6位數嘅解鎖密碼", + "请输入开锁密码": "請輸入解鎖密碼", + "接收者在有效期内可以不限次数使用": "收件人可以喺有效期內無限次使用ekey。", + "接收者可以使用此App开关锁": "收件人可以透過此應用程序鎖定/解鎖。", + "单次钥匙有效期为1小时,只能使用一次": "一次過ekey嘅有效期為1鐘頭,並且只能使用一次。", + "接收者可以在有效期内的固定时间段里,不限次数使用": "接收者可以喺固定嘅周期時間內無限次使用ekey。", + "获取模板失败": "無法獲取糢闆", "微信通知": "微信通知", - "系统短信": "系统短信", - "系统邮件": "系统邮件", - "模板": "模板", - "新建模版": "创建模板", - "您好,您的密码是": "你好,你的密码是", - "密码名字": "密码的名字", - "请输入6-9位密码": "请输入6-9位的密码", - "设置密码": "设置密码", - "操作成功,密码为": "成功了。密码是", - "类型:自定义-永久": "类型:Custom-Permanent", - "实时播放": "实时播放", - "点击对讲": "点击对讲机", - "长按开锁": "长按解锁", - "接听失败": "没能回答", - "请在锁设置中开启远程开锁": "请在锁定设置中开启远程解锁", - "接听": "回答", - "截图已保存到相册": "截图保存到相册", - "添加遥控": "添加远程控制", - "已连接到锁,请按遥控": "连接上锁后,请按下遥控器", - "遥控号": "遥控号码", - "遥控详情": "遥控细节", + "系统短信": "系統短信", + "系统邮件": "系統電子郵件", + "模板": "糢闆", + "新建模版": "創建糢闆", + "您好,您的密码是": "您好,您的密碼係", + "密码名字": "密碼名稱", + "请输入6-9位密码": "請輸入6-9位數字嘅密碼", + "设置密码": "設置密碼", + "操作成功,密码为": "成功。密碼為", + "类型:自定义-永久": "類型:定製-永久", + "实时播放": "實時回放", + "点击对讲": "點擊對講", + "长按开锁": "長按解鎖", + "接听失败": "未能回答", + "请在锁设置中开启远程开锁": "請在鎖設置中啟用遠程解鎖", + "接听": "答", + "截图已保存到相册": "屏幕截图保存到相冊", + "添加遥控": "添加遙控器", + "已连接到锁,请按遥控": "連接鎖,請按遙控器", + "遥控号": "遙控號碼", + "遥控详情": "遙控詳情", "照明": "照明", "退出演示模式": "退出演示模式", - "提示:当前界面为展示界面,添加设备后才能继续使用": "提示:当前接口是显示接口。添加设备后,您可以继续使用设备", - "门已上锁": "门是锁着的", - "您的账号在异地登录,如非本人,请尽快修改密码": "您的帐户已用于从新设备登录", - "开门成功": "成功开门", - "开门失败": "没能打开门", - "呼叫提醒": "电话提醒", - "收到来自": "收到", - "锁的呼叫": "锁调用", - "加载数据中": "加载数据", - "搜索所有锁类型": "搜索所有锁类型", - "锁电量更新时间": "锁定电池更新时间", + "提示:当前界面为展示界面,添加设备后才能继续使用": "提示:當前接口為顯示接口。 添加設備後,您可以繼續使用它", + "门已上锁": "門已鎖上", + "您的账号在异地登录,如非本人,请尽快修改密码": "您的帳戶已用于由新設備登錄", + "开门成功": "成功開門", + "开门失败": "無法打開門", + "呼叫提醒": "來電提醒", + "收到来自": "接收自", + "锁的呼叫": "鎖定調用", + "加载数据中": "加載數據", + "搜索所有锁类型": "搜索所有鎖類型", + "锁电量更新时间": "鎖定電池更新時間", "1月": "1月", "2月": "2月", - "3月": "3月", - "4月": "4月", - "5月": "可以", - "6月": "小君", - "7月": "7月", - "8月": "8月", - "9月": "9月", + "3月": "三月", + "4月": "四月", + "5月": "五月", + "6月": "六月", + "7月": "七月", + "8月": "八月", + "9月": "九月", "10月": "10月", "11月": "11月", "12月": "12月", - "热门城市": "炎热的城市", - "导出锁数据": "导出锁数据", - "一键开锁": "一键解锁", - "已开通": "打开", - "英文": "英语", - "简体中文": "简体中文", + "热门城市": "熱門城市", + "导出锁数据": "導出鎖定數據", + "一键开锁": "一鍵解鎖", + "已开通": "打開", + "英文": "英文", + "简体中文": "簡體中文", "繁体中文": "繁體中文", - "法语": "Français", + "法语": "法文", "俄语": "Русский", - "德语": "Deutsch", + "德语": "德文", "日语": "日本語", "韩语": "한국어", "意大利语": "Italiano", "乌克兰语": "Українська", "葡萄牙语": "Português", - "西班牙语": "Español", + "西班牙语": "西班牙人", "阿拉伯语": "العربية", "越南语": "Tiếng Việt", - "马来语": "Bahasa Melayu", - "荷兰语": "Nederlands", - "罗马尼亚语": "Română", + "马来语": "馬來文", + "荷兰语": "荷蘭", + "罗马尼亚语": "羅曼", "立陶宛语": "Lietuvių", - "瑞典语": "Svenska", - "爱沙尼亚语": "Eesti", - "波兰语": "Polski", - "斯洛伐克语": "Slovenčina", + "瑞典语": "斯文斯卡", + "爱沙尼亚语": "埃斯蒂", + "波兰语": "波蘭", + "斯洛伐克语": "斯洛文尼亞", "捷克语": "Čeština", "希腊语": "Ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", - "土耳其语": "Turkce", - "匈牙利语": "Magyar", + "土耳其语": "Türkçe", + "匈牙利语": "匈牙利嘅", "保加利亚语": "Български", "哈萨克斯坦语": "Қазақ", "孟加拉语": "বাংলা", - "克罗地亚语": "Hrvatski", + "克罗地亚语": "赫尔瓦茨基", "泰语": "ไทย", "印度尼西亚语": "Bahasa Indonesia", - "芬兰语": "Suomi", - "丹麦语": "Dansk", - "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,锁上的掌骨静脉会被删除。你确定要重置吗?", - "在线": "在线", - "离线": "离线", - "购买记录": "购买记录", - "使用记录": "用户记录", - "失效时间要大于当前时间": "过期时间必须大于当前时间", - "修改名字": "编辑的名字", - "时": "小时", - "分": "一分钟", - "Amazon Alexa": "亚马逊Alexa", - "您可以使用Alexa进行开锁、闭锁和查看锁状态": "您可以使用Alexa解锁,锁定和检查锁定状态", - "支持的国家": "支持国家", - "支持的国家值": "美国、加拿大、英国、澳大利亚、印度、德国、法国、意大利、西班牙、日本", - "操作流程": "操作过程", - "操作流程值": "1通过智能锁APP添加锁和网关\n\n2在APP中开启该锁的远程开锁功能(默认关闭)。如果你没有这个选项,锁不支持Alexa\n\n3向Alexa添加技能,并使用智能锁APP的账号和密码进行授权。授权成功后,可以发现该帐号下的设备\n\n4在Alexa app中找到需要解锁的锁,打开语音解锁功能,设置语言密码\n\n5锁可通过Alexa操作", - "Google Home": "谷歌的家", - "Action name": "动作名称", - "ScienerSmart": "ScienerSmart", - "支持的语言": "支持的语言", - "英语": "英语", - "Google Home操作流程的值": "1. 通过智能锁APP添加锁和网关\n\n2. 在APP中开启锁的远程开锁功能(默认关闭)。如果没有这个选项,锁不支持谷歌Home\n\n3. 安装谷歌Home APP,点击左上角的“+”按钮\n\n4. 在“设置”页面,选择“使用谷歌”。\n\n5. 搜索“ScienerSmart”,使用智能锁APP账号和密码进行授权", - "密码需至少包含数字/字母/字符中的2种组合": "密码必须包含数字、字母和特殊字符中的至少2种", - "已开锁": "解锁", - "已闭锁": "锁着的", - "两次密码不一致哦": "密码不一致", - "中功率": "媒介权力", - "常规使用": "经常使用", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "待设备上电后,长按复位键5秒,指示灯交替闪烁后,单击“下一步”", - "扫描设备": "扫描设备", - "删除失败,网关可能已经离线,是否强制删除该数据?": "删除失败。网关可能已经脱机。是否要强制删除数据?", - "超级管理员英文": "超级管理员", - "授权管理员英文": "使管理", - "普通管理员英文": "普通用户", - "网关设备英文": "网关设备", - "手机需联网英文": "手机需联网", + "芬兰语": "索米", + "丹麦语": "丹斯克", + "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 你確定要重置啊?", + "在线": "在線", + "离线": "離線", + "购买记录": "購買記錄", + "使用记录": "用戶記錄", + "失效时间要大于当前时间": "過期時間必須長於當前時間", + "修改名字": "編輯名稱", + "时": "小時", + "分": "分鐘", + "Amazon Alexa": "亞馬遜Alexa", + "您可以使用Alexa进行开锁、闭锁和查看锁状态": "你可以使用Alexa解鎖、鎖定和檢查鎖定狀態", + "支持的国家": "支持嘅國家/地區", + "支持的国家值": "美國、加拿大、英國、澳洲、印度、德國、法國、意大利、西班牙、日本", + "操作流程": "操作流程", + "操作流程值": "1使用智能鎖APP添加鎖和網關\n\n2喺APP中開啟鎖嘅遠程解鎖功能(該功能默認關閉)。 如果你冇此選項,則鎖唔撐Alexa\n\n3為Alexa添加技能,並使用Smart lock APP嘅賬號同密碼進行授權。 授權成功之後,你可以發現該賬號下嘅設備\n\n4喺Alexa App中搵到鎖,開啟語音解鎖功能,設置語言密碼\n\n5可以透過Alexa操作鎖", + "Google Home": "穀謌首頁", + "Action name": "操作名稱", + "ScienerSmart": "ScienerSmart智能", + "支持的语言": "支持嘅語言", + "英语": "英文", + "Google Home操作流程的值": "1.使用智能鎖APP添加鎖和網關\n\n2.喺APP中開啟鎖嘅遠程解鎖功能(此功能默認關閉)。 如果冇此選項,鎖唔撐Google Home\n\n3.安裝Google Home APP,點擊左上角嘅“+”按鈕\n\n4.在“設置”頁面上,選擇“與Google合作”\n\n5.搜索“ScienerSmart”,使用智能鎖APP賬號和密碼進行授權", + "密码需至少包含数字/字母/字符中的2种组合": "密碼必須至少包含以下2個:數字、字母同特殊字符", + "已开锁": "解鎖", + "已闭锁": "鎖", + "两次密码不一致哦": "密碼不一緻", + "中功率": "中等功率", + "常规使用": "經常使用", + "扫描设备": "掃描設備", + "删除失败,网关可能已经离线,是否强制删除该数据?": "刪除失敗。 網關可能已脫機。 是否要強制刪除數據?", + "超级管理员英文": "超級管理員", + "授权管理员英文": "設為admin", + "普通管理员英文": "普通用戶", + "网关设备英文": "網關", + "手机需联网英文": "需求網", "年简称": "Y", "月简称": "M", "日简称": "D", "时简称": "H", "分简称": "M", - "跟随系统": "跟踪系统", - "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,锁上的指纹会被删除。你确定要重置吗?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,锁的远程控制将被删除。你想重置它吗?" + "跟随系统": "跟隨系統", + "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置之後,鎖嘅指紋將被刪除。 你確定要重置它啊?", + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?" } \ No newline at end of file From 64d1cd902bda5efd6c4fe32c088f86c103ae68a7 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Tue, 7 Jan 2025 16:43:00 +0800 Subject: [PATCH 11/67] =?UTF-8?q?fix:=20=E9=9A=90=E7=A7=81=E5=90=88?= =?UTF-8?q?=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 6 +++--- .../app/src/main/kotlin/com/skychip/lock/App.kt | 16 ++++++++++++++++ ios/Runner/Info.plist | 6 +++--- ios/Runner/en.lproj/InfoPlist_sky.strings | 6 +++--- ios/Runner/en.lproj/InfoPlist_xhj.strings | 6 +++--- ios/Runner/info_dev.plist | 6 +++--- ios/Runner/info_pre.plist | 6 +++--- ios/Runner/info_sky.plist | 6 +++--- ios/Runner/info_xhj.plist | 6 +++--- ios/Runner/zh-Hans.lproj/InfoPlist.strings | 6 +++--- ios/Runner/zh-Hans.lproj/InfoPlist_sky.strings | 6 +++--- ios/Runner/zh-Hans.lproj/InfoPlist_xhj.strings | 6 +++--- lib/tools/appFirstEnterHandle.dart | 6 ++++-- 13 files changed, 53 insertions(+), 35 deletions(-) create mode 100755 android/app/src/main/kotlin/com/skychip/lock/App.kt diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 9e6d6868..19e5a231 100755 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.skychip.lock"> NSFileProtectionKey NSFileProtectionCompleteUntilFirstUserAuthentication NSLocationAlwaysAndWhenInUseUsageDescription - 应用在前台和后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationAlwaysUsageDescription - 应用在后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationWhenInUseUsageDescription - 应用在前台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSMicrophoneUsageDescription 应用请求麦克风用来通话 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/en.lproj/InfoPlist_sky.strings b/ios/Runner/en.lproj/InfoPlist_sky.strings index f735249c..8002da87 100644 --- a/ios/Runner/en.lproj/InfoPlist_sky.strings +++ b/ios/Runner/en.lproj/InfoPlist_sky.strings @@ -11,8 +11,8 @@ NSBluetoothAlwaysUsageDescription="The app uses bluetooth to find, connect and t NSBluetoothPeripheralUsageDescription="The app uses bluetooth to find, connect and transfer data between different devices"; NSCameraUsageDescription="The application requests the camera to take photos for avatar upload and face authentication"; NSContactsUsageDescription="Access the address book to send electronic keys to contacts in the address book"; -NSLocationAlwaysAndWhenInUseUsageDescription="updated location information when applying in the front and backend"; -NSLocationAlwaysUsageDescription="updated location information when the app is in the background"; -NSLocationWhenInUseUsageDescription="updated location information when the app is in the foreground"; +NSLocationAlwaysAndWhenInUseUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; +NSLocationAlwaysUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; +NSLocationWhenInUseUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; NSMicrophoneUsageDescription="request microphone for calls"; NSPhotoLibraryUsageDescription="request photo album for avatar upload"; diff --git a/ios/Runner/en.lproj/InfoPlist_xhj.strings b/ios/Runner/en.lproj/InfoPlist_xhj.strings index 4dcbac90..e2789b85 100644 --- a/ios/Runner/en.lproj/InfoPlist_xhj.strings +++ b/ios/Runner/en.lproj/InfoPlist_xhj.strings @@ -11,8 +11,8 @@ NSBluetoothAlwaysUsageDescription="The app uses bluetooth to find, connect and t NSBluetoothPeripheralUsageDescription="The app uses bluetooth to find, connect and transfer data between different devices"; NSCameraUsageDescription="The application requests the camera to take photos for avatar upload and face authentication"; NSContactsUsageDescription="Access the address book to send electronic keys to contacts in the address book"; -NSLocationAlwaysAndWhenInUseUsageDescription="updated location information when applying in the front and backend"; -NSLocationAlwaysUsageDescription="updated location information when the app is in the background"; -NSLocationWhenInUseUsageDescription="updated location information when the app is in the foreground"; +NSLocationAlwaysAndWhenInUseUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; +NSLocationAlwaysUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; +NSLocationWhenInUseUsageDescription="We need to access your location information in order to more accurately scan the Bluetooth lock device at your location."; NSMicrophoneUsageDescription="request microphone for calls"; NSPhotoLibraryUsageDescription="request photo album for avatar upload"; diff --git a/ios/Runner/info_dev.plist b/ios/Runner/info_dev.plist index d8ed7c28..b9594e80 100755 --- a/ios/Runner/info_dev.plist +++ b/ios/Runner/info_dev.plist @@ -87,11 +87,11 @@ NSFileProtectionKey NSFileProtectionCompleteUntilFirstUserAuthentication NSLocationAlwaysAndWhenInUseUsageDescription - 应用在前台和后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationAlwaysUsageDescription - 应用在后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationWhenInUseUsageDescription - 应用在前台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSMicrophoneUsageDescription 应用请求麦克风用来通话 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/info_pre.plist b/ios/Runner/info_pre.plist index 9874419b..23ea7388 100755 --- a/ios/Runner/info_pre.plist +++ b/ios/Runner/info_pre.plist @@ -85,11 +85,11 @@ NSContactsUsageDescription Reason we need access to the contact list NSLocationAlwaysAndWhenInUseUsageDescription - 应用在前台和后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationAlwaysUsageDescription - 应用在后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationWhenInUseUsageDescription - 应用在前台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSMicrophoneUsageDescription 应用请求麦克风用来通话 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/info_sky.plist b/ios/Runner/info_sky.plist index 6d6ce72f..89605593 100755 --- a/ios/Runner/info_sky.plist +++ b/ios/Runner/info_sky.plist @@ -85,11 +85,11 @@ NSContactsUsageDescription Reason we need access to the contact list NSLocationAlwaysAndWhenInUseUsageDescription - 应用在前台和后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationAlwaysUsageDescription - 应用在后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationWhenInUseUsageDescription - 应用在前台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSMicrophoneUsageDescription 应用请求麦克风用来通话 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/info_xhj.plist b/ios/Runner/info_xhj.plist index e2b52aaa..f6cc0fca 100755 --- a/ios/Runner/info_xhj.plist +++ b/ios/Runner/info_xhj.plist @@ -87,11 +87,11 @@ NSFileProtectionKey NSFileProtectionCompleteUntilFirstUserAuthentication NSLocationAlwaysAndWhenInUseUsageDescription - 应用在前台和后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationAlwaysUsageDescription - 应用在后台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSLocationWhenInUseUsageDescription - 应用在前台的时候可以搜到更新的位置信息 + 我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备 NSMicrophoneUsageDescription 应用请求麦克风用来通话 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/zh-Hans.lproj/InfoPlist.strings b/ios/Runner/zh-Hans.lproj/InfoPlist.strings index 94277ec2..87cecfb2 100644 --- a/ios/Runner/zh-Hans.lproj/InfoPlist.strings +++ b/ios/Runner/zh-Hans.lproj/InfoPlist.strings @@ -11,8 +11,8 @@ NSBluetoothAlwaysUsageDescription="该应用程序使用蓝牙在不同设备之 NSBluetoothPeripheralUsageDescription="该应用程序使用蓝牙在不同设备之间查找、连接和传输数据"; NSCameraUsageDescription="应用请求相机,以便于拍摄照片,用于头像上传及人脸认证"; NSContactsUsageDescription="应用访问通讯录,用于给通讯录中的联系人发送电子钥匙"; -NSLocationAlwaysAndWhenInUseUsageDescription="应用在前台和后台的时候可以搜到更新的位置信息"; -NSLocationAlwaysUsageDescription="应用在后台的时候可以搜到更新的位置信息"; -NSLocationWhenInUseUsageDescription="应用在前台的时候可以搜到更新的位置信息"; +NSLocationAlwaysAndWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationAlwaysUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; NSMicrophoneUsageDescription="应用请求麦克风用来通话"; NSPhotoLibraryUsageDescription="应用请求相册用于头像上传"; diff --git a/ios/Runner/zh-Hans.lproj/InfoPlist_sky.strings b/ios/Runner/zh-Hans.lproj/InfoPlist_sky.strings index 94277ec2..87cecfb2 100644 --- a/ios/Runner/zh-Hans.lproj/InfoPlist_sky.strings +++ b/ios/Runner/zh-Hans.lproj/InfoPlist_sky.strings @@ -11,8 +11,8 @@ NSBluetoothAlwaysUsageDescription="该应用程序使用蓝牙在不同设备之 NSBluetoothPeripheralUsageDescription="该应用程序使用蓝牙在不同设备之间查找、连接和传输数据"; NSCameraUsageDescription="应用请求相机,以便于拍摄照片,用于头像上传及人脸认证"; NSContactsUsageDescription="应用访问通讯录,用于给通讯录中的联系人发送电子钥匙"; -NSLocationAlwaysAndWhenInUseUsageDescription="应用在前台和后台的时候可以搜到更新的位置信息"; -NSLocationAlwaysUsageDescription="应用在后台的时候可以搜到更新的位置信息"; -NSLocationWhenInUseUsageDescription="应用在前台的时候可以搜到更新的位置信息"; +NSLocationAlwaysAndWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationAlwaysUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; NSMicrophoneUsageDescription="应用请求麦克风用来通话"; NSPhotoLibraryUsageDescription="应用请求相册用于头像上传"; diff --git a/ios/Runner/zh-Hans.lproj/InfoPlist_xhj.strings b/ios/Runner/zh-Hans.lproj/InfoPlist_xhj.strings index 60876642..88c23fde 100644 --- a/ios/Runner/zh-Hans.lproj/InfoPlist_xhj.strings +++ b/ios/Runner/zh-Hans.lproj/InfoPlist_xhj.strings @@ -11,8 +11,8 @@ NSBluetoothAlwaysUsageDescription="该应用程序使用蓝牙在不同设备之 NSBluetoothPeripheralUsageDescription="该应用程序使用蓝牙在不同设备之间查找、连接和传输数据"; NSCameraUsageDescription="应用请求相机,以便于拍摄照片,用于头像上传及人脸认证"; NSContactsUsageDescription="应用访问通讯录,用于给通讯录中的联系人发送电子钥匙"; -NSLocationAlwaysAndWhenInUseUsageDescription="应用在前台和后台的时候可以搜到更新的位置信息"; -NSLocationAlwaysUsageDescription="应用在后台的时候可以搜到更新的位置信息"; -NSLocationWhenInUseUsageDescription="应用在前台的时候可以搜到更新的位置信息"; +NSLocationAlwaysAndWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationAlwaysUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; +NSLocationWhenInUseUsageDescription="我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备"; NSMicrophoneUsageDescription="应用请求麦克风用来通话"; NSPhotoLibraryUsageDescription="应用请求相册用于头像上传"; diff --git a/lib/tools/appFirstEnterHandle.dart b/lib/tools/appFirstEnterHandle.dart index e6d63573..a465063b 100755 --- a/lib/tools/appFirstEnterHandle.dart +++ b/lib/tools/appFirstEnterHandle.dart @@ -103,7 +103,8 @@ class AppFirstEnterHandle { }, ), TextSpan( - text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'.tr + text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。' + .tr .tr), ], ), @@ -173,7 +174,8 @@ class AppFirstEnterHandle { }, ), TextSpan( - text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'.tr + text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。' + .tr .tr), ], ), From 5dd0423c5903f4c1c8ec54b21676663b7ac63d50 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Tue, 7 Jan 2025 16:44:55 +0800 Subject: [PATCH 12/67] =?UTF-8?q?fix:=20=E9=9A=90=E7=A7=81=E5=90=88?= =?UTF-8?q?=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tools/appFirstEnterHandle.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/tools/appFirstEnterHandle.dart b/lib/tools/appFirstEnterHandle.dart index a465063b..f18faea1 100755 --- a/lib/tools/appFirstEnterHandle.dart +++ b/lib/tools/appFirstEnterHandle.dart @@ -104,7 +104,6 @@ class AppFirstEnterHandle { ), TextSpan( text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。' - .tr .tr), ], ), @@ -175,7 +174,6 @@ class AppFirstEnterHandle { ), TextSpan( text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。' - .tr .tr), ], ), From bb1cab3b00b9d540c81242a6af0b280865a4d256 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Tue, 7 Jan 2025 20:03:47 +0800 Subject: [PATCH 13/67] =?UTF-8?q?fix:=20umeng=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=9A=90=E7=A7=81=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tools/appFirstEnterHandle.dart | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/tools/appFirstEnterHandle.dart b/lib/tools/appFirstEnterHandle.dart index a465063b..129a3cdc 100755 --- a/lib/tools/appFirstEnterHandle.dart +++ b/lib/tools/appFirstEnterHandle.dart @@ -23,9 +23,12 @@ class AppFirstEnterHandle { switch (flagStr) { case isAgreePrivacy: // 隐私协议 if (getFlag != isAgreePrivacy) { - await showPrivacyAgreementAlert(); + final bool? isAgree = await showPrivacyAgreementAlert(); + if (isAgree ?? false) { + await privacySDKInitialization(); + } } - await privacySDKInitialization(); + if (Get.isRegistered()) { Get.find().flushedDeviceInfo(); } @@ -51,8 +54,8 @@ class AppFirstEnterHandle { } //隐私协议弹窗 - Future showPrivacyAgreementAlert() async { - await showCupertinoDialog( + Future showPrivacyAgreementAlert() async { + return await showCupertinoDialog( context: Get.context!, builder: (BuildContext context) { return PopScope( @@ -124,7 +127,7 @@ class AppFirstEnterHandle { ), onPressed: () { Storage.setString(isAgreePrivacy, isAgreePrivacy); - Navigator.of(context).pop(); + Navigator.of(context).pop(true); getAppFirstEnter(isShowUpdateVersion); }, ), @@ -195,7 +198,7 @@ class AppFirstEnterHandle { ), onPressed: () { Storage.setString(isAgreePrivacy, isAgreePrivacy); - Navigator.of(context).pop(); + Navigator.of(context).pop(true); getAppFirstEnter(isShowUpdateVersion); }, ), From b7ed39388a2237679594cf24111e9a057ca698da Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 8 Jan 2025 11:08:26 +0800 Subject: [PATCH 14/67] =?UTF-8?q?fix:=20umeng=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=9A=90=E7=A7=81=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 30320b8d..b2227607 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -249,7 +249,7 @@ dependencies: flutter_bugly: ^1.0.2 open_filex: ^4.4.0 - umeng_common_sdk: 1.2.7 + umeng_common_sdk: 1.2.8 dependency_overrides: #强制设置google_maps_flutter_ios 为 2.5.2 From 25e6a906ded1ec9cc87786f9bb8be66216bbbc38 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 8 Jan 2025 11:52:43 +0800 Subject: [PATCH 15/67] =?UTF-8?q?fix:=20google=20play=E4=B8=8D=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E6=B8=85=E5=8D=95=E6=96=87=E4=BB=B6=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=97=E4=B8=BE=E7=94=B3=E8=AF=B7=E7=9B=B8=E5=90=8C=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 19e5a231..5bc305cb 100755 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -8,8 +8,6 @@ - - @@ -58,12 +56,6 @@ - - - - - - Date: Wed, 8 Jan 2025 14:58:58 +0800 Subject: [PATCH 16/67] =?UTF-8?q?fix:=20umeng=20=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/kotlin/com/skychip/lock/App.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/kotlin/com/skychip/lock/App.kt b/android/app/src/main/kotlin/com/skychip/lock/App.kt index 8da595db..fb6c753d 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/App.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/App.kt @@ -8,9 +8,9 @@ class App : FlutterApplication() { override fun onCreate() { super.onCreate() - UMConfigure.setLogEnabled(true); +// UMConfigure.setLogEnabled(true); //友盟预初始化 - UMConfigure.preInit(getApplicationContext(), "671244cf80464b33f6df9648", "Product"); +// UMConfigure.preInit(getApplicationContext(), "671244cf80464b33f6df9648", "Product"); Log.d("MyApplication", "Application has started") } } \ No newline at end of file From d099e81e92aadd3836b614737fab4f0382acd746 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 8 Jan 2025 17:19:07 +0800 Subject: [PATCH 17/67] =?UTF-8?q?fix:=20umeng=20=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 1d9aea6d..baeb56c7 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -304,6 +304,6 @@ dependencies { implementation 'cn.jiguang.sdk.plugin:vivo:5.2.3' // Umeng统计 - implementation 'com.umeng.umsdk:common:9.3.7' - implementation 'com.umeng.umsdk:asms:1.4.1' + implementation 'com.umeng.umsdk:common:9.7.9' + implementation 'com.umeng.umsdk:asms:1.8.5' } From f21e49ae68c40e156d3725ca22562e3fcf62ef16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Wed, 8 Jan 2025 18:03:30 +0800 Subject: [PATCH 18/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8Dwifi?= =?UTF-8?q?=E9=94=81=E3=80=81=E7=BD=91=E5=85=B3=E9=85=8D=E7=BD=91=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E7=9A=84gatewayJson=E9=95=BF=E5=BA=A61=E5=AD=97?= =?UTF-8?q?=E8=8A=82=E6=94=B9=E4=B8=BA2=E5=AD=97=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/blue/io_gateway/io_gateway_configuringWifi.dart | 9 ++++++++- lib/main_local.dart | 2 +- pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/blue/io_gateway/io_gateway_configuringWifi.dart b/lib/blue/io_gateway/io_gateway_configuringWifi.dart index 9708c6bf..7d6a5ede 100644 --- a/lib/blue/io_gateway/io_gateway_configuringWifi.dart +++ b/lib/blue/io_gateway/io_gateway_configuringWifi.dart @@ -1,6 +1,8 @@ // 网关配网 import 'dart:convert'; +import 'package:star_lock/app_settings/app_settings.dart'; + import '../io_reply.dart'; import '../io_sender.dart'; import '../io_tool/io_tool.dart'; @@ -47,7 +49,12 @@ class GatewayConfiguringWifiCommand extends SenderProtocol { //gatewayConfigurationStr final int clientIdLength = utf8.encode(gatewayConfigurationStr!).length; - subData.add(clientIdLength); + final double clientIdLengthDouble = clientIdLength / 256; + final int clientIdLengthDoubleType1 = clientIdLengthDouble.toInt(); + final int clientIdLengthDoubleType2 = clientIdLength % 256; + // AppLog.log('gatewayConfigurationStr!:$gatewayConfigurationStr! clientIdLength:$clientIdLength clientIdLengthDouble:$clientIdLengthDouble clientIdLengthDoubleType1:$clientIdLengthDoubleType1 clientIdLengthDoubleType2:$clientIdLengthDoubleType2'); + data.add(clientIdLengthDoubleType1); + data.add(clientIdLengthDoubleType2); subData.addAll(utf8.encode(gatewayConfigurationStr!)); // subData = getFixedLengthList(subData, 20 - clientIdLength); diff --git a/lib/main_local.dart b/lib/main_local.dart index ca85c5fa..f56b6d65 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.sky_pre; + F.appFlavor = Flavor.xhj_pre; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/pubspec.yaml b/pubspec.yaml index 30320b8d..ab615ff5 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -104,7 +104,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.85+2024120301:完善网关功能 # 1.0.85+2024120401:修复网关问题,打包给谢敬调试 -version: 1.0.85+2024123102 +version: 1.0.85+2025010801 environment: sdk: '>=2.12.0 <3.0.0' From cf5f23619dae62907da1ad8e816635742952e19c Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 8 Jan 2025 18:04:25 +0800 Subject: [PATCH 19/67] =?UTF-8?q?fix:=20umeng=20=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/skychip/lock/MainActivity.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt index 741b150f..c788ca3c 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt @@ -20,9 +20,12 @@ class MainActivity : FlutterActivity() { GeneratedPluginRegistrant.registerWith(flutterEngine!!) // 初始化 Umeng SDK - UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null) +// UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null) - MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result -> + MethodChannel( + flutterEngine?.dartExecutor!!.binaryMessenger, + "starLockFlutterSend" + ).setMethodCallHandler { call, result -> if (call.method == "loadNativeShare") { val map = call.arguments as Map val shareText = map["shareText"] @@ -32,7 +35,7 @@ class MainActivity : FlutterActivity() { } else { shareText(shareText, "分享") } - } else if (call.method == "sendGetBlueStatus") { + } else if (call.method == "sendGetBlueStatus") { // 蓝牙是否开启 // println("收到原生的信息了 methodmethodmethod: ${call.method}") val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() @@ -50,7 +53,10 @@ class MainActivity : FlutterActivity() { status = "-1" } val flutterEngine: FlutterEngine? = this.flutterEngine // 获取你的 FlutterEngine 实例 - MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterReceive").invokeMethod("getBlueStatus", status) + MethodChannel( + flutterEngine?.dartExecutor!!.binaryMessenger, + "starLockFlutterReceive" + ).invokeMethod("getBlueStatus", status) } else { result.notImplemented() // 没有实现的方法 } @@ -96,7 +102,10 @@ class MainActivity : FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine) - MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result -> + MethodChannel( + flutterEngine.dartExecutor.binaryMessenger, + "starLockFlutterSend" + ).setMethodCallHandler { call, result -> if (call.method == "loadNativeShare") { val map = call.arguments as Map val shareText = map["shareText"] From d2f54efded78c85088a7c239732ee0d4129321c7 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 8 Jan 2025 18:17:07 +0800 Subject: [PATCH 20/67] =?UTF-8?q?fix:=20umeng=20=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=90=88=E8=A7=84=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner/AppDelegate.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Runner/AppDelegate.m b/ios/Runner/AppDelegate.m index 4b399780..f4187699 100755 --- a/ios/Runner/AppDelegate.m +++ b/ios/Runner/AppDelegate.m @@ -19,7 +19,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [UMConfigure initWithAppkey:@"671244ae80464b33f6df9646" channel:@"Product"]; +// [UMConfigure initWithAppkey:@"671244ae80464b33f6df9646" channel:@"Product"]; XSFlutterManager *VC = [[XSFlutterManager alloc] init]; self.window.rootViewController = VC; From a61ebda710901ce7e61a92d5a9b4fbaeefe0048d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Wed, 8 Jan 2025 19:35:42 +0800 Subject: [PATCH 21/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8Dwifi?= =?UTF-8?q?=E9=94=81=E3=80=81=E7=BD=91=E5=85=B3=E9=85=8D=E7=BD=91=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E7=9A=84gatewayJson=E9=95=BF=E5=BA=A61=E5=AD=97?= =?UTF-8?q?=E8=8A=82=E6=94=B9=E4=B8=BA2=E5=AD=97=E8=8A=82bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/blue/io_gateway/io_gateway_configuringWifi.dart | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/blue/io_gateway/io_gateway_configuringWifi.dart b/lib/blue/io_gateway/io_gateway_configuringWifi.dart index 7d6a5ede..769f2079 100644 --- a/lib/blue/io_gateway/io_gateway_configuringWifi.dart +++ b/lib/blue/io_gateway/io_gateway_configuringWifi.dart @@ -53,8 +53,8 @@ class GatewayConfiguringWifiCommand extends SenderProtocol { final int clientIdLengthDoubleType1 = clientIdLengthDouble.toInt(); final int clientIdLengthDoubleType2 = clientIdLength % 256; // AppLog.log('gatewayConfigurationStr!:$gatewayConfigurationStr! clientIdLength:$clientIdLength clientIdLengthDouble:$clientIdLengthDouble clientIdLengthDoubleType1:$clientIdLengthDoubleType1 clientIdLengthDoubleType2:$clientIdLengthDoubleType2'); - data.add(clientIdLengthDoubleType1); - data.add(clientIdLengthDoubleType2); + subData.add(clientIdLengthDoubleType1); + subData.add(clientIdLengthDoubleType2); subData.addAll(utf8.encode(gatewayConfigurationStr!)); // subData = getFixedLengthList(subData, 20 - clientIdLength); diff --git a/pubspec.yaml b/pubspec.yaml index f9f08476..527ac7dd 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -104,7 +104,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.85+2024120301:完善网关功能 # 1.0.85+2024120401:修复网关问题,打包给谢敬调试 -version: 1.0.85+2025010801 +version: 1.0.85+2025010802 environment: sdk: '>=2.12.0 <3.0.0' From 851afc36d92053d4ee37cea42c49ef028b212c95 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 9 Jan 2025 08:58:34 +0800 Subject: [PATCH 22/67] =?UTF-8?q?fix:=20sky=E7=99=BB=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2logo=E5=9B=BE=E6=A0=87=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/icon_main_sky_1024.png | Bin 218955 -> 45849 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/icon_main_sky_1024.png b/images/icon_main_sky_1024.png index 1401d39216f3a17c6f0acbb9b1ce4824506b70a9..d03e73fac9e5cacad32477bddc35017d64069621 100644 GIT binary patch literal 45849 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 literal 218955 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 yscu8u`Yp=x(dsXxC$^HfUvw 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⁡I-)YXT}3 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 Date: Thu, 9 Jan 2025 19:35:02 +0800 Subject: [PATCH 23/67] =?UTF-8?q?fix:=20umeng=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/kotlin/com/skychip/lock/App.kt | 2 +- ios/Runner/AppDelegate.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/kotlin/com/skychip/lock/App.kt b/android/app/src/main/kotlin/com/skychip/lock/App.kt index fb6c753d..8d709523 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/App.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/App.kt @@ -2,7 +2,7 @@ package com.skychip.lock import io.flutter.app.FlutterApplication import android.util.Log -import com.umeng.commonsdk.UMConfigure; +//import com.umeng.commonsdk.UMConfigure; class App : FlutterApplication() { diff --git a/ios/Runner/AppDelegate.m b/ios/Runner/AppDelegate.m index 4b399780..c6d3389b 100755 --- a/ios/Runner/AppDelegate.m +++ b/ios/Runner/AppDelegate.m @@ -5,7 +5,7 @@ #import "XSFlutterManager.h" #import -#import +// #import @interface AppDelegate() @@ -19,7 +19,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [UMConfigure initWithAppkey:@"671244ae80464b33f6df9646" channel:@"Product"]; +// [UMConfigure initWithAppkey:@"671244ae80464b33f6df9646" channel:@"Product"]; XSFlutterManager *VC = [[XSFlutterManager alloc] init]; self.window.rootViewController = VC; From 26310031af6135b2136f83853a6a02a4e1499351 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 10 Jan 2025 14:39:47 +0800 Subject: [PATCH 24/67] =?UTF-8?q?fix:=20umeng=E5=92=8Cfirebase=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=8E=A5=E5=85=A5=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/apm/apm_helper.dart | 46 ++++++++++++++++++ lib/apm/firebase/firebase_helper.dart | 23 +++++++++ lib/apm/umeng/umeng_helper.dart | 30 ++++++++++++ lib/flavors.dart | 70 +++++++++++++++++++++++++++ lib/main.dart | 6 +-- pubspec.yaml | 9 +++- 6 files changed, 178 insertions(+), 6 deletions(-) create mode 100644 lib/apm/apm_helper.dart create mode 100644 lib/apm/firebase/firebase_helper.dart create mode 100644 lib/apm/umeng/umeng_helper.dart diff --git a/lib/apm/apm_helper.dart b/lib/apm/apm_helper.dart new file mode 100644 index 00000000..a52a8b56 --- /dev/null +++ b/lib/apm/apm_helper.dart @@ -0,0 +1,46 @@ +// +import 'firebase/firebase_helper.dart'; + +// +// +import 'umeng/umeng_helper.dart'; +// + +class ApmHelper { + ApmHelper._internal(); + + factory ApmHelper() => _getInstance(); + + static ApmHelper get instance => _getInstance(); + static ApmHelper? _instance; + + // 增加开关 + static bool enabled = false; + + static ApmHelper _getInstance() { + _instance ??= ApmHelper._internal(); + return _instance!; + } + + Future initSdk() async { + // + UmengHelper.instance.initSdk(); + // + // + FirebaseHelper.instance.initSdk(); + // + } + + Future trackEvent(String eventName, + {String? title, + String? screenName, + String? elementContent, + String? operation}) async { + // + UmengHelper.instance.trackEvent(eventName); + // + // + FirebaseHelper.instance.trackEvent(eventName); + // + } +} diff --git a/lib/apm/firebase/firebase_helper.dart b/lib/apm/firebase/firebase_helper.dart new file mode 100644 index 00000000..bd98c650 --- /dev/null +++ b/lib/apm/firebase/firebase_helper.dart @@ -0,0 +1,23 @@ +// +class FirebaseHelper { + FirebaseHelper._internal(); + + factory FirebaseHelper() => _getInstance(); + + static FirebaseHelper get instance => _getInstance(); + static FirebaseHelper? _instance; + + static FirebaseHelper _getInstance() { + _instance ??= FirebaseHelper._internal(); + return _instance!; + } + + Future initSdk() async {} + + Future trackEvent(String eventName, + {String? title, + String? screenName, + String? elementContent, + String? operation}) async {} +} +// diff --git a/lib/apm/umeng/umeng_helper.dart b/lib/apm/umeng/umeng_helper.dart new file mode 100644 index 00000000..b32c81f6 --- /dev/null +++ b/lib/apm/umeng/umeng_helper.dart @@ -0,0 +1,30 @@ +// +import 'package:umeng_common_sdk/umeng_common_sdk.dart'; +import '../../flavors.dart'; + +class UmengHelper { + UmengHelper._internal(); + + factory UmengHelper() => _getInstance(); + + static UmengHelper get instance => _getInstance(); + static UmengHelper? _instance; + + static UmengHelper _getInstance() { + _instance ??= UmengHelper._internal(); + return _instance!; + } + + Future initSdk() async { + UmengCommonSdk.initCommon( + F.umengKey.androidKey, F.umengKey.iosKey, F.umengKey.channel); + UmengCommonSdk.setPageCollectionModeManual(); + } + + Future trackEvent(String eventName, + {String? title, + String? screenName, + String? elementContent, + String? operation}) async {} +} +// diff --git a/lib/flavors.dart b/lib/flavors.dart index 5123fbfa..1ba07b5c 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -22,6 +22,20 @@ class StarLockAMapKey { const StarLockAMapKey({required this.iosKey, required this.androidKey}); } +class UmengKey { + //iOS平台的key + final String iosKey; + + //Android平台的key + final String androidKey; + + //channle + final String channel; + + const UmengKey( + {required this.iosKey, required this.androidKey, required this.channel}); +} + typedef dynamic fCallFunction(); class F { @@ -180,6 +194,62 @@ class F { } } + // StarLockAMapKey + static UmengKey get umengKey { + switch (appFlavor) { + case Flavor.local: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.dev: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.pre: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.sky_dev: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.sky_pre: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.sky: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.xhj_dev: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.xhj_pre: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + case Flavor.xhj: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + default: + return const UmengKey( + androidKey: '671244cf80464b33f6df9648', + iosKey: '671244ae80464b33f6df9646', + channel: 'Product'); + } + } + // 是否是生产环境 static bool get isProductionEnv { switch (appFlavor) { diff --git a/lib/main.dart b/lib/main.dart index c5f0db2a..21d3255d 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,6 +19,7 @@ import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/translations/trans_lib.dart'; import 'package:umeng_common_sdk/umeng_common_sdk.dart'; +import 'apm/apm_helper.dart'; import 'app.dart'; import 'app_settings/app_settings.dart'; import 'tools/store_service.dart'; @@ -74,10 +75,7 @@ Future _setCommonServices() async { //关于隐私协议的初始化 Future privacySDKInitialization() async { - UmengCommonSdk.initCommon( - '671244cf80464b33f6df9648', '671244ae80464b33f6df9646', 'Product'); - UmengCommonSdk.setPageCollectionModeManual(); - + ApmHelper.instance.initSdk(); await Get.putAsync(() => PlatformInfoService().init()); await BuglyTool.init(); // 初始化JPush服务 diff --git a/pubspec.yaml b/pubspec.yaml index b2227607..e45ba6ab 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -236,7 +236,7 @@ dependencies: timelines: ^0.1.0 #侧滑删除 flutter_slidable: ^3.0.1 -# audio_service: ^0.18.12 + # audio_service: ^0.18.12 app_settings: ^5.1.1 flutter_local_notifications: ^17.0.0 fluwx: 4.5.5 @@ -245,11 +245,16 @@ dependencies: colorfilter_generator: ^0.0.8 file_picker: ^5.3.1 # 错误日志监控 -# flutter_bugly_plugin: ^0.0.9 + # flutter_bugly_plugin: ^0.0.9 flutter_bugly: ^1.0.2 open_filex: ^4.4.0 + # umeng_common_sdk: 1.2.8 + # + # + firebase_analytics: 11.3.0 + # dependency_overrides: #强制设置google_maps_flutter_ios 为 2.5.2 From b908abd89d5f08446f22d927e2e0997a844f99f7 Mon Sep 17 00:00:00 2001 From: ci_bot Date: Fri, 10 Jan 2025 14:57:26 +0800 Subject: [PATCH 25/67] =?UTF-8?q?other:=20=E5=88=9D=E5=A7=8B=E5=8C=96fireb?= =?UTF-8?q?ase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 3 ++ android/app/google-services.json | 6 +-- firebase.json | 1 + ios/Runner.xcodeproj/project.pbxproj | 4 ++ ios/Runner/GoogleService-Info.plist | 30 ++++++++++++ lib/firebase_options.dart | 68 ++++++++++++++++++++++++++++ 6 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 firebase.json create mode 100644 ios/Runner/GoogleService-Info.plist create mode 100644 lib/firebase_options.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index baeb56c7..60965d82 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -23,6 +23,9 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +// START: FlutterFire Configuration +apply plugin: 'com.google.gms.google-services' +// END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.android.application' diff --git a/android/app/google-services.json b/android/app/google-services.json index cbcbc271..c2bc204a 100755 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -2,14 +2,14 @@ "project_info": { "project_number": "281500445726", "project_id": "skychip2023-ecdff", - "storage_bucket": "skychip2023-ecdff.appspot.com" + "storage_bucket": "skychip2023-ecdff.firebasestorage.app" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d20f", + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4d20f", "android_client_info": { - "package_name": "com.skychip.lock" + "package_name": "com.starlock.lock.local" } }, "oauth_client": [], diff --git a/firebase.json b/firebase.json new file mode 100644 index 00000000..30b98ac5 --- /dev/null +++ b/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"skychip2023-ecdff","appId":"1:281500445726:android:468195b9cc68dd6cc4d20f","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"skychip2023-ecdff","appId":"1:281500445726:ios:b194ccffb92fb86cc4d20f","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"skychip2023-ecdff","configurations":{"android":"1:281500445726:android:468195b9cc68dd6cc4d20f","ios":"1:281500445726:ios:b194ccffb92fb86cc4d20f"}}}}}} \ No newline at end of file diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 238827f8..e8ebeb01 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -80,6 +80,7 @@ E0B3E9EF2D04B36D00907A95 /* info_pre.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B3E9EB2D04B36C00907A95 /* info_pre.plist */; }; E0B3E9F02D04B36D00907A95 /* info_dev.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B3E9EC2D04B36C00907A95 /* info_dev.plist */; }; E2FF5D00DFF6E2BF9DA36649 /* devLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D627D69970E6DA2D33F770E3 /* devLaunchScreen.storyboard */; }; + E80F3DA84683DCDC3B037333 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */; }; EE0A7A61CF36BC83ACA6EE3E /* xhjProfile.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = DC2FBF181C8D9880E24845E6 /* xhjProfile.xcconfig */; }; F0A7A6EF7D83CA92324D9C20 /* preDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 383F65C3166F78B1A1470A4E /* preDebug.xcconfig */; }; F3C801D06AA86FB3BB32A1DA /* skyLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */; }; @@ -191,6 +192,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = skyLaunchScreen.storyboard; path = Runner/skyLaunchScreen.storyboard; sourceTree = ""; }; 9AA145F8B894E5E4F14249DB /* devProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devProfile.xcconfig; path = Flutter/devProfile.xcconfig; sourceTree = ""; }; + A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; A728CF82D2CACE8B399AACAB /* Pods-Runner.debug-pre-xhj.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-pre-xhj.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-pre-xhj.xcconfig"; sourceTree = ""; }; B7AA7A6DD927B38E32E2C889 /* preProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = preProfile.xcconfig; path = Flutter/preProfile.xcconfig; sourceTree = ""; }; CA9024705F732C9C000EA53E /* xhjRelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = xhjRelease.xcconfig; path = Flutter/xhjRelease.xcconfig; sourceTree = ""; }; @@ -336,6 +338,7 @@ 7EA577AFEEE10224BA96C569 /* preLaunchScreen.storyboard */, 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */, 6A6F5C86239927252C06A16A /* xhjLaunchScreen.storyboard */, + A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -533,6 +536,7 @@ 99FEBCD8A8244C3EE22C5A18 /* preLaunchScreen.storyboard in Resources */, F3C801D06AA86FB3BB32A1DA /* skyLaunchScreen.storyboard in Resources */, 370C09E26790814FD1F6465F /* xhjLaunchScreen.storyboard in Resources */, + E80F3DA84683DCDC3B037333 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..fe8f4a0e --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc + GCM_SENDER_ID + 281500445726 + PLIST_VERSION + 1 + BUNDLE_ID + com.starlock.lock.local + PROJECT_ID + skychip2023-ecdff + STORAGE_BUCKET + skychip2023-ecdff.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:281500445726:ios:b194ccffb92fb86cc4d20f + + \ No newline at end of file diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 00000000..31ebab23 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,68 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g', + appId: '1:281500445726:android:468195b9cc68dd6cc4d20f', + messagingSenderId: '281500445726', + projectId: 'skychip2023-ecdff', + storageBucket: 'skychip2023-ecdff.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc', + appId: '1:281500445726:ios:b194ccffb92fb86cc4d20f', + messagingSenderId: '281500445726', + projectId: 'skychip2023-ecdff', + storageBucket: 'skychip2023-ecdff.firebasestorage.app', + iosBundleId: 'com.starlock.lock.local', + ); +} From 3bccec750b2989e90afc9eae5ffa98098e4c6da4 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 10 Jan 2025 19:19:17 +0800 Subject: [PATCH 26/67] =?UTF-8?q?feat=EF=BC=9Afirebase=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=92=8C=E4=BA=8B=E4=BB=B6=E4=B8=8A=E6=8A=A5=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/sky/google-services.json | 48 +++ ios/Runner.xcodeproj/project.pbxproj | 4 - ios/Runner/GoogleService-Info.plist | 30 -- lib/apm/apm_helper.dart | 39 ++- lib/apm/firebase/firebase_helper.dart | 70 ++++- lib/apm/umeng/umeng_helper.dart | 21 +- lib/firebase_options.dart | 68 ---- .../starLock_forgetPassword_logic.dart | 6 +- lib/login/login/entity/LoginData.dart | 1 + lib/login/login/starLock_login_logic.dart | 6 +- .../register/starLock_register_logic.dart | 31 +- lib/main.dart | 2 +- .../authorizedAdmin_logic.dart | 11 +- .../card/addICCard/addICCard_logic.dart | 293 ++++++++++-------- .../doorLockLog/doorLockLog_logic.dart | 12 +- .../view/sendElectronicKeyView_logic.dart | 6 +- .../addFingerprint/addFingerprint_logic.dart | 11 +- .../lockDetail/lockDetail_logic.dart | 8 +- .../lockSet/lockSet/lockSet_logic.dart | 15 +- .../passwordKey_perpetual_logic.dart | 10 +- lib/mine/addLock/saveLock/saveLock_logic.dart | 6 +- lib/mine/mineSet/mineSet/mineSet_logic.dart | 6 +- lib/tools/storage.dart | 3 + 23 files changed, 386 insertions(+), 321 deletions(-) create mode 100644 android/app/src/sky/google-services.json delete mode 100644 ios/Runner/GoogleService-Info.plist delete mode 100644 lib/firebase_options.dart diff --git a/android/app/src/sky/google-services.json b/android/app/src/sky/google-services.json new file mode 100644 index 00000000..a712cf64 --- /dev/null +++ b/android/app/src/sky/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "281500445726", + "project_id": "skychip2023-ecdff", + "storage_bucket": "skychip2023-ecdff.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d20f", + "android_client_info": { + "package_name": "com.skychip.lock" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4d20f", + "android_client_info": { + "package_name": "com.starlock.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index e8ebeb01..238827f8 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -80,7 +80,6 @@ E0B3E9EF2D04B36D00907A95 /* info_pre.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B3E9EB2D04B36C00907A95 /* info_pre.plist */; }; E0B3E9F02D04B36D00907A95 /* info_dev.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B3E9EC2D04B36C00907A95 /* info_dev.plist */; }; E2FF5D00DFF6E2BF9DA36649 /* devLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D627D69970E6DA2D33F770E3 /* devLaunchScreen.storyboard */; }; - E80F3DA84683DCDC3B037333 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */; }; EE0A7A61CF36BC83ACA6EE3E /* xhjProfile.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = DC2FBF181C8D9880E24845E6 /* xhjProfile.xcconfig */; }; F0A7A6EF7D83CA92324D9C20 /* preDebug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 383F65C3166F78B1A1470A4E /* preDebug.xcconfig */; }; F3C801D06AA86FB3BB32A1DA /* skyLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */; }; @@ -192,7 +191,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = skyLaunchScreen.storyboard; path = Runner/skyLaunchScreen.storyboard; sourceTree = ""; }; 9AA145F8B894E5E4F14249DB /* devProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devProfile.xcconfig; path = Flutter/devProfile.xcconfig; sourceTree = ""; }; - A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; A728CF82D2CACE8B399AACAB /* Pods-Runner.debug-pre-xhj.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-pre-xhj.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-pre-xhj.xcconfig"; sourceTree = ""; }; B7AA7A6DD927B38E32E2C889 /* preProfile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = preProfile.xcconfig; path = Flutter/preProfile.xcconfig; sourceTree = ""; }; CA9024705F732C9C000EA53E /* xhjRelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = xhjRelease.xcconfig; path = Flutter/xhjRelease.xcconfig; sourceTree = ""; }; @@ -338,7 +336,6 @@ 7EA577AFEEE10224BA96C569 /* preLaunchScreen.storyboard */, 9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */, 6A6F5C86239927252C06A16A /* xhjLaunchScreen.storyboard */, - A4AD0C691210DA25B27DE592 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -536,7 +533,6 @@ 99FEBCD8A8244C3EE22C5A18 /* preLaunchScreen.storyboard in Resources */, F3C801D06AA86FB3BB32A1DA /* skyLaunchScreen.storyboard in Resources */, 370C09E26790814FD1F6465F /* xhjLaunchScreen.storyboard in Resources */, - E80F3DA84683DCDC3B037333 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index fe8f4a0e..00000000 --- a/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - API_KEY - AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc - GCM_SENDER_ID - 281500445726 - PLIST_VERSION - 1 - BUNDLE_ID - com.starlock.lock.local - PROJECT_ID - skychip2023-ecdff - STORAGE_BUCKET - skychip2023-ecdff.firebasestorage.app - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:281500445726:ios:b194ccffb92fb86cc4d20f - - \ No newline at end of file diff --git a/lib/apm/apm_helper.dart b/lib/apm/apm_helper.dart index a52a8b56..928b940f 100644 --- a/lib/apm/apm_helper.dart +++ b/lib/apm/apm_helper.dart @@ -2,6 +2,7 @@ import 'firebase/firebase_helper.dart'; // + // import 'umeng/umeng_helper.dart'; // @@ -22,6 +23,15 @@ class ApmHelper { return _instance!; } + Future initApp() async { + // + await UmengHelper.instance.initApp(); + // + // + await FirebaseHelper.instance.initApp(); + // + } + Future initSdk() async { // UmengHelper.instance.initSdk(); @@ -31,16 +41,31 @@ class ApmHelper { // } - Future trackEvent(String eventName, - {String? title, - String? screenName, - String? elementContent, - String? operation}) async { + Future login(String userId) async { // - UmengHelper.instance.trackEvent(eventName); + UmengHelper.instance.login(userId); // // - FirebaseHelper.instance.trackEvent(eventName); + FirebaseHelper.instance.login(userId); + // + } + + Future trackEvent( + String eventName, Map parameters) async { + // + UmengHelper.instance.trackEvent(eventName, parameters); + // + // + FirebaseHelper.instance.trackEvent(eventName, parameters); + // + } + + Future logout() async { + // + UmengHelper.instance.logout(); + // + // + FirebaseHelper.instance.logout(); // } } diff --git a/lib/apm/firebase/firebase_helper.dart b/lib/apm/firebase/firebase_helper.dart index bd98c650..98188c1c 100644 --- a/lib/apm/firebase/firebase_helper.dart +++ b/lib/apm/firebase/firebase_helper.dart @@ -1,9 +1,47 @@ // -class FirebaseHelper { - FirebaseHelper._internal(); +import 'package:firebase_analytics/firebase_analytics.dart'; +import 'package:firebase_core/firebase_core.dart' + show Firebase, FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g', + appId: '1:281500445726:android:ddf52ac7b7f83cf5c4d20f', + messagingSenderId: '281500445726', + projectId: 'skychip2023-ecdff', + storageBucket: 'skychip2023-ecdff.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc', + appId: '1:281500445726:ios:b194ccffb92fb86cc4d20f', + messagingSenderId: '281500445726', + projectId: 'skychip2023-ecdff', + storageBucket: 'skychip2023-ecdff.firebasestorage.app', + iosBundleId: 'com.starlock.lock.local', + ); +} + +class FirebaseHelper { factory FirebaseHelper() => _getInstance(); + FirebaseHelper._internal(); + static FirebaseHelper get instance => _getInstance(); static FirebaseHelper? _instance; @@ -12,12 +50,28 @@ class FirebaseHelper { return _instance!; } - Future initSdk() async {} + Future initApp() async { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + } - Future trackEvent(String eventName, - {String? title, - String? screenName, - String? elementContent, - String? operation}) async {} + Future initSdk() async { + FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true); + } + + Future login(String userId) async { + FirebaseAnalytics.instance.setUserId(id: userId); + } + + Future trackEvent( + String eventName, Map? parameters) async { + FirebaseAnalytics.instance + .logEvent(name: eventName, parameters: parameters); + } + + Future logout() async { + FirebaseAnalytics.instance.setUserId(id: ''); + } } // diff --git a/lib/apm/umeng/umeng_helper.dart b/lib/apm/umeng/umeng_helper.dart index b32c81f6..bc1e3c04 100644 --- a/lib/apm/umeng/umeng_helper.dart +++ b/lib/apm/umeng/umeng_helper.dart @@ -15,16 +15,27 @@ class UmengHelper { return _instance!; } + Future initApp() async { + + } + Future initSdk() async { UmengCommonSdk.initCommon( F.umengKey.androidKey, F.umengKey.iosKey, F.umengKey.channel); UmengCommonSdk.setPageCollectionModeManual(); } - Future trackEvent(String eventName, - {String? title, - String? screenName, - String? elementContent, - String? operation}) async {} + Future login(String userId) async { + UmengCommonSdk.onProfileSignIn(userId); + } + + Future trackEvent( + String eventName, Map parameters) async { + UmengCommonSdk.onEvent(eventName, parameters); + } + + Future logout() async { + UmengCommonSdk.onProfileSignOff(); + } } // diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart deleted file mode 100644 index 31ebab23..00000000 --- a/lib/firebase_options.dart +++ /dev/null @@ -1,68 +0,0 @@ -// File generated by FlutterFire CLI. -// ignore_for_file: type=lint -import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; -import 'package:flutter/foundation.dart' - show defaultTargetPlatform, kIsWeb, TargetPlatform; - -/// Default [FirebaseOptions] for use with your Firebase apps. -/// -/// Example: -/// ```dart -/// import 'firebase_options.dart'; -/// // ... -/// await Firebase.initializeApp( -/// options: DefaultFirebaseOptions.currentPlatform, -/// ); -/// ``` -class DefaultFirebaseOptions { - static FirebaseOptions get currentPlatform { - if (kIsWeb) { - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for web - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - } - switch (defaultTargetPlatform) { - case TargetPlatform.android: - return android; - case TargetPlatform.iOS: - return ios; - case TargetPlatform.macOS: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for macos - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - case TargetPlatform.windows: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for windows - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - case TargetPlatform.linux: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for linux - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - default: - throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.', - ); - } - } - - static const FirebaseOptions android = FirebaseOptions( - apiKey: 'AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g', - appId: '1:281500445726:android:468195b9cc68dd6cc4d20f', - messagingSenderId: '281500445726', - projectId: 'skychip2023-ecdff', - storageBucket: 'skychip2023-ecdff.firebasestorage.app', - ); - - static const FirebaseOptions ios = FirebaseOptions( - apiKey: 'AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc', - appId: '1:281500445726:ios:b194ccffb92fb86cc4d20f', - messagingSenderId: '281500445726', - projectId: 'skychip2023-ecdff', - storageBucket: 'skychip2023-ecdff.firebasestorage.app', - iosBundleId: 'com.starlock.lock.local', - ); -} diff --git a/lib/login/forgetPassword/starLock_forgetPassword_logic.dart b/lib/login/forgetPassword/starLock_forgetPassword_logic.dart index 3566ba34..7036c80c 100755 --- a/lib/login/forgetPassword/starLock_forgetPassword_logic.dart +++ b/lib/login/forgetPassword/starLock_forgetPassword_logic.dart @@ -2,11 +2,11 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_state.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../network/api_repository.dart'; import '../../tools/baseGetXController.dart'; @@ -55,7 +55,7 @@ class StarLockForgetPasswordLogic extends BaseGetXController { 'B748F838-94EE-4BDB-A0E6-7B2D16849792', state.verificationCode.value); if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('resetPassword_result', { + ApmHelper.instance.trackEvent('resetPassword_result', { 'account':state.phoneStr.value, 'date':DateTool().getNowDateWithType(1), 'resetPassword_res':'成功', @@ -64,7 +64,7 @@ class StarLockForgetPasswordLogic extends BaseGetXController { showToast('重置成功'.tr); Get.back(); }else{ - UmengCommonSdk.onEvent('resetPassword_result', { + ApmHelper.instance.trackEvent('resetPassword_result', { 'account':state.phoneStr.value, 'date':DateTool().getNowDateWithType(1), 'resetPassword_res':'${entity.errorCode}--${entity.errorMsg}', diff --git a/lib/login/login/entity/LoginData.dart b/lib/login/login/entity/LoginData.dart index 921be345..f6a4620c 100755 --- a/lib/login/login/entity/LoginData.dart +++ b/lib/login/login/entity/LoginData.dart @@ -25,6 +25,7 @@ class LoginData { uid = json['uid']; isVip = json['isVip']; } + String? accessToken; int? userid; int? expiresAt; diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart index c7e64334..2bfdddf6 100755 --- a/lib/login/login/starLock_login_logic.dart +++ b/lib/login/login/starLock_login_logic.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/blue/blue_manage.dart'; @@ -7,7 +8,6 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/mine/mine/starLockMine_state.dart'; import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../main/lockMian/lockMain/lockMain_logic.dart'; import '../../mine/mine/starLockMine_logic.dart'; @@ -50,7 +50,7 @@ class StarLockLoginLogic extends BaseGetXController { username: state.emailOrPhone.value, deviceInfo: state.deviceInfoMap); if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('login_result', { + ApmHelper.instance.trackEvent('login_result', { 'account': state.emailOrPhone.value, 'date': DateTool().getNowDateWithType(1), 'login_res': '成功', @@ -65,7 +65,7 @@ class StarLockLoginLogic extends BaseGetXController { Get.offNamedUntil(Routers.starLockMain, (Route route) => false); BlueManage().scanDevices.clear(); //清除设备缓存 } else { - UmengCommonSdk.onEvent('login_result', { + ApmHelper.instance.trackEvent('login_result', { 'account': state.emailOrPhone.value, 'date': DateTool().getNowDateWithType(1), 'login_res': '${entity.errorCode}--${entity.errorMsg}', diff --git a/lib/login/register/starLock_register_logic.dart b/lib/login/register/starLock_register_logic.dart index 69a653d7..b60be331 100755 --- a/lib/login/register/starLock_register_logic.dart +++ b/lib/login/register/starLock_register_logic.dart @@ -1,8 +1,8 @@ - import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/blue/blue_manage.dart'; @@ -12,7 +12,6 @@ import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart'; import 'package:star_lock/tools/eventBusEventManage.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/storage.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../network/api_repository.dart'; import '../../tools/baseGetXController.dart'; @@ -26,6 +25,7 @@ class StarLockRegisterLogic extends BaseGetXController { final StarLockRegisterState state = StarLockRegisterState(); late Timer _timer; + void _startTimer() { _timer = Timer.periodic(1.seconds, (Timer timer) { if (state.currentSecond > 1) { @@ -49,7 +49,7 @@ class StarLockRegisterLogic extends BaseGetXController { return; } - if(!RegularExpression().validateString(state.pwd.value)){ + if (!RegularExpression().validateString(state.pwd.value)) { showToast('密码需至少包含数字/字母/字符中的2种组合'.tr); return; } @@ -61,10 +61,10 @@ class StarLockRegisterLogic extends BaseGetXController { verificationCode: state.verificationCode.value, deviceInfo: state.deviceInfoMap.value); if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('register_result', { - 'account':state.phoneOrEmailStr.value, - 'date':DateTool().getNowDateWithType(1), - 'register_res':'成功', + ApmHelper.instance.trackEvent('register_result', { + 'account': state.phoneOrEmailStr.value, + 'date': DateTool().getNowDateWithType(1), + 'register_res': '成功', }); Storage.saveLoginData(entity.data); @@ -73,11 +73,11 @@ class StarLockRegisterLogic extends BaseGetXController { XSJPushProvider().initLocalNotification(isCancelLocalPush: false); Get.offNamedUntil(Routers.starLockMain, (Route route) => false); BlueManage().scanDevices.clear(); //清除设备缓存 - }else{ - UmengCommonSdk.onEvent('register_result', { - 'account':state.phoneOrEmailStr.value, - 'date':DateTool().getNowDateWithType(1), - 'register_res':'${entity.errorCode}--${entity.errorMsg}', + } else { + ApmHelper.instance.trackEvent('register_result', { + 'account': state.phoneOrEmailStr.value, + 'date': DateTool().getNowDateWithType(1), + 'register_res': '${entity.errorCode}--${entity.errorMsg}', }); } } @@ -135,12 +135,15 @@ class StarLockRegisterLogic extends BaseGetXController { // 重置是否能提交 void _resetCanSub() { - state.canSub.value = state.pwdIsOK && state.codeIsOK && state.phoneOrEmailStr.value.isNotEmpty; + state.canSub.value = state.pwdIsOK && + state.codeIsOK && + state.phoneOrEmailStr.value.isNotEmpty; } // 重置是否能发送验证码 void _resetCanSendCode() { - state.canSendCode.value = state.pwdIsOK && state.phoneOrEmailStr.value.isNotEmpty; + state.canSendCode.value = + state.pwdIsOK && state.phoneOrEmailStr.value.isNotEmpty; } @override diff --git a/lib/main.dart b/lib/main.dart index 21d3255d..bbe2c4e5 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -28,7 +28,7 @@ import 'tools/store_service.dart'; FutureOr main() async { FlutterBugly.postCatchedException(() async { WidgetsFlutterBinding.ensureInitialized(); - + await ApmHelper.instance.initApp(); await _setCommonServices(); // 设置国际化信息 diff --git a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart index 209e9024..18537ef1 100755 --- a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart +++ b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; @@ -12,13 +12,8 @@ import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction import 'package:star_lock/tools/NativeInteractionTool.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../blue/blue_manage.dart'; -import '../../../../blue/io_reply.dart'; -import '../../../../blue/io_tool/io_tool.dart'; -import '../../../../blue/io_tool/manager_event_bus.dart'; -import '../../../../blue/sender_manage.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; import '../../../../tools/commonDataManage.dart'; @@ -222,7 +217,7 @@ class AuthorizedAdminLogic extends BaseGetXController { : ''); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('add_authorizedAdmin', { + ApmHelper.instance.trackEvent('add_authorizedAdmin', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -245,7 +240,7 @@ class AuthorizedAdminLogic extends BaseGetXController { sendElectronicKeyRequest(); }); } else { - UmengCommonSdk.onEvent('add_authorizedAdmin', { + ApmHelper.instance.trackEvent('add_authorizedAdmin', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, diff --git a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart index 8e0df9c7..17398032 100755 --- a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart +++ b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart @@ -1,14 +1,12 @@ - import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/card/addICCard/addICCard_entity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; +import '../../../../apm/apm_helper.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart'; import '../../../../blue/io_reply.dart'; @@ -22,20 +20,23 @@ import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/storage.dart'; import 'addICCard_state.dart'; -class AddICCardLogic extends BaseGetXController{ +class AddICCardLogic extends BaseGetXController { AddICCardState state = AddICCardState(); // 监听设备返回的数据 late StreamSubscription _replySubscription; + void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { + _replySubscription = + EventBusManager().eventBus!.on().listen((Reply reply) async { // 添加IC卡开始 - if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { + if ((reply is SenderAddICCardWithTimeCycleCoercionReply) && + (state.ifCurrentScreen.value == true)) { _replyAddICCardBegin(reply); } // 添加卡确认 - if(reply is SenderAddICCardConfirmationReply) { + if (reply is SenderAddICCardConfirmationReply) { _replyAddICCardConfirmation(reply); } }); @@ -46,13 +47,13 @@ class AddICCardLogic extends BaseGetXController{ BuglyTool.uploadException( message: '添加卡开始,解析数据', detail: '添加卡开始,解析数据 _replyAddICCardBegin:${reply.data}', - upload: false - ); + upload: false); - switch(status){ + switch (status) { case 0x00: //成功 - final List cardNumberList = reply.data.sublist(reply.data.length - 2); + final List cardNumberList = + reply.data.sublist(reply.data.length - 2); final String cardNumber = listChangInt(cardNumberList).toString(); // AppLog.log("添加卡号:$cardNumberList cardNumber:$cardNumber"); state.cardNumber.value = cardNumber.toString(); @@ -63,10 +64,13 @@ class AddICCardLogic extends BaseGetXController{ break; case 0x06: //无权限 - final List? privateKey = await Storage.getStringList(saveBluePrivateKey); - final List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); - final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List? signKey = + await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); // var publicKey = await Storage.getStringList(saveBluePublicKey); @@ -78,25 +82,29 @@ class AddICCardLogic extends BaseGetXController{ // AppLog.log('添加卡token:$token'); IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( - keyID:'1', - userID:await Storage.getUid(), - cardNo:0, - useCountLimit:0xffff, - operate:0, // 0:注册 1:修改 2:删除 3:删除全部 - isAdmin:state.isAdministrator.value == '2' ? 1 : 0, - isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫 - isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环 - weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环 - startDate: int.parse(state.startDate.value)~/1000, - endDate: int.parse(state.endDate.value)~/1000, - startTime:DateTool().dateToHNString(state.effectiveDateTime.value), - endTime:DateTool().dateToHNString(state.failureDateTime.value), - needAuthor:1, - signKey:signKeyDataList, - privateKey:getPrivateKeyList, - token: token, - isBeforeAddUser: false - ); + keyID: '1', + userID: await Storage.getUid(), + cardNo: 0, + useCountLimit: 0xffff, + operate: 0, + // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin: state.isAdministrator.value == '2' ? 1 : 0, + isForce: state.isCoerced.value == '1' ? 1 : 0, + // 是否是胁迫 + isRound: state.selectType.value == '2' ? 1 : 0, + // 是否是循环 + weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber( + state.weekDay.value), + // 周循环 + startDate: int.parse(state.startDate.value) ~/ 1000, + endDate: int.parse(state.endDate.value) ~/ 1000, + startTime: DateTool().dateToHNString(state.effectiveDateTime.value), + endTime: DateTool().dateToHNString(state.failureDateTime.value), + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, + token: token, + isBeforeAddUser: false); break; default: //失败 @@ -113,58 +121,59 @@ class AddICCardLogic extends BaseGetXController{ message: '添加卡结果,解析数据', detail: '添加卡结果,解析数据 _replyAddICCardConfirmation:${reply.data}', eventStr: '添加卡事件结果', - upload: true - ); + upload: true); final String getMobile = (await Storage.getMobile())!; - switch(status){ + switch (status) { case 0x00: //成功 - UmengCommonSdk.onEvent('add_card', { - 'lock_name':BlueManage().connectDeviceName, - 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, - 'date':DateTool().getNowDateWithType(1), - 'add_card_result':'成功', + ApmHelper.instance.trackEvent('add_card', { + 'lock_name': BlueManage().connectDeviceName, + 'account': + getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, + 'date': DateTool().getNowDateWithType(1), + 'add_card_result': '成功', }); - switch(reply.data[5]){ + switch (reply.data[5]) { case 0xff: - // 注册指纹失败 + // 注册指纹失败 showToast('退出添加'.tr); Get.close(1); break; case 0xFE: - // 管理员已满 + // 管理员已满 showToast('管理员已满'.tr); Get.close(1); break; case 0xFD: - // 用户已满 + // 用户已满 showToast('用户已满'.tr); Get.close(1); break; case 0xFC: - // 指纹已满 + // 指纹已满 showToast('锁上面添加卡已满'.tr); Get.close(1); break; case 0xFB: - // 指纹已存在 + // 指纹已存在 showToast('卡已存在'.tr); break; default: - // 添加指纹中 - // 当前注册数 + // 添加指纹中 + // 当前注册数 addICCardData(); break; } break; default: //失败 - UmengCommonSdk.onEvent('add_card', { - 'lock_name':BlueManage().connectDeviceName, - 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, - 'date':DateTool().getNowDateWithType(1), - 'add_card_result':reply.data[2], + ApmHelper.instance.trackEvent('add_card', { + 'lock_name': BlueManage().connectDeviceName, + 'account': + getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, + 'date': DateTool().getNowDateWithType(1), + 'add_card_result': reply.data[2], }); break; } @@ -175,91 +184,105 @@ class AddICCardLogic extends BaseGetXController{ final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); - final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); final List getPrivateKeyList = changeStringListToIntList(privateKey!); final List? token = await Storage.getStringList(saveBlueToken); final List getTokenList = changeStringListToIntList(token!); final String command = SenderAddICCardWithTimeCycleCoercionCommand( - keyID:'1', - userID:await Storage.getUid(), - cardNo:0, - useCountLimit:0xffff, - operate:0, // 0:注册 1:修改 2:删除 3:删除全部 - isAdmin:state.isAdministrator.value == '2' ? 1 : 0, - isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫 - isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环 - weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环 - startDate: int.parse(state.startDate.value)~/1000, - endDate: int.parse(state.endDate.value)~/1000, - startTime:DateTool().dateToHNString(state.effectiveDateTime.value), - endTime:DateTool().dateToHNString(state.failureDateTime.value), - needAuthor:1, - signKey:signKeyDataList, - privateKey:getPrivateKeyList, - token: getTokenList, + keyID: '1', + userID: await Storage.getUid(), + cardNo: 0, + useCountLimit: 0xffff, + operate: 0, + // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin: state.isAdministrator.value == '2' ? 1 : 0, + isForce: state.isCoerced.value == '1' ? 1 : 0, + // 是否是胁迫 + isRound: state.selectType.value == '2' ? 1 : 0, + // 是否是循环 + weekRound: DateTool() + .accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), + // 周循环 + startDate: int.parse(state.startDate.value) ~/ 1000, + endDate: int.parse(state.endDate.value) ~/ 1000, + startTime: DateTool().dateToHNString(state.effectiveDateTime.value), + endTime: DateTool().dateToHNString(state.failureDateTime.value), + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, + token: getTokenList, ).toString(); showBlueConnetctToastTimer(action: () async { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_card', { - 'lock_name':BlueManage().connectDeviceName, - 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, - 'date':DateTool().getNowDateWithType(1), - 'add_card_result':'添加卡超时', + ApmHelper.instance.trackEvent('add_card', { + 'lock_name': BlueManage().connectDeviceName, + 'account': + getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, + 'date': DateTool().getNowDateWithType(1), + 'add_card_result': '添加卡超时', }); BuglyTool.uploadException( message: '添加卡超时处理-添加卡失败', - detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command', + detail: + '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command', eventStr: '添加卡事件超时', - upload: true - ); + upload: true); Get.close(1); }); - BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { - if (deviceConnectionState == BluetoothConnectionState.connected){ + BlueManage().blueSendData(BlueManage().connectDeviceName, + (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { cancelBlueConnetctToastTimer(); IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( - keyID:'1', - userID:await Storage.getUid(), - cardNo:0, - useCountLimit:0xffff, - operate:0, // 0:注册 1:修改 2:删除 3:删除全部 - isAdmin:state.isAdministrator.value == '2' ? 1 : 0, - isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫 - isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环 - weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环 - startDate: int.parse(state.startDate.value)~/1000, - endDate: int.parse(state.endDate.value)~/1000, - startTime:DateTool().dateToHNString(state.effectiveDateTime.value), - endTime:DateTool().dateToHNString(state.failureDateTime.value), - needAuthor:1, - signKey:signKeyDataList, - privateKey:getPrivateKeyList, - token: getTokenList, - isBeforeAddUser: false - ); - } else if (deviceConnectionState == BluetoothConnectionState.disconnected){ + keyID: '1', + userID: await Storage.getUid(), + cardNo: 0, + useCountLimit: 0xffff, + operate: 0, + // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin: state.isAdministrator.value == '2' ? 1 : 0, + isForce: state.isCoerced.value == '1' ? 1 : 0, + // 是否是胁迫 + isRound: state.selectType.value == '2' ? 1 : 0, + // 是否是循环 + weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber( + state.weekDay.value), + // 周循环 + startDate: int.parse(state.startDate.value) ~/ 1000, + endDate: int.parse(state.endDate.value) ~/ 1000, + startTime: DateTool().dateToHNString(state.effectiveDateTime.value), + endTime: DateTool().dateToHNString(state.failureDateTime.value), + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, + token: getTokenList, + isBeforeAddUser: false); + } else if (deviceConnectionState == + BluetoothConnectionState.disconnected) { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_card', { - 'lock_name':BlueManage().connectDeviceName, - 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, - 'date':DateTool().getNowDateWithType(1), - 'add_card_result':'添加卡断开连接', + ApmHelper.instance.trackEvent('add_card', { + 'lock_name': BlueManage().connectDeviceName, + 'account': + getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, + 'date': DateTool().getNowDateWithType(1), + 'add_card_result': '添加卡断开连接', }); BuglyTool.uploadException( message: '添加卡超时处理-添加卡失败', - detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command', + detail: + '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command', eventStr: '添加卡事件断开连接', - upload: true - ); + upload: true); - if(state.ifCurrentScreen.value == true){ + if (state.ifCurrentScreen.value == true) { showBlueConnetctToast(); } cancelBlueConnetctToastTimer(); @@ -270,27 +293,32 @@ class AddICCardLogic extends BaseGetXController{ // 取消添加指纹 Future senderCancelAddCardCommand() async { - BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { - if (deviceConnectionState == BluetoothConnectionState.connected){ - final List? privateKey = await Storage.getStringList(saveBluePrivateKey); - final List getPrivateKeyList = changeStringListToIntList(privateKey!); + BlueManage().blueSendData(BlueManage().connectDeviceName, + (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); - final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List? signKey = + await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); final List? token = await Storage.getStringList(saveBlueToken); final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderCancelAddCardCommand( - keyID:'1', - userID:await Storage.getUid(), - needAuthor:1, - signKey:signKeyDataList, - privateKey:getPrivateKeyList, + keyID: '1', + userID: await Storage.getUid(), + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, token: getTokenList, ); - }else if (deviceConnectionState == BluetoothConnectionState.disconnected){ - if(state.ifCurrentScreen.value == true){ + } else if (deviceConnectionState == + BluetoothConnectionState.disconnected) { + if (state.ifCurrentScreen.value == true) { showBlueConnetctToast(); } cancelBlueConnetctToastTimer(); @@ -319,18 +347,20 @@ class AddICCardLogic extends BaseGetXController{ } } - Future updateIdCardUserNoLoadData(String cardId) async{ - final LoginEntity entity = await ApiRepository.to.updateIdCardUserNoLoadData( + Future updateIdCardUserNoLoadData(String cardId) async { + final LoginEntity entity = + await ApiRepository.to.updateIdCardUserNoLoadData( lockId: state.lockId.value.toString(), cardId: cardId, cardUserNo: state.cardNumber.value, ); - if(entity.errorCode!.codeIsSuccessful){ - showToast('添加成功'.tr, something:(){ - if(state.fromType.value == 2){ + if (entity.errorCode!.codeIsSuccessful) { + showToast('添加成功'.tr, something: () { + if (state.fromType.value == 2) { // 回调指纹号 - eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.cardNumber.value)); - }else if(state.fromType.value == 1){ + eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent( + state.cardNumber.value)); + } else if (state.fromType.value == 1) { eventBus.fire(OtherTypeRefreshListEvent()); } Get.close(2); @@ -356,5 +386,4 @@ class AddICCardLogic extends BaseGetXController{ void onClose() { _replySubscription.cancel(); } - -} \ No newline at end of file +} diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index 23d9a38e..4eb5137a 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -2,8 +2,7 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:flutter_easyloading/flutter_easyloading.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart'; @@ -11,7 +10,6 @@ import 'package:star_lock/main/lockDetail/lockOperatingRecord/lockOperatingRecor import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/eventBusEventManage.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../blue/blue_manage.dart'; import '../../../blue/io_protocol/io_referEventRecordTime.dart'; @@ -151,7 +149,7 @@ class DoorLockLogLogic extends BaseGetXController { cancelBlueConnetctToastTimer(); final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('check_doorLockLog', { + ApmHelper.instance.trackEvent('check_doorLockLog', { 'lockName': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -205,7 +203,7 @@ class DoorLockLogLogic extends BaseGetXController { cancelBlueConnetctToastTimer(); final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('check_doorLockLog', { + ApmHelper.instance.trackEvent('check_doorLockLog', { 'lockName': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -303,7 +301,7 @@ class DoorLockLogLogic extends BaseGetXController { showEasyLoading(); getLockRecordLastUploadDataTime(); } else { - UmengCommonSdk.onEvent('check_doorLockLog', { + ApmHelper.instance.trackEvent('check_doorLockLog', { 'lockName': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -314,7 +312,7 @@ class DoorLockLogLogic extends BaseGetXController { } dismissEasyLoading(); } else { - UmengCommonSdk.onEvent('check_doorLockLog', { + ApmHelper.instance.trackEvent('check_doorLockLog', { 'lockName': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index e7eb9336..d885aafa 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_entity.dart'; @@ -17,7 +18,6 @@ import 'package:star_lock/tools/regularExpression.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/storage.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../../../blue/blue_manage.dart'; @@ -185,7 +185,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController { : ''); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('add_electronic_key', { + ApmHelper.instance.trackEvent('add_electronic_key', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -201,7 +201,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController { update(); eventBus.fire(ElectronicKeyListRefreshUI()); } else { - UmengCommonSdk.onEvent('add_electronic_key', { + ApmHelper.instance.trackEvent('add_electronic_key', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart index b657a491..bab8f1f0 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart @@ -3,11 +3,10 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart'; import 'package:star_lock/tools/dateTool.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../../blue/blue_manage.dart'; import '../../../../../blue/io_reply.dart'; @@ -171,7 +170,7 @@ class AddFingerprintLogic extends BaseGetXController { case 0x00: //成功 // var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString(); - UmengCommonSdk.onEvent('add_fingerprint', { + ApmHelper.instance.trackEvent('add_fingerprint', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -203,7 +202,7 @@ class AddFingerprintLogic extends BaseGetXController { break; default: //失败 - UmengCommonSdk.onEvent('add_fingerprint', { + ApmHelper.instance.trackEvent('add_fingerprint', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -254,7 +253,7 @@ class AddFingerprintLogic extends BaseGetXController { showBlueConnetctToastTimer(action: () async { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_fingerprint', { + ApmHelper.instance.trackEvent('add_fingerprint', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -302,7 +301,7 @@ class AddFingerprintLogic extends BaseGetXController { ); }else if (deviceConnectionState == BluetoothConnectionState.disconnected){ final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_fingerprint', { + ApmHelper.instance.trackEvent('add_fingerprint', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 074847ea..5cef5acf 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -6,6 +6,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; @@ -14,7 +15,6 @@ import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; import 'package:star_lock/tools/bugly/bugly_tool.dart'; import 'package:star_lock/tools/throttler.dart'; import 'package:star_lock/widget/permission/permission_dialog.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../app_settings/app_settings.dart'; import '../../../blue/blue_manage.dart'; @@ -71,7 +71,7 @@ class LockDetailLogic extends BaseGetXController { if (status != 6) { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('open_lock', { + ApmHelper.instance.trackEvent('open_lock', { 'lock_name': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -378,7 +378,7 @@ class LockDetailLogic extends BaseGetXController { outTimer: 20, action: () async { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('open_lock', { + ApmHelper.instance.trackEvent('open_lock', { 'lock_name': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -422,7 +422,7 @@ class LockDetailLogic extends BaseGetXController { detail: '蓝牙连接失败,断开连接, 开锁失败--OpenLockCommand:$command', upload: true); final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('open_lock', { + ApmHelper.instance.trackEvent('open_lock', { 'lock_name': state.keyInfos.value.lockName!, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, diff --git a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart index 1f33e666..7d6b4a65 100755 --- a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart +++ b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:flutter/scheduler.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_factoryDataReset.dart'; @@ -294,7 +294,7 @@ class LockSetLogic extends BaseGetXController { isShowBlueConnetctToast: false, action: () async { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -332,7 +332,7 @@ class LockSetLogic extends BaseGetXController { token: getTokenList); } else if (connectionState == BluetoothConnectionState.disconnected) { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -538,6 +538,7 @@ class LockSetLogic extends BaseGetXController { // 下级界面修改成功后传递数据 StreamSubscription? _passCurrentLockInformationEvent; + void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus _passCurrentLockInformationEvent = eventBus @@ -597,7 +598,7 @@ class LockSetLogic extends BaseGetXController { ); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -616,7 +617,7 @@ class LockSetLogic extends BaseGetXController { eventBus.fire(RefreshLockListInfoDataEvent()); }); } else { - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -636,7 +637,7 @@ class LockSetLogic extends BaseGetXController { state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -655,7 +656,7 @@ class LockSetLogic extends BaseGetXController { eventBus.fire(RefreshLockListInfoDataEvent()); }); } else { - UmengCommonSdk.onEvent('delet_lock', { + ApmHelper.instance.trackEvent('delet_lock', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, diff --git a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart index 3c9e006e..b0cf5756 100755 --- a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart @@ -2,11 +2,11 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/eventBusEventManage.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_modelVendor.dart'; @@ -182,7 +182,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { pwdRight: state.isAdministrator.value == true ? 1 : 0); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('add_password', { + ApmHelper.instance.trackEvent('add_password', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -199,7 +199,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { updatePWDNumberRequest(entity.data!.keyboardPwdId.toString()); } } else { - UmengCommonSdk.onEvent('add_password', { + ApmHelper.instance.trackEvent('add_password', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -419,7 +419,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { showEasyLoading(); showBlueConnetctToastTimer(action: () async { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_password', { + ApmHelper.instance.trackEvent('add_password', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -465,7 +465,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { token: getTokenList); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('add_password', { + ApmHelper.instance.trackEvent('add_password', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), diff --git a/lib/mine/addLock/saveLock/saveLock_logic.dart b/lib/mine/addLock/saveLock/saveLock_logic.dart index 2074d793..7e8ae377 100755 --- a/lib/mine/addLock/saveLock/saveLock_logic.dart +++ b/lib/mine/addLock/saveLock/saveLock_logic.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_logic.dart'; import 'package:star_lock/mine/addLock/saveLock/entity/SaveLockEntity.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../app_settings/app_settings.dart'; import '../../../blue/blue_manage.dart'; @@ -407,7 +407,7 @@ class SaveLockLogic extends BaseGetXController { state.lockId = entity.data!.lockId!; final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('save_lock_result', { + ApmHelper.instance.trackEvent('save_lock_result', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), @@ -423,7 +423,7 @@ class SaveLockLogic extends BaseGetXController { state.sureBtnState.value = 0; final String getMobile = (await Storage.getMobile())!; - UmengCommonSdk.onEvent('save_lock_result', { + ApmHelper.instance.trackEvent('save_lock_result', { 'lock_name':BlueManage().connectDeviceName, 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'date':DateTool().getNowDateWithType(1), diff --git a/lib/mine/mineSet/mineSet/mineSet_logic.dart b/lib/mine/mineSet/mineSet/mineSet_logic.dart index d888914a..5bd852c5 100755 --- a/lib/mine/mineSet/mineSet/mineSet_logic.dart +++ b/lib/mine/mineSet/mineSet/mineSet_logic.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; @@ -13,7 +14,6 @@ import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/versionUndate/versionUndate_entity.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; @@ -131,7 +131,7 @@ class MineSetLogic extends BaseGetXController { await ApiRepository.to.userLogout(deviceld: getPushDeviceID); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { - UmengCommonSdk.onEvent('logout', { + ApmHelper.instance.trackEvent('logout', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, @@ -149,7 +149,7 @@ class MineSetLogic extends BaseGetXController { XSJPushProvider().initLocalNotification(isCancelLocalPush: true); Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false); } else { - UmengCommonSdk.onEvent('logout', { + ApmHelper.instance.trackEvent('logout', { 'lock_name': BlueManage().connectDeviceName, 'account': getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, diff --git a/lib/tools/storage.dart b/lib/tools/storage.dart index 842d18e5..b76f65c4 100755 --- a/lib/tools/storage.dart +++ b/lib/tools/storage.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:star_lock/apm/apm_helper.dart'; import '../login/login/entity/LoginData.dart'; import '../main/lockMian/entity/lockListInfo_entity.dart'; @@ -192,12 +193,14 @@ class Storage { final String? data = await Storage.getString(saveUserLoginData); if (data != null && data.isNotEmpty) { loginData = LoginData.fromJson(jsonDecode(data)); + ApmHelper.instance.login(loginData.userid!.toString()); } // AppLog.log("loginData:$loginData"); return loginData; } static Future saveLoginData(LoginData? data) async { + ApmHelper.instance.login(data!.userid!.toString()); await Storage.setString(saveUserLoginData, jsonEncode(data)); } From 5094348f85791b5c9bc57de47c67e6d41186bbb0 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 10:50:20 +0800 Subject: [PATCH 27/67] =?UTF-8?q?feat=EF=BC=9Afirebase=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=92=8C=E4=BA=8B=E4=BB=B6=E4=B8=8A=E6=8A=A5=E6=8E=A5=E5=85=A5?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/mine/mineSet/mineSet/mineSet_logic.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/mine/mineSet/mineSet/mineSet_logic.dart b/lib/mine/mineSet/mineSet/mineSet_logic.dart index 5bd852c5..6c7c6679 100755 --- a/lib/mine/mineSet/mineSet/mineSet_logic.dart +++ b/lib/mine/mineSet/mineSet/mineSet_logic.dart @@ -131,6 +131,7 @@ class MineSetLogic extends BaseGetXController { await ApiRepository.to.userLogout(deviceld: getPushDeviceID); final String getMobile = (await Storage.getMobile())!; if (entity.errorCode!.codeIsSuccessful) { + ApmHelper.instance.logout(); ApmHelper.instance.trackEvent('logout', { 'lock_name': BlueManage().connectDeviceName, 'account': @@ -149,6 +150,7 @@ class MineSetLogic extends BaseGetXController { XSJPushProvider().initLocalNotification(isCancelLocalPush: true); Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false); } else { + ApmHelper.instance.logout(); ApmHelper.instance.trackEvent('logout', { 'lock_name': BlueManage().connectDeviceName, 'account': From 62a894b3f3947229195cb08e8a33312c3e9488ae Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 10:54:14 +0800 Subject: [PATCH 28/67] =?UTF-8?q?ci=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6ae1079e..6e16a1bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,6 +4,7 @@ stages: - build-artifacts - release-artifacts - notification + - clean-up variables: LC_ALL: "en_US.UTF-8" @@ -204,4 +205,10 @@ notify_failure: script: - bash notify.sh failure allow_failure: true - when: on_failure \ No newline at end of file + when: on_failure + +clean_up: + stage: clean-up + script: + - git reset --hard + when: always \ No newline at end of file From 9de2bdd044ba16382f3596d451557f5366d1dbea Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 11:09:42 +0800 Subject: [PATCH 29/67] =?UTF-8?q?ci=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e16a1bb..3203135a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -209,6 +209,7 @@ notify_failure: clean_up: stage: clean-up + extends: .build_rule script: - git reset --hard when: always \ No newline at end of file From da80c1fc6703093090f7048510820858c63b347b Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 14:51:35 +0800 Subject: [PATCH 30/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/build.sh | 16 +++++---- android/fastlane/Fastfile | 70 +++++++++++++++++++++++++++++++++++---- 2 files changed, 73 insertions(+), 13 deletions(-) diff --git a/android/build.sh b/android/build.sh index 8e672739..29c3f686 100755 --- a/android/build.sh +++ b/android/build.sh @@ -12,19 +12,23 @@ regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$' if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then echo "===build canary_release: ${NEXT_VERSION}" export ENV_BUILD_TAG=${NEXT_VERSION} - bundle exec fastlane release flavor:xhj --verbose - bundle exec fastlane release flavor:sky --verbose + bundle exec fastlane release_apk flavor:xhj --verbose + bundle exec fastlane release_apk flavor:sky --verbose elif [[ $ENV_BUILD_TAG =~ $regex ]]; then echo "===build release===$ENV_BUILD_TAG" - bundle exec fastlane release flavor:xhj --verbose - bundle exec fastlane release flavor:sky --verbose + bundle exec fastlane release_apk flavor:xhj --verbose + bundle exec fastlane release_apk flavor:sky --verbose + bundle exec fastlane release_bundle flavor:xhj --verbose + bundle exec fastlane release_bundle flavor:sky --verbose elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then echo "===build dev===${NEXT_VERSION}" bundle exec fastlane beta flavor:xhj env:dev --verbose bundle exec fastlane beta flavor:sky env:dev --verbose elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then echo "===build pre===${NEXT_VERSION}" - bundle exec fastlane beta flavor:xhj env:pre --verbose - bundle exec fastlane beta flavor:sky env:pre --verbose +# bundle exec fastlane beta flavor:xhj env:pre --verbose +# bundle exec fastlane beta flavor:sky env:pre --verbose + bundle exec fastlane release_bundle flavor:xhj --verbose + bundle exec fastlane release_bundle flavor:sky --verbose fi exit 0 \ No newline at end of file diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 3930650f..de33726d 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -82,7 +82,7 @@ platform :android do end desc "Build & upload a new version to Gitlab Release" - lane :release do |options| + lane :release_apk do |options| flavor = options[:flavor] UI.user_error!("flavor is required") unless flavor print_log "build flavor for: #{flavor}" @@ -93,19 +93,37 @@ platform :android do commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"com",extensions:".dart") Dir.chdir "../.." do - sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") + sh("flutter","pub","get") + #sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end old_apk_file_path = File.join($path_apk_output_dir, "app-#{flavor}-release.apk") new_apk_file_path = File.join($path_apk_output_dir, "starlock-#{flavor}-release-"+$current_tag+".apk") File.rename(old_apk_file_path, new_apk_file_path) + end + + desc "Build & upload a new version to Gitlab Release" + lane :release_bundle do |options| + flavor = options[:flavor] + UI.user_error!("flavor is required") unless flavor + print_log "build flavor for: #{flavor}" + build_number = Time.now.strftime("%Y%m%d%H") + print_log "BuildNo #{build_number}" + build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] + print_log "buildVersion #{build_version}" + commit_hash = last_git_commit + short_hash = commit_hash[:abbreviated_commit_hash] + print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"cn",extensions:".dart") Dir.chdir "../.." do - sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") + sh("flutter","pub","get") + #sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end - old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab") - new_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/starlock-#{flavor}-release-"+$current_tag+".aab") - File.rename(old_bundle_file_path, new_bundle_file_path) - sh('cp',new_bundle_file_path,$path_apk_output_dir) +# old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab") +# new_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/starlock-#{flavor}-release-"+$current_tag+".aab") +# File.rename(old_bundle_file_path, new_bundle_file_path) +# sh('cp',new_bundle_file_path,$path_apk_output_dir) end lane :upload_file_to_pgy do |options| @@ -122,4 +140,42 @@ platform :android do File.delete(file) end end + + lane :remove_zone_pre_build do |options| + sh("git", "reset", "--hard") + zone = options[:zone] + UI.user_error!("Please provide valid 'zone'") unless zone + pathList=["pubspec.yaml","/lib/apm"] + extensions = options[:extensions] # 文件扩展名数组 + if pathList.empty? || extensions.empty? + UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.") + end + puts "start prepare zone: #{zone},pathList:#{pathList},extensions:#{extensions}" + regexp_List = [/#<#{zone}>.*?#<\/#{zone}>/m,/\/\/\<#{zone}\>.*?\/\/\<\/#{zone}\>/m] + UI.message("Processed RegExpList: #{regexp_List}") + def process_file(file_path, regexp_List) + content = File.read(file_path) + regexp_List.each do |tag| + content = content.gsub(tag) + end + File.write(file_path, content) + UI.message("Processed file: #{file_path},content : #{content}") + end + + pathList.each do |path| + realPath = File.join($path_dir_build, path) + if File.directory?(realPath) + Dir.glob("#{realPath}/**/*").each do |file| + if extensions.include?(File.extname(file)) + process_file(file) + end + end + elsif File.file?(realPath) + process_file(realPath) + else + UI.message("Invalid path: #{realPath}") + end + end + UI.success("All matching content removed from specified files.") + end end From 49b042d62bb4cb87f9092228e10ffa2c3d97e634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Sat, 11 Jan 2025 14:52:12 +0800 Subject: [PATCH 31/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=BF=9B=E5=85=A5=E4=B8=87=E5=B8=88=E5=82=85=E7=99=BD=E5=B1=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=822=E3=80=81iOS=E5=8E=9F=E7=94=9F?= =?UTF-8?q?=E6=B7=BB=E5=8A=A034=E5=9B=BD=E6=9D=83=E9=99=90=E6=96=87?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner.xcodeproj/project.pbxproj | 364 ++++++++++++++++-- .../xcshareddata/xcschemes/xhj.xcscheme | 2 +- ios/Runner/ar.lproj/InfoPlist.strings | 18 + ios/Runner/ar.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ar.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/ar.lproj/Main.strings | 1 + ios/Runner/bg.lproj/InfoPlist.strings | 18 + ios/Runner/bg.lproj/InfoPlist_sky.strings | 18 + ios/Runner/bg.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/bg.lproj/Main.strings | 1 + ios/Runner/bn.lproj/InfoPlist.strings | 18 + ios/Runner/bn.lproj/InfoPlist_sky.strings | 18 + ios/Runner/bn.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/bn.lproj/Main.strings | 1 + ios/Runner/cs.lproj/InfoPlist.strings | 18 + ios/Runner/cs.lproj/InfoPlist_sky.strings | 18 + ios/Runner/cs.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/cs.lproj/Main.strings | 1 + ios/Runner/da.lproj/InfoPlist.strings | 18 + ios/Runner/da.lproj/InfoPlist_sky.strings | 18 + ios/Runner/da.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/da.lproj/Main.strings | 1 + ios/Runner/de.lproj/InfoPlist.strings | 18 + ios/Runner/de.lproj/InfoPlist_sky.strings | 18 + ios/Runner/de.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/de.lproj/Main.strings | 1 + ios/Runner/el.lproj/InfoPlist.strings | 18 + ios/Runner/el.lproj/InfoPlist_sky.strings | 18 + ios/Runner/el.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/el.lproj/Main.strings | 1 + ios/Runner/en.lproj/InfoPlist.strings | 6 +- ios/Runner/es.lproj/InfoPlist.strings | 18 + ios/Runner/es.lproj/InfoPlist_sky.strings | 18 + ios/Runner/es.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/es.lproj/Main.strings | 1 + ios/Runner/et.lproj/InfoPlist.strings | 18 + ios/Runner/et.lproj/InfoPlist_sky.strings | 18 + ios/Runner/et.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/et.lproj/Main.strings | 1 + ios/Runner/fi.lproj/InfoPlist.strings | 18 + ios/Runner/fi.lproj/InfoPlist_sky.strings | 18 + ios/Runner/fi.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/fi.lproj/Main.strings | 1 + ios/Runner/fr.lproj/InfoPlist.strings | 19 + ios/Runner/fr.lproj/InfoPlist_sky.strings | 19 + ios/Runner/fr.lproj/InfoPlist_xhj.strings | 19 + ios/Runner/fr.lproj/Main.strings | 1 + ios/Runner/he.lproj/InfoPlist.strings | 18 + ios/Runner/he.lproj/InfoPlist_sky.strings | 18 + ios/Runner/he.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/he.lproj/Main.strings | 1 + ios/Runner/hr.lproj/InfoPlist.strings | 18 + ios/Runner/hr.lproj/InfoPlist_sky.strings | 18 + ios/Runner/hr.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/hr.lproj/Main.strings | 1 + ios/Runner/hu.lproj/InfoPlist.strings | 18 + ios/Runner/hu.lproj/InfoPlist_sky.strings | 18 + ios/Runner/hu.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/hu.lproj/Main.strings | 1 + ios/Runner/id.lproj/InfoPlist.strings | 18 + ios/Runner/id.lproj/InfoPlist_sky.strings | 18 + ios/Runner/id.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/id.lproj/Main.strings | 1 + ios/Runner/it.lproj/InfoPlist.strings | 18 + ios/Runner/it.lproj/InfoPlist_sky.strings | 18 + ios/Runner/it.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/it.lproj/Main.strings | 1 + ios/Runner/ja.lproj/InfoPlist.strings | 18 + ios/Runner/ja.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ja.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/ja.lproj/Main.strings | 1 + ios/Runner/kk.lproj/InfoPlist.strings | 18 + ios/Runner/kk.lproj/InfoPlist_sky.strings | 18 + ios/Runner/kk.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/kk.lproj/Main.strings | 1 + ios/Runner/ko.lproj/InfoPlist.strings | 18 + ios/Runner/ko.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ko.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/ko.lproj/Main.strings | 1 + ios/Runner/lt.lproj/InfoPlist.strings | 18 + ios/Runner/lt.lproj/InfoPlist_sky.strings | 18 + ios/Runner/lt.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/lt.lproj/Main.strings | 1 + ios/Runner/ms.lproj/InfoPlist.strings | 18 + ios/Runner/ms.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ms.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/ms.lproj/Main.strings | 1 + ios/Runner/nl.lproj/InfoPlist.strings | 18 + ios/Runner/nl.lproj/InfoPlist_sky.strings | 18 + ios/Runner/nl.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/nl.lproj/Main.strings | 1 + ios/Runner/pl.lproj/InfoPlist.strings | 18 + ios/Runner/pl.lproj/InfoPlist_sky.strings | 18 + ios/Runner/pl.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/pl.lproj/Main.strings | 1 + ios/Runner/pt-PT.lproj/InfoPlist.strings | 18 + ios/Runner/pt-PT.lproj/InfoPlist_sky.strings | 18 + ios/Runner/pt-PT.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/pt-PT.lproj/Main.strings | 1 + ios/Runner/ro.lproj/InfoPlist.strings | 18 + ios/Runner/ro.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ro.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/ro.lproj/Main.strings | 1 + ios/Runner/ru.lproj/InfoPlist.strings | 18 + ios/Runner/ru.lproj/InfoPlist_sky.strings | 18 + ios/Runner/ru.lproj/InfoPlist_xhj.strings | 12 + ios/Runner/ru.lproj/Main.strings | 1 + ios/Runner/sk.lproj/InfoPlist.strings | 18 + ios/Runner/sk.lproj/InfoPlist_sky.strings | 18 + ios/Runner/sk.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/sk.lproj/Main.strings | 1 + ios/Runner/sr.lproj/InfoPlist.strings | 18 + ios/Runner/sr.lproj/InfoPlist_sky.strings | 18 + ios/Runner/sr.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/sr.lproj/Main.strings | 1 + ios/Runner/sv.lproj/InfoPlist.strings | 18 + ios/Runner/sv.lproj/InfoPlist_sky.strings | 18 + ios/Runner/sv.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/sv.lproj/Main.strings | 1 + ios/Runner/th.lproj/InfoPlist.strings | 18 + ios/Runner/th.lproj/InfoPlist_sky.strings | 18 + ios/Runner/th.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/th.lproj/Main.strings | 1 + ios/Runner/tr.lproj/InfoPlist.strings | 18 + ios/Runner/tr.lproj/InfoPlist_sky.strings | 18 + ios/Runner/tr.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/tr.lproj/Main.strings | 1 + ios/Runner/uk.lproj/InfoPlist.strings | 18 + ios/Runner/uk.lproj/InfoPlist_sky.strings | 18 + ios/Runner/uk.lproj/InfoPlist_xhj.strings | 19 + ios/Runner/uk.lproj/Main.strings | 1 + ios/Runner/vi.lproj/InfoPlist.strings | 18 + ios/Runner/vi.lproj/InfoPlist_sky.strings | 18 + ios/Runner/vi.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/vi.lproj/Main.strings | 1 + ios/Runner/zh-HK.lproj/InfoPlist.strings | 18 + ios/Runner/zh-HK.lproj/InfoPlist_sky.strings | 18 + ios/Runner/zh-HK.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/zh-HK.lproj/Main.strings | 1 + ios/Runner/zh-Hant.lproj/InfoPlist.strings | 18 + .../zh-Hant.lproj/InfoPlist_sky.strings | 18 + .../zh-Hant.lproj/InfoPlist_xhj.strings | 18 + ios/Runner/zh-Hant.lproj/Main.strings | 1 + lib/main_local.dart | 2 +- .../wx_push_miniProgram.dart | 8 +- 145 files changed, 2261 insertions(+), 44 deletions(-) create mode 100644 ios/Runner/ar.lproj/InfoPlist.strings create mode 100644 ios/Runner/ar.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ar.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ar.lproj/Main.strings create mode 100644 ios/Runner/bg.lproj/InfoPlist.strings create mode 100644 ios/Runner/bg.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/bg.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/bg.lproj/Main.strings create mode 100644 ios/Runner/bn.lproj/InfoPlist.strings create mode 100644 ios/Runner/bn.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/bn.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/bn.lproj/Main.strings create mode 100644 ios/Runner/cs.lproj/InfoPlist.strings create mode 100644 ios/Runner/cs.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/cs.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/cs.lproj/Main.strings create mode 100644 ios/Runner/da.lproj/InfoPlist.strings create mode 100644 ios/Runner/da.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/da.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/da.lproj/Main.strings create mode 100644 ios/Runner/de.lproj/InfoPlist.strings create mode 100644 ios/Runner/de.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/de.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/de.lproj/Main.strings create mode 100644 ios/Runner/el.lproj/InfoPlist.strings create mode 100644 ios/Runner/el.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/el.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/el.lproj/Main.strings create mode 100644 ios/Runner/es.lproj/InfoPlist.strings create mode 100644 ios/Runner/es.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/es.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/es.lproj/Main.strings create mode 100644 ios/Runner/et.lproj/InfoPlist.strings create mode 100644 ios/Runner/et.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/et.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/et.lproj/Main.strings create mode 100644 ios/Runner/fi.lproj/InfoPlist.strings create mode 100644 ios/Runner/fi.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/fi.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/fi.lproj/Main.strings create mode 100644 ios/Runner/fr.lproj/InfoPlist.strings create mode 100644 ios/Runner/fr.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/fr.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/fr.lproj/Main.strings create mode 100644 ios/Runner/he.lproj/InfoPlist.strings create mode 100644 ios/Runner/he.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/he.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/he.lproj/Main.strings create mode 100644 ios/Runner/hr.lproj/InfoPlist.strings create mode 100644 ios/Runner/hr.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/hr.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/hr.lproj/Main.strings create mode 100644 ios/Runner/hu.lproj/InfoPlist.strings create mode 100644 ios/Runner/hu.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/hu.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/hu.lproj/Main.strings create mode 100644 ios/Runner/id.lproj/InfoPlist.strings create mode 100644 ios/Runner/id.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/id.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/id.lproj/Main.strings create mode 100644 ios/Runner/it.lproj/InfoPlist.strings create mode 100644 ios/Runner/it.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/it.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/it.lproj/Main.strings create mode 100644 ios/Runner/ja.lproj/InfoPlist.strings create mode 100644 ios/Runner/ja.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ja.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ja.lproj/Main.strings create mode 100644 ios/Runner/kk.lproj/InfoPlist.strings create mode 100644 ios/Runner/kk.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/kk.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/kk.lproj/Main.strings create mode 100644 ios/Runner/ko.lproj/InfoPlist.strings create mode 100644 ios/Runner/ko.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ko.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ko.lproj/Main.strings create mode 100644 ios/Runner/lt.lproj/InfoPlist.strings create mode 100644 ios/Runner/lt.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/lt.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/lt.lproj/Main.strings create mode 100644 ios/Runner/ms.lproj/InfoPlist.strings create mode 100644 ios/Runner/ms.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ms.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ms.lproj/Main.strings create mode 100644 ios/Runner/nl.lproj/InfoPlist.strings create mode 100644 ios/Runner/nl.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/nl.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/nl.lproj/Main.strings create mode 100644 ios/Runner/pl.lproj/InfoPlist.strings create mode 100644 ios/Runner/pl.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/pl.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/pl.lproj/Main.strings create mode 100644 ios/Runner/pt-PT.lproj/InfoPlist.strings create mode 100644 ios/Runner/pt-PT.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/pt-PT.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/pt-PT.lproj/Main.strings create mode 100644 ios/Runner/ro.lproj/InfoPlist.strings create mode 100644 ios/Runner/ro.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ro.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ro.lproj/Main.strings create mode 100644 ios/Runner/ru.lproj/InfoPlist.strings create mode 100644 ios/Runner/ru.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/ru.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/ru.lproj/Main.strings create mode 100644 ios/Runner/sk.lproj/InfoPlist.strings create mode 100644 ios/Runner/sk.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/sk.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/sk.lproj/Main.strings create mode 100644 ios/Runner/sr.lproj/InfoPlist.strings create mode 100644 ios/Runner/sr.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/sr.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/sr.lproj/Main.strings create mode 100644 ios/Runner/sv.lproj/InfoPlist.strings create mode 100644 ios/Runner/sv.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/sv.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/sv.lproj/Main.strings create mode 100644 ios/Runner/th.lproj/InfoPlist.strings create mode 100644 ios/Runner/th.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/th.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/th.lproj/Main.strings create mode 100644 ios/Runner/tr.lproj/InfoPlist.strings create mode 100644 ios/Runner/tr.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/tr.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/tr.lproj/Main.strings create mode 100644 ios/Runner/uk.lproj/InfoPlist.strings create mode 100644 ios/Runner/uk.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/uk.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/uk.lproj/Main.strings create mode 100644 ios/Runner/vi.lproj/InfoPlist.strings create mode 100644 ios/Runner/vi.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/vi.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/vi.lproj/Main.strings create mode 100644 ios/Runner/zh-HK.lproj/InfoPlist.strings create mode 100644 ios/Runner/zh-HK.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/zh-HK.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/zh-HK.lproj/Main.strings create mode 100644 ios/Runner/zh-Hant.lproj/InfoPlist.strings create mode 100644 ios/Runner/zh-Hant.lproj/InfoPlist_sky.strings create mode 100644 ios/Runner/zh-Hant.lproj/InfoPlist_xhj.strings create mode 100644 ios/Runner/zh-Hant.lproj/Main.strings diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 238827f8..43f75e59 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -107,6 +107,146 @@ 04717D702D1B9B5A00089BD3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist_xhj.strings"; sourceTree = ""; }; 04717D722D1B9B5D00089BD3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; 04BFC4482BCFE05100688FCA /* RunnerRelease-xhj.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "RunnerRelease-xhj.entitlements"; sourceTree = ""; }; + 04FF45362D3218240085A7B2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; }; + 04FF45372D3218240085A7B2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45382D3218240085A7B2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45392D3218240085A7B2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF453A2D32199F0085A7B2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = ""; }; + 04FF453B2D32199F0085A7B2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF453C2D32199F0085A7B2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF453D2D32199F0085A7B2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF453E2D321A410085A7B2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = ""; }; + 04FF453F2D321A410085A7B2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45402D321A420085A7B2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45412D321A420085A7B2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45422D321AB50085A7B2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; + 04FF45432D321AB50085A7B2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45442D321AB60085A7B2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45452D321AB60085A7B2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45462D321DB80085A7B2 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Main.strings; sourceTree = ""; }; + 04FF45472D321DB80085A7B2 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45482D321DB80085A7B2 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45492D321DB80085A7B2 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF454A2D321E590085A7B2 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = ""; }; + 04FF454B2D321E590085A7B2 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF454C2D321E590085A7B2 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF454D2D321E590085A7B2 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF454E2D321EA00085A7B2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Main.strings; sourceTree = ""; }; + 04FF454F2D321EA00085A7B2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45502D321EA00085A7B2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45512D321EA00085A7B2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45522D321F080085A7B2 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Main.strings"; sourceTree = ""; }; + 04FF45532D321F080085A7B2 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = ""; }; + 04FF45542D321F080085A7B2 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist_sky.strings"; sourceTree = ""; }; + 04FF45552D321F080085A7B2 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist_xhj.strings"; sourceTree = ""; }; + 04FF45562D321F720085A7B2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Main.strings; sourceTree = ""; }; + 04FF45572D321F720085A7B2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45582D321F720085A7B2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45592D321F720085A7B2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF455A2D3220840085A7B2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; + 04FF455B2D3220840085A7B2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF455C2D3220850085A7B2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF455D2D3220850085A7B2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF455E2D3220F00085A7B2 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; + 04FF455F2D3220F00085A7B2 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45602D3220F00085A7B2 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45612D3220F00085A7B2 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45622D32212D0085A7B2 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/Main.strings; sourceTree = ""; }; + 04FF45632D32212D0085A7B2 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45642D32212D0085A7B2 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45652D32212D0085A7B2 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45662D3221820085A7B2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Main.strings; sourceTree = ""; }; + 04FF45672D3221820085A7B2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45682D3221820085A7B2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45692D3221820085A7B2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF456A2D3221BD0085A7B2 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Main.strings; sourceTree = ""; }; + 04FF456B2D3221BD0085A7B2 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF456C2D3221BD0085A7B2 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF456D2D3221BD0085A7B2 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF456E2D3222620085A7B2 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Main.strings; sourceTree = ""; }; + 04FF456F2D3222620085A7B2 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45702D3222620085A7B2 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45712D3222620085A7B2 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45722D3222B40085A7B2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Main.strings; sourceTree = ""; }; + 04FF45732D3222B40085A7B2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45742D3222B50085A7B2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45752D3222B50085A7B2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45762D3223130085A7B2 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Main.strings; sourceTree = ""; }; + 04FF45772D3223130085A7B2 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45782D3223130085A7B2 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45792D3223130085A7B2 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF457A2D3223620085A7B2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Main.strings; sourceTree = ""; }; + 04FF457B2D3223620085A7B2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF457C2D3223620085A7B2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF457D2D3223620085A7B2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF457E2D3223A90085A7B2 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Main.strings; sourceTree = ""; }; + 04FF457F2D3223A90085A7B2 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45802D3223A90085A7B2 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45812D3223A90085A7B2 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45822D3223EA0085A7B2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Main.strings; sourceTree = ""; }; + 04FF45832D3223EA0085A7B2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45842D3223EA0085A7B2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45852D3223EA0085A7B2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45862D323B300085A7B2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; + 04FF45872D323B300085A7B2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45882D323B300085A7B2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45892D323B300085A7B2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF458A2D323B6F0085A7B2 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Main.strings; sourceTree = ""; }; + 04FF458B2D323B6F0085A7B2 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF458C2D323B6F0085A7B2 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF458D2D323B6F0085A7B2 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF458E2D323DE60085A7B2 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Main.strings; sourceTree = ""; }; + 04FF458F2D323DE60085A7B2 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45902D323DE60085A7B2 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45912D323DE70085A7B2 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45922D323EAC0085A7B2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; + 04FF45932D323EAC0085A7B2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45942D323EAC0085A7B2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45952D323EAC0085A7B2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45962D323EEF0085A7B2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Main.strings; sourceTree = ""; }; + 04FF45972D323EEF0085A7B2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45982D323EEF0085A7B2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45992D323EEF0085A7B2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF459A2D323F610085A7B2 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Main.strings; sourceTree = ""; }; + 04FF459B2D323F610085A7B2 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF459C2D323F620085A7B2 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF459D2D323F620085A7B2 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF459E2D3240110085A7B2 /* kk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kk; path = kk.lproj/Main.strings; sourceTree = ""; }; + 04FF459F2D3240110085A7B2 /* kk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kk; path = kk.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45A02D3240110085A7B2 /* kk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kk; path = kk.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45A12D3240110085A7B2 /* kk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kk; path = kk.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45A22D32414C0085A7B2 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Main.strings; sourceTree = ""; }; + 04FF45A32D32414C0085A7B2 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45A42D32414C0085A7B2 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45A52D32414C0085A7B2 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45A62D32418D0085A7B2 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Main.strings; sourceTree = ""; }; + 04FF45A72D32418D0085A7B2 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45A82D32418E0085A7B2 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45A92D32418E0085A7B2 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45AA2D32420B0085A7B2 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Main.strings; sourceTree = ""; }; + 04FF45AB2D32420B0085A7B2 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45AC2D32420B0085A7B2 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45AD2D32420B0085A7B2 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45AE2D32424F0085A7B2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Main.strings; sourceTree = ""; }; + 04FF45AF2D32424F0085A7B2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45B02D32424F0085A7B2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45B12D32424F0085A7B2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45B22D3242920085A7B2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Main.strings; sourceTree = ""; }; + 04FF45B32D3242920085A7B2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45B42D3242920085A7B2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45B52D3242920085A7B2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; + 04FF45B62D3243560085A7B2 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/Main.strings"; sourceTree = ""; }; + 04FF45B72D3243560085A7B2 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/InfoPlist.strings"; sourceTree = ""; }; + 04FF45B82D3243560085A7B2 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/InfoPlist_sky.strings"; sourceTree = ""; }; + 04FF45B92D3243560085A7B2 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/InfoPlist_xhj.strings"; sourceTree = ""; }; + 04FF45BA2D32437B0085A7B2 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Main.strings"; sourceTree = ""; }; + 04FF45BB2D32437B0085A7B2 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; + 04FF45BC2D32437C0085A7B2 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist_sky.strings"; sourceTree = ""; }; + 04FF45BD2D32437C0085A7B2 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist_xhj.strings"; sourceTree = ""; }; + 04FF45BE2D3247190085A7B2 /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/Main.strings; sourceTree = ""; }; + 04FF45BF2D3247190085A7B2 /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/InfoPlist.strings; sourceTree = ""; }; + 04FF45C02D3247190085A7B2 /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/InfoPlist_sky.strings; sourceTree = ""; }; + 04FF45C12D3247190085A7B2 /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/InfoPlist_xhj.strings; sourceTree = ""; }; 0BEB3ADCCEC961E2916B9004 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 0D02C18E16914A687A4A1AC2 /* devDebug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = devDebug.xcconfig; path = Flutter/devDebug.xcconfig; sourceTree = ""; }; 126D1370182AB44291C67A10 /* Pods-Runner.dev-release-sky.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.dev-release-sky.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.dev-release-sky.xcconfig"; sourceTree = ""; }; @@ -478,6 +618,41 @@ en, Base, "zh-Hans", + fr, + ru, + de, + ja, + ko, + it, + uk, + "pt-PT", + es, + ar, + vi, + ms, + nl, + ro, + lt, + sv, + et, + pl, + sk, + cs, + he, + el, + sr, + tr, + hu, + bg, + kk, + hr, + th, + id, + fi, + da, + "zh-HK", + "zh-Hant", + bn, ); mainGroup = 97C146E51CF9000F007C117D; productRefGroup = 97C146EF1CF9000F007C117D /* Products */; @@ -649,6 +824,41 @@ children = ( 04717D682D1B97E100089BD3 /* zh-Hans */, 04717D6A2D1B97E800089BD3 /* en */, + 04FF45382D3218240085A7B2 /* fr */, + 04FF453C2D32199F0085A7B2 /* ru */, + 04FF45402D321A420085A7B2 /* de */, + 04FF45442D321AB60085A7B2 /* ja */, + 04FF45482D321DB80085A7B2 /* ko */, + 04FF454C2D321E590085A7B2 /* it */, + 04FF45502D321EA00085A7B2 /* uk */, + 04FF45542D321F080085A7B2 /* pt-PT */, + 04FF45582D321F720085A7B2 /* es */, + 04FF455C2D3220850085A7B2 /* ar */, + 04FF45602D3220F00085A7B2 /* vi */, + 04FF45642D32212D0085A7B2 /* ms */, + 04FF45682D3221820085A7B2 /* nl */, + 04FF456C2D3221BD0085A7B2 /* ro */, + 04FF45702D3222620085A7B2 /* lt */, + 04FF45742D3222B50085A7B2 /* sv */, + 04FF45782D3223130085A7B2 /* et */, + 04FF457C2D3223620085A7B2 /* pl */, + 04FF45802D3223A90085A7B2 /* sk */, + 04FF45842D3223EA0085A7B2 /* cs */, + 04FF45882D323B300085A7B2 /* he */, + 04FF458C2D323B6F0085A7B2 /* el */, + 04FF45902D323DE60085A7B2 /* sr */, + 04FF45942D323EAC0085A7B2 /* tr */, + 04FF45982D323EEF0085A7B2 /* hu */, + 04FF459C2D323F620085A7B2 /* bg */, + 04FF45A02D3240110085A7B2 /* kk */, + 04FF45A42D32414C0085A7B2 /* hr */, + 04FF45A82D32418E0085A7B2 /* th */, + 04FF45AC2D32420B0085A7B2 /* id */, + 04FF45B02D32424F0085A7B2 /* fi */, + 04FF45B42D3242920085A7B2 /* da */, + 04FF45B82D3243560085A7B2 /* zh-HK */, + 04FF45BC2D32437C0085A7B2 /* zh-Hant */, + 04FF45C02D3247190085A7B2 /* bn */, ); name = InfoPlist_sky.strings; sourceTree = ""; @@ -658,6 +868,41 @@ children = ( 04717D6C2D1B983200089BD3 /* en */, 04717D6E2D1B983900089BD3 /* zh-Hans */, + 04FF45372D3218240085A7B2 /* fr */, + 04FF453B2D32199F0085A7B2 /* ru */, + 04FF453F2D321A410085A7B2 /* de */, + 04FF45432D321AB50085A7B2 /* ja */, + 04FF45472D321DB80085A7B2 /* ko */, + 04FF454B2D321E590085A7B2 /* it */, + 04FF454F2D321EA00085A7B2 /* uk */, + 04FF45532D321F080085A7B2 /* pt-PT */, + 04FF45572D321F720085A7B2 /* es */, + 04FF455B2D3220840085A7B2 /* ar */, + 04FF455F2D3220F00085A7B2 /* vi */, + 04FF45632D32212D0085A7B2 /* ms */, + 04FF45672D3221820085A7B2 /* nl */, + 04FF456B2D3221BD0085A7B2 /* ro */, + 04FF456F2D3222620085A7B2 /* lt */, + 04FF45732D3222B40085A7B2 /* sv */, + 04FF45772D3223130085A7B2 /* et */, + 04FF457B2D3223620085A7B2 /* pl */, + 04FF457F2D3223A90085A7B2 /* sk */, + 04FF45832D3223EA0085A7B2 /* cs */, + 04FF45872D323B300085A7B2 /* he */, + 04FF458B2D323B6F0085A7B2 /* el */, + 04FF458F2D323DE60085A7B2 /* sr */, + 04FF45932D323EAC0085A7B2 /* tr */, + 04FF45972D323EEF0085A7B2 /* hu */, + 04FF459B2D323F610085A7B2 /* bg */, + 04FF459F2D3240110085A7B2 /* kk */, + 04FF45A32D32414C0085A7B2 /* hr */, + 04FF45A72D32418D0085A7B2 /* th */, + 04FF45AB2D32420B0085A7B2 /* id */, + 04FF45AF2D32424F0085A7B2 /* fi */, + 04FF45B32D3242920085A7B2 /* da */, + 04FF45B72D3243560085A7B2 /* zh-HK */, + 04FF45BB2D32437B0085A7B2 /* zh-Hant */, + 04FF45BF2D3247190085A7B2 /* bn */, ); name = InfoPlist.strings; sourceTree = ""; @@ -667,6 +912,41 @@ children = ( 04717D702D1B9B5A00089BD3 /* zh-Hans */, 04717D722D1B9B5D00089BD3 /* en */, + 04FF45392D3218240085A7B2 /* fr */, + 04FF453D2D32199F0085A7B2 /* ru */, + 04FF45412D321A420085A7B2 /* de */, + 04FF45452D321AB60085A7B2 /* ja */, + 04FF45492D321DB80085A7B2 /* ko */, + 04FF454D2D321E590085A7B2 /* it */, + 04FF45512D321EA00085A7B2 /* uk */, + 04FF45552D321F080085A7B2 /* pt-PT */, + 04FF45592D321F720085A7B2 /* es */, + 04FF455D2D3220850085A7B2 /* ar */, + 04FF45612D3220F00085A7B2 /* vi */, + 04FF45652D32212D0085A7B2 /* ms */, + 04FF45692D3221820085A7B2 /* nl */, + 04FF456D2D3221BD0085A7B2 /* ro */, + 04FF45712D3222620085A7B2 /* lt */, + 04FF45752D3222B50085A7B2 /* sv */, + 04FF45792D3223130085A7B2 /* et */, + 04FF457D2D3223620085A7B2 /* pl */, + 04FF45812D3223A90085A7B2 /* sk */, + 04FF45852D3223EA0085A7B2 /* cs */, + 04FF45892D323B300085A7B2 /* he */, + 04FF458D2D323B6F0085A7B2 /* el */, + 04FF45912D323DE70085A7B2 /* sr */, + 04FF45952D323EAC0085A7B2 /* tr */, + 04FF45992D323EEF0085A7B2 /* hu */, + 04FF459D2D323F620085A7B2 /* bg */, + 04FF45A12D3240110085A7B2 /* kk */, + 04FF45A52D32414C0085A7B2 /* hr */, + 04FF45A92D32418E0085A7B2 /* th */, + 04FF45AD2D32420B0085A7B2 /* id */, + 04FF45B12D32424F0085A7B2 /* fi */, + 04FF45B52D3242920085A7B2 /* da */, + 04FF45B92D3243560085A7B2 /* zh-HK */, + 04FF45BD2D32437C0085A7B2 /* zh-Hant */, + 04FF45C12D3247190085A7B2 /* bn */, ); name = InfoPlist_xhj.strings; sourceTree = ""; @@ -676,6 +956,41 @@ children = ( 97C146FB1CF9000F007C117D /* Base */, 0420903B2C0EEAA50073E654 /* zh-Hans */, + 04FF45362D3218240085A7B2 /* fr */, + 04FF453A2D32199F0085A7B2 /* ru */, + 04FF453E2D321A410085A7B2 /* de */, + 04FF45422D321AB50085A7B2 /* ja */, + 04FF45462D321DB80085A7B2 /* ko */, + 04FF454A2D321E590085A7B2 /* it */, + 04FF454E2D321EA00085A7B2 /* uk */, + 04FF45522D321F080085A7B2 /* pt-PT */, + 04FF45562D321F720085A7B2 /* es */, + 04FF455A2D3220840085A7B2 /* ar */, + 04FF455E2D3220F00085A7B2 /* vi */, + 04FF45622D32212D0085A7B2 /* ms */, + 04FF45662D3221820085A7B2 /* nl */, + 04FF456A2D3221BD0085A7B2 /* ro */, + 04FF456E2D3222620085A7B2 /* lt */, + 04FF45722D3222B40085A7B2 /* sv */, + 04FF45762D3223130085A7B2 /* et */, + 04FF457A2D3223620085A7B2 /* pl */, + 04FF457E2D3223A90085A7B2 /* sk */, + 04FF45822D3223EA0085A7B2 /* cs */, + 04FF45862D323B300085A7B2 /* he */, + 04FF458A2D323B6F0085A7B2 /* el */, + 04FF458E2D323DE60085A7B2 /* sr */, + 04FF45922D323EAC0085A7B2 /* tr */, + 04FF45962D323EEF0085A7B2 /* hu */, + 04FF459A2D323F610085A7B2 /* bg */, + 04FF459E2D3240110085A7B2 /* kk */, + 04FF45A22D32414C0085A7B2 /* hr */, + 04FF45A62D32418D0085A7B2 /* th */, + 04FF45AA2D32420B0085A7B2 /* id */, + 04FF45AE2D32424F0085A7B2 /* fi */, + 04FF45B22D3242920085A7B2 /* da */, + 04FF45B62D3243560085A7B2 /* zh-HK */, + 04FF45BA2D32437B0085A7B2 /* zh-Hant */, + 04FF45BE2D3247190085A7B2 /* bn */, ); name = Main.storyboard; sourceTree = ""; @@ -760,10 +1075,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -773,7 +1086,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -858,10 +1170,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -871,7 +1181,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -885,10 +1194,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -897,7 +1204,6 @@ ); PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.skychip.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -911,10 +1217,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -924,7 +1228,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.xhjcn.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1255,10 +1558,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1268,7 +1569,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1353,10 +1653,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1366,7 +1664,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.dev; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.dev.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1451,10 +1748,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1464,7 +1759,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.xhjcn.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme index 2767a19f..9cae57e2 100755 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme @@ -24,7 +24,7 @@ main() async { - F.appFlavor = Flavor.xhj_pre; + F.appFlavor = Flavor.xhj; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart b/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart index 2779eb4b..e877bae0 100644 --- a/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart +++ b/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart @@ -31,16 +31,16 @@ class WxPushWeChatMiniProgramTool { final MiniProgram miniProgram = MiniProgram( username: 'gh_93a4493485e1', // 微信小程序原始ID - path: 'pages/index/index', // 跳转的小程序页面路径,可选 - miniProgramType: WXMiniProgramType.release, // 小程序版本类型 + // path: 'pages/index/index', // 跳转的小程序页面路径,可选 + // miniProgramType: WXMiniProgramType.release, // 小程序版本类型 ); await fluwx.open(target: miniProgram); } else { final MiniProgram miniProgram = MiniProgram( username: 'gh_93a4493485e1', // 微信小程序原始ID - path: 'pages/index/index', // 跳转的小程序页面路径,可选 - miniProgramType: WXMiniProgramType.release, // 小程序版本类型 + // path: 'pages/index/index', // 跳转的小程序页面路径,可选 + // miniProgramType: WXMiniProgramType.release, // 小程序版本类型 ); await fluwx.open(target: miniProgram); From 668ee177e15cd6eaa73002757448dad93d1f0da4 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 14:53:41 +0800 Subject: [PATCH 32/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index de33726d..ce86b0c2 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -110,7 +110,7 @@ platform :android do print_log "build flavor for: #{flavor}" build_number = Time.now.strftime("%Y%m%d%H") print_log "BuildNo #{build_number}" - build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] +# build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] print_log "buildVersion #{build_version}" commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] From 997266c3bf0a8f596809e366aca2dd5343667388 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 14:55:08 +0800 Subject: [PATCH 33/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index ce86b0c2..ab49a8d7 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -105,17 +105,17 @@ platform :android do desc "Build & upload a new version to Gitlab Release" lane :release_bundle do |options| - flavor = options[:flavor] - UI.user_error!("flavor is required") unless flavor - print_log "build flavor for: #{flavor}" - build_number = Time.now.strftime("%Y%m%d%H") - print_log "BuildNo #{build_number}" +# flavor = options[:flavor] +# UI.user_error!("flavor is required") unless flavor +# print_log "build flavor for: #{flavor}" +# build_number = Time.now.strftime("%Y%m%d%H") +# print_log "BuildNo #{build_number}" # build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] - print_log "buildVersion #{build_version}" - commit_hash = last_git_commit - short_hash = commit_hash[:abbreviated_commit_hash] - print_log "last_git_commit_short_hash #{short_hash}" - remove_zone_pre_build(zone:"cn",extensions:".dart") +# print_log "buildVersion #{build_version}" +# commit_hash = last_git_commit +# short_hash = commit_hash[:abbreviated_commit_hash] +# print_log "last_git_commit_short_hash #{short_hash}" +# remove_zone_pre_build(zone:"cn",extensions:".dart") Dir.chdir "../.." do sh("flutter","pub","get") #sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") From e42d4be863675192bf0327326bbd8e824a87cdce Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 14:57:02 +0800 Subject: [PATCH 34/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index ab49a8d7..7e94bf29 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -115,7 +115,7 @@ platform :android do # commit_hash = last_git_commit # short_hash = commit_hash[:abbreviated_commit_hash] # print_log "last_git_commit_short_hash #{short_hash}" -# remove_zone_pre_build(zone:"cn",extensions:".dart") + remove_zone_pre_build(zone:"cn",extensions:".dart") Dir.chdir "../.." do sh("flutter","pub","get") #sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") From 01f43048ea333e7681fbd4846d91e7d816d83878 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 15:06:32 +0800 Subject: [PATCH 35/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 7e94bf29..905af956 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -153,10 +153,10 @@ platform :android do puts "start prepare zone: #{zone},pathList:#{pathList},extensions:#{extensions}" regexp_List = [/#<#{zone}>.*?#<\/#{zone}>/m,/\/\/\<#{zone}\>.*?\/\/\<\/#{zone}\>/m] UI.message("Processed RegExpList: #{regexp_List}") - def process_file(file_path, regexp_List) + def process_file(file_path, regexpList) content = File.read(file_path) - regexp_List.each do |tag| - content = content.gsub(tag) + regexpList.each do |tag| + content = content.gsub(tag,'><') end File.write(file_path, content) UI.message("Processed file: #{file_path},content : #{content}") @@ -167,11 +167,11 @@ platform :android do if File.directory?(realPath) Dir.glob("#{realPath}/**/*").each do |file| if extensions.include?(File.extname(file)) - process_file(file) + process_file(file,regexp_List) end end elsif File.file?(realPath) - process_file(realPath) + process_file(realPath,regexp_List) else UI.message("Invalid path: #{realPath}") end From 0424166eb0f9de3d3f79fb736302cdcd444f5da1 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 15:19:24 +0800 Subject: [PATCH 36/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 905af956..c955ecc6 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -156,17 +156,19 @@ platform :android do def process_file(file_path, regexpList) content = File.read(file_path) regexpList.each do |tag| - content = content.gsub(tag,'><') + content = content.gsub(tag,'') end File.write(file_path, content) - UI.message("Processed file: #{file_path},content : #{content}") + UI.message("Processed file: #{file_path},content :\n #{content}") end pathList.each do |path| realPath = File.join($path_dir_build, path) if File.directory?(realPath) Dir.glob("#{realPath}/**/*").each do |file| - if extensions.include?(File.extname(file)) + if File.directory?(realPath) + UI.message("Find child dir path: #{file}") + elsif extensions.include?(File.extname(file)) process_file(file,regexp_List) end end From 037588926f3429ff12a69da5778a1bd129610f83 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 15:22:16 +0800 Subject: [PATCH 37/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index c955ecc6..23a83d1f 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -166,7 +166,7 @@ platform :android do realPath = File.join($path_dir_build, path) if File.directory?(realPath) Dir.glob("#{realPath}/**/*").each do |file| - if File.directory?(realPath) + if File.directory?(file) UI.message("Find child dir path: #{file}") elsif extensions.include?(File.extname(file)) process_file(file,regexp_List) From 2b80a68d11aa5301fa5af710d874d3503ebb72e3 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 16:05:41 +0800 Subject: [PATCH 38/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 4 +-- android/build.sh | 6 ++--- android/fastlane/Fastfile | 41 +++++++++++++++------------- ios/build.sh | 10 +++---- ios/fastlane/Fastfile | 56 ++++++++++++++++++++++++++++++++++++++- 5 files changed, 86 insertions(+), 31 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3203135a..1704ba4b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,7 +62,7 @@ variables: before_script: - ls -li - export NEXT_VERSION="$(cat app_new.version)" - - flutter pub get +# - flutter pub get - bundle install --gemfile android/Gemfile --quiet cache: paths: @@ -73,7 +73,7 @@ variables: before_script: - ls -li - export NEXT_VERSION="$(cat app_new.version)" - - flutter pub get +# - flutter pub get - bundle install --gemfile ios/Gemfile --quiet cache: paths: diff --git a/android/build.sh b/android/build.sh index 29c3f686..6482e5a0 100755 --- a/android/build.sh +++ b/android/build.sh @@ -26,9 +26,7 @@ elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then bundle exec fastlane beta flavor:sky env:dev --verbose elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then echo "===build pre===${NEXT_VERSION}" -# bundle exec fastlane beta flavor:xhj env:pre --verbose -# bundle exec fastlane beta flavor:sky env:pre --verbose - bundle exec fastlane release_bundle flavor:xhj --verbose - bundle exec fastlane release_bundle flavor:sky --verbose + bundle exec fastlane beta flavor:xhj env:pre --verbose + bundle exec fastlane beta flavor:sky env:pre --verbose fi exit 0 \ No newline at end of file diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 23a83d1f..937b5290 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -67,7 +67,9 @@ platform :android do commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"com") Dir.chdir "../.." do + sh("flutter","pub","get") sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}_#{env}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end old_file_path = File.join($path_apk_output_dir, "app-#{flavor}_#{env}-release.apk") @@ -93,10 +95,10 @@ platform :android do commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] print_log "last_git_commit_short_hash #{short_hash}" - remove_zone_pre_build(zone:"com",extensions:".dart") + remove_zone_pre_build(zone:"com") Dir.chdir "../.." do sh("flutter","pub","get") - #sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") + sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end old_apk_file_path = File.join($path_apk_output_dir, "app-#{flavor}-release.apk") new_apk_file_path = File.join($path_apk_output_dir, "starlock-#{flavor}-release-"+$current_tag+".apk") @@ -105,25 +107,25 @@ platform :android do desc "Build & upload a new version to Gitlab Release" lane :release_bundle do |options| -# flavor = options[:flavor] -# UI.user_error!("flavor is required") unless flavor -# print_log "build flavor for: #{flavor}" -# build_number = Time.now.strftime("%Y%m%d%H") -# print_log "BuildNo #{build_number}" -# build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] -# print_log "buildVersion #{build_version}" -# commit_hash = last_git_commit -# short_hash = commit_hash[:abbreviated_commit_hash] -# print_log "last_git_commit_short_hash #{short_hash}" - remove_zone_pre_build(zone:"cn",extensions:".dart") + flavor = options[:flavor] + UI.user_error!("flavor is required") unless flavor + print_log "build flavor for: #{flavor}" + build_number = Time.now.strftime("%Y%m%d%H") + print_log "BuildNo #{build_number}" + build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0] + print_log "buildVersion #{build_version}" + commit_hash = last_git_commit + short_hash = commit_hash[:abbreviated_commit_hash] + print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"cn") Dir.chdir "../.." do sh("flutter","pub","get") - #sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") + sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end -# old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab") -# new_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/starlock-#{flavor}-release-"+$current_tag+".aab") -# File.rename(old_bundle_file_path, new_bundle_file_path) -# sh('cp',new_bundle_file_path,$path_apk_output_dir) + old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab") + new_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/starlock-#{flavor}-release-"+$current_tag+".aab") + File.rename(old_bundle_file_path, new_bundle_file_path) + sh('cp',new_bundle_file_path,$path_apk_output_dir) end lane :upload_file_to_pgy do |options| @@ -146,7 +148,7 @@ platform :android do zone = options[:zone] UI.user_error!("Please provide valid 'zone'") unless zone pathList=["pubspec.yaml","/lib/apm"] - extensions = options[:extensions] # 文件扩展名数组 + extensions = [".dart"] #options[:extensions] if pathList.empty? || extensions.empty? UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.") end @@ -180,4 +182,5 @@ platform :android do end UI.success("All matching content removed from specified files.") end + end diff --git a/ios/build.sh b/ios/build.sh index 2900f4d8..a8a977bf 100755 --- a/ios/build.sh +++ b/ios/build.sh @@ -7,18 +7,18 @@ export ENV_BUILD_BRANCH=${CI_COMMIT_BRANCH} export ENV_BUILD_WORKSPACE=${CI_PROJECT_DIR} echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}" cd ${CI_PROJECT_DIR}/ios -bundle exec pod install +#bundle exec pod install echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}" regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$' if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then echo "===build canary_release: ${NEXT_VERSION}" export ENV_BUILD_TAG=${NEXT_VERSION} - bundle exec fastlane release flavor:xhj --verbose - bundle exec fastlane release flavor:sky --verbose + bundle exec fastlane release_ipa flavor:xhj --verbose + bundle exec fastlane release_ipa flavor:sky --verbose elif [[ $ENV_BUILD_TAG =~ $regex ]]; then echo "===build release===$ENV_BUILD_TAG" - bundle exec fastlane release flavor:xhj --verbose - bundle exec fastlane release flavor:sky --verbose + bundle exec fastlane release_ipa flavor:xhj --verbose + bundle exec fastlane release_ipa flavor:sky --verbose elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then echo "===build dev===${NEXT_VERSION}" bundle exec fastlane beta flavor:xhj env:Dev --verbose diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index e43dcdf3..169ea544 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -84,6 +84,13 @@ platform :ios do commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"com") + Dir.chdir "../.." do + sh("flutter","pub","get") + end + Dir.chdir ".." do + sh("bundle", "exec" ,"pod", "install") + end Dir.chdir "../.." do sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end @@ -119,7 +126,7 @@ platform :ios do end desc "Build & Deliver to App Store Connect" - lane :release do |options| + lane :release_ipa do |options| flavor = options[:flavor] UI.user_error!("flavor is required") unless flavor print_log "build flavor: #{flavor}" @@ -130,6 +137,13 @@ platform :ios do commit_hash = last_git_commit short_hash = commit_hash[:abbreviated_commit_hash] print_log "last_git_commit_short_hash #{short_hash}" + remove_zone_pre_build(zone:"com") + Dir.chdir "../.." do + sh("flutter","pub","get") + end + Dir.chdir ".." do + sh("bundle", "exec" ,"pod", "install") + end Dir.chdir "../.." do sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}") end @@ -188,6 +202,46 @@ platform :ios do end end + lane :remove_zone_pre_build do |options| + sh("git", "reset", "--hard") + zone = options[:zone] + UI.user_error!("Please provide valid 'zone'") unless zone + pathList=["pubspec.yaml","/lib/apm"] + extensions = [".dart"] #options[:extensions] + if pathList.empty? || extensions.empty? + UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.") + end + puts "start prepare zone: #{zone},pathList:#{pathList},extensions:#{extensions}" + regexp_List = [/#<#{zone}>.*?#<\/#{zone}>/m,/\/\/\<#{zone}\>.*?\/\/\<\/#{zone}\>/m] + UI.message("Processed RegExpList: #{regexp_List}") + def process_file(file_path, regexpList) + content = File.read(file_path) + regexpList.each do |tag| + content = content.gsub(tag,'') + end + File.write(file_path, content) + UI.message("Processed file: #{file_path},content :\n #{content}") + end + + pathList.each do |path| + realPath = File.join($path_dir_build, path) + if File.directory?(realPath) + Dir.glob("#{realPath}/**/*").each do |file| + if File.directory?(file) + UI.message("Find child dir path: #{file}") + elsif extensions.include?(File.extname(file)) + process_file(file,regexp_List) + end + end + elsif File.file?(realPath) + process_file(realPath,regexp_List) + else + UI.message("Invalid path: #{realPath}") + end + end + UI.success("All matching content removed from specified files.") + end + end From a8acd7014863b7d61623bb0b3027f97d020d760c Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 16:18:48 +0800 Subject: [PATCH 39/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 4 ++-- android/fastlane/Fastfile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 60965d82..09b8cd64 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -23,9 +23,9 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' -// START: FlutterFire Configuration +// apply plugin: 'com.google.gms.google-services' -// END: FlutterFire Configuration +// apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.android.application' diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 937b5290..a99f62f0 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -147,8 +147,8 @@ platform :android do sh("git", "reset", "--hard") zone = options[:zone] UI.user_error!("Please provide valid 'zone'") unless zone - pathList=["pubspec.yaml","/lib/apm"] - extensions = [".dart"] #options[:extensions] + pathList=["pubspec.yaml","/android/app/build.gradle","/lib/apm"] + extensions = [".dart",".gradle"] #options[:extensions] if pathList.empty? || extensions.empty? UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.") end From 5e62a568bf6b89281e5d09912d4641db036962fb Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 16:27:37 +0800 Subject: [PATCH 40/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/app/build.gradle b/android/app/build.gradle index 09b8cd64..587f16e3 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -307,6 +307,8 @@ dependencies { implementation 'cn.jiguang.sdk.plugin:vivo:5.2.3' // Umeng统计 + // implementation 'com.umeng.umsdk:common:9.7.9' implementation 'com.umeng.umsdk:asms:1.8.5' + // } From 394573499c03f1ed50c5af129dc85c0ec0cf3814 Mon Sep 17 00:00:00 2001 From: ci_bot Date: Sat, 11 Jan 2025 17:06:18 +0800 Subject: [PATCH 41/67] =?UTF-8?q?fix:=20=E5=85=B3=E9=97=ADiOS=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner.xcodeproj/project.pbxproj | 49 +++++++++++++------ .../xcshareddata/xcschemes/xhj.xcscheme | 2 +- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 43f75e59..26844532 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1075,8 +1075,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1086,6 +1088,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1170,8 +1173,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P8997RW3V8; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1181,6 +1186,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1194,8 +1200,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1204,6 +1212,7 @@ ); PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.skychip.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1217,8 +1226,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P8997RW3V8; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1228,6 +1239,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.xhjcn.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1558,8 +1570,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1569,6 +1583,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1653,8 +1668,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1664,6 +1681,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.dev; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.dev.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1748,8 +1766,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P8997RW3V8; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1759,6 +1779,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.xhjcn.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme index 9cae57e2..2767a19f 100755 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme @@ -24,7 +24,7 @@ Date: Sat, 11 Jan 2025 18:12:42 +0800 Subject: [PATCH 42/67] =?UTF-8?q?ci:=20cn=E3=80=81com=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91=E5=88=86=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index bbe2c4e5..a25d730e 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,7 +17,6 @@ import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/translations/trans_lib.dart'; -import 'package:umeng_common_sdk/umeng_common_sdk.dart'; import 'apm/apm_helper.dart'; import 'app.dart'; From 1dad43774329c92a2b78a155c42a6c31bcbda27e Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 18:30:14 +0800 Subject: [PATCH 43/67] =?UTF-8?q?other:=20=E8=A1=A5=E5=85=85xhj=20google?= =?UTF-8?q?=20firebase=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/xhj/google-services.json | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 android/app/src/xhj/google-services.json diff --git a/android/app/src/xhj/google-services.json b/android/app/src/xhj/google-services.json new file mode 100644 index 00000000..791f2d92 --- /dev/null +++ b/android/app/src/xhj/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "28150044todo", + "project_id": "skychip2023-etodo", + "storage_bucket": "skychip2023-etodo.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4Dank9todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file From 95ddd037a57f99bb1260aba7743cc75c5d64d392 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sat, 11 Jan 2025 18:40:36 +0800 Subject: [PATCH 44/67] =?UTF-8?q?other:=20=E7=A7=BB=E9=99=A4=E5=8E=9F?= =?UTF-8?q?=E7=94=9Fumeng=E5=AF=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/kotlin/com/skychip/lock/App.kt | 4 ---- .../app/src/main/kotlin/com/skychip/lock/MainActivity.kt | 6 ------ 2 files changed, 10 deletions(-) diff --git a/android/app/src/main/kotlin/com/skychip/lock/App.kt b/android/app/src/main/kotlin/com/skychip/lock/App.kt index 8d709523..06adbaf6 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/App.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/App.kt @@ -2,15 +2,11 @@ package com.skychip.lock import io.flutter.app.FlutterApplication import android.util.Log -//import com.umeng.commonsdk.UMConfigure; class App : FlutterApplication() { override fun onCreate() { super.onCreate() -// UMConfigure.setLogEnabled(true); - //友盟预初始化 -// UMConfigure.preInit(getApplicationContext(), "671244cf80464b33f6df9648", "Product"); Log.d("MyApplication", "Application has started") } } \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt index c788ca3c..76fc8e66 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt @@ -12,16 +12,10 @@ import android.bluetooth.BluetoothAdapter; import androidx.core.content.FileProvider import java.io.File -import com.umeng.commonsdk.UMConfigure - class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) GeneratedPluginRegistrant.registerWith(flutterEngine!!) - - // 初始化 Umeng SDK -// UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null) - MethodChannel( flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend" From 89feec402ea83b4e230c747d093b0980c0a6c3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Sat, 11 Jan 2025 18:55:40 +0800 Subject: [PATCH 45/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E8=AE=B0=E5=BD=95=E5=8F=B3=E4=B8=8A=E8=A7=92?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=B8=8A=E4=BC=A0=E7=BC=BA=E5=B0=91=E8=93=9D?= =?UTF-8?q?=E7=89=99=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main/lockDetail/doorLockLog/doorLockLog_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 561cf30b..69a9fec2 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -123,7 +123,7 @@ class _DoorLockLogPageState extends State with RouteAware { void _onMenuItemSelected(String value) { if (value == '读取记录'.tr) { - logic.mockNetworkDataRequest(isRefresh: true); + logic.getLockRecordLastUploadDataTime(); } else if (value == '清空记录'.tr) { ShowCupertinoAlertView().showClearOperationRecordAlert(clearClick: () { logic.clearOperationRecordRequest(); From 4d6ca7ac20f34e9eea40889e5c414f99c7d30790 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 13 Jan 2025 16:52:21 +0800 Subject: [PATCH 46/67] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8Dandroid?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E5=92=8C=E5=AE=9A=E4=BD=8D=E4=BF=A1=E6=81=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gaode/lockAddressGaoDe_page.dart | 258 ++++++++---------- pubspec.yaml | 4 +- 2 files changed, 116 insertions(+), 146 deletions(-) diff --git a/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart b/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart index 44483d67..ce2f6f09 100755 --- a/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart +++ b/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart @@ -1,4 +1,3 @@ - import 'dart:async'; import 'dart:io'; @@ -31,11 +30,13 @@ class LockAddressGaoDePage extends StatefulWidget { class _LockAddressGaoDePageState extends State with RouteAware { final LockAddressGaoDeLogic logic = Get.put(LockAddressGaoDeLogic()); - final LockAddressGaoDeState state = Get.find().state; + final LockAddressGaoDeState state = Get + .find() + .state; // 高德地图 static AMapApiKey amapApiKeys = - AMapApiKey(iosKey: F.aMapKey.iosKey, androidKey: F.aMapKey.androidKey); + AMapApiKey(iosKey: F.aMapKey.iosKey, androidKey: F.aMapKey.androidKey); AMapController? mapController; AMapFlutterLocation location = AMapFlutterLocation(); @@ -52,51 +53,16 @@ class _LockAddressGaoDePageState extends State requestPermission(); } - // Future requestPermission() async { - // final status = await Permission.location.request(); - // AppLog.log("Permission.location.request()=status:$status"); - // permissionStatus = status; - // if(Platform.isIOS){ - // _setLocationOption(); - // requestIOSLocation(); - // } - // switch (status) { - // case PermissionStatus.denied: - // // AppLog.log("拒绝"); - // break; - // case PermissionStatus.granted: - // if(Platform.isIOS){ - // // _setLocationOption(); - // // requestIOSLocation(); - // }else{ - // requestAndroidLocation(); - // location.startLocation(); - // } - // break; - // case PermissionStatus.limited: - // // AppLog.log("限制"); - // break; - // case PermissionStatus.permanentlyDenied: - // // AppLog.log("永久的否认"); - // break; - // case PermissionStatus.provisional: - // // AppLog.log("临时"); - // break; - // default: - // // AppLog.log("其他状态"); - // // requestLocation(); - // break; - // } - // } Future requestPermission() async { final bool status = await PermissionDialog.request(Permission.location); - if(Platform.isIOS){ + if (Platform.isIOS) { _setLocationOption(); requestIOSLocation(); } if (!Platform.isIOS || status) { + _setLocationOption(); requestAndroidLocation(); location.startLocation(); } @@ -114,19 +80,18 @@ class _LockAddressGaoDePageState extends State } Future requestIOSLocation() async { - location = AMapFlutterLocation() - ..setLocationOption(AMapLocationOption()) - ..onLocationChanged().listen((Map event) { - // AppLog.log("listenLocationChanged$event"); - // EasyLoading.dismiss(); - if (event.isNotEmpty) { - setState(() { - addressInfo = event; - }); - // location.stopLocation(); - } - }) - ..startLocation(); + location.setLocationOption(AMapLocationOption()); + location.onLocationChanged().listen((Map event) { + // AppLog.log("listenLocationChanged$event"); + // EasyLoading.dismiss(); + if (event.isNotEmpty) { + setState(() { + addressInfo = event; + }); + // location.stopLocation(); + } + }); + location.startLocation(); } @override @@ -152,85 +117,88 @@ class _LockAddressGaoDePageState extends State SizedBox( child: (addressInfo != null && addressInfo!.containsKey('latitude')) ? Column( + children: [ + SizedBox( + height: 1.sw / 5 * 4, + width: 1.sw, + child: AMapWidget( + apiKey: amapApiKeys, + // 初始化地图中心 + initialCameraPosition: CameraPosition( + target: LatLng( + double.parse( + addressInfo!['latitude'].toString()), + double.parse( + addressInfo!['longitude'].toString())), + zoom: 10.0, + ), + //定位小蓝点 + myLocationStyleOptions: MyLocationStyleOptions( + true, + ), + // 普通地图normal,卫星地图satellite,夜间视图night,导航视图 navi,公交视图bus, + mapType: MapType.normal, + // 缩放级别范围 + minMaxZoomPreference: + const MinMaxZoomPreference(3, 20), + // 隐私政策包含高德 必须填写 + privacyStatement: const AMapPrivacyStatement( + hasAgree: true, hasContains: true, hasShow: true), + // 地图创建成功时返回AMapController + onMapCreated: (AMapController controller) { + mapController = controller; + }, + onLocationChanged: (AMapLocation location) { + print("onLocationChanged ${location}"); + }, + ), + ), + Container( + // color: Colors.red, + margin: + EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, children: [ - SizedBox( - height: 1.sw / 5 * 4, - width: 1.sw, - child: AMapWidget( - apiKey: amapApiKeys, - // 初始化地图中心 - initialCameraPosition: CameraPosition( - target: LatLng( - double.parse( - addressInfo!['latitude'].toString()), - double.parse( - addressInfo!['longitude'].toString())), - zoom: 10.0, - ), - //定位小蓝点 - myLocationStyleOptions: MyLocationStyleOptions( - true, - ), - // 普通地图normal,卫星地图satellite,夜间视图night,导航视图 navi,公交视图bus, - mapType: MapType.normal, - // 缩放级别范围 - minMaxZoomPreference: - const MinMaxZoomPreference(3, 20), - // 隐私政策包含高德 必须填写 - privacyStatement: const AMapPrivacyStatement( - hasAgree: true, hasContains: true, hasShow: true), - // 地图创建成功时返回AMapController - onMapCreated: (AMapController controller) { - mapController = controller; - }, - ), - ), - Container( - // color: Colors.red, - margin: - EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, + Flexible( + child: Text('检查以确保以下地址是正确的'.tr, + style: TextStyle(fontSize: 24.sp))), + ], + ), + ), + // SizedBox(height: 20.h), + Container( + // color: Colors.red, + // height: 45.h, + margin: EdgeInsets.only( + left: 25.w, top: 20.h, right: 25.w), + child: Column( + children: [ + Row( children: [ - Flexible( - child: Text('检查以确保以下地址是正确的'.tr, - style: TextStyle(fontSize: 24.sp))), + Expanded( + child: Text( + addressInfo!['address'].toString() ?? + '', + style: const TextStyle( + color: Colors.grey, + fontSize: 16, + fontWeight: FontWeight.w500, + overflow: TextOverflow.clip))), ], ), - ), - // SizedBox(height: 20.h), - Container( - // color: Colors.red, - // height: 45.h, - margin: EdgeInsets.only( - left: 25.w, top: 20.h, right: 25.w), - child: Column( - children: [ - Row( - children: [ - Expanded( - child: Text( - addressInfo!['address'].toString() ?? - '', - style: const TextStyle( - color: Colors.grey, - fontSize: 16, - fontWeight: FontWeight.w500, - overflow: TextOverflow.clip))), - ], - ), - SizedBox(height: 5.h), - Container( - height: 1.h, - color: AppColors.mainColor, - ), - ], - )), - ], - ) + SizedBox(height: 5.h), + Container( + height: 1.h, + color: AppColors.mainColor, + ), + ], + )), + ], + ) : SizedBox( - height: 1.sw / 5 * 4 + 65.h * 2, - child: Center(child: Text('地图加载中,请稍候。。。'.tr))), + height: 1.sw / 5 * 4 + 65.h * 2, + child: Center(child: Text('地图加载中,请稍候。。。'.tr))), ), SizedBox(height: 200.h), Row( @@ -242,14 +210,15 @@ class _LockAddressGaoDePageState extends State style: TextStyle(color: Colors.black, fontSize: 24.sp), ), onPressed: () { - Get.toNamed(Routers.addLockSelectCountryPage, arguments: { - 'addressInfo': {}, - 'pwdTimestamp': state.pwdTimestamp.value, - 'lockInfo': state.lockInfo, - 'featureValue': state.featureValue, - 'featureSettingValue': state.featureSettingValue, - 'featureSettingParams': state.featureSettingParams, - }); + Get.toNamed(Routers.addLockSelectCountryPage, + arguments: { + 'addressInfo': {}, + 'pwdTimestamp': state.pwdTimestamp.value, + 'lockInfo': state.lockInfo, + 'featureValue': state.featureValue, + 'featureSettingValue': state.featureSettingValue, + 'featureSettingParams': state.featureSettingParams, + }); }, ), TextButton( @@ -262,15 +231,16 @@ class _LockAddressGaoDePageState extends State logic.showToast('还未获取到位置信息哦,请耐心等待一下!'.tr); return; } - Get.toNamed(Routers.saveLockPage, arguments: { - 'addressInfo': addressInfo, - 'pwdTimestamp': state.pwdTimestamp.value, - 'lockInfo': state.lockInfo, - 'featureValue': state.featureValue, - 'featureSettingValue': state.featureSettingValue, - 'featureSettingParams': state.featureSettingParams, - 'isFromMap': 1, - }); + Get.toNamed(Routers.saveLockPage, + arguments: { + 'addressInfo': addressInfo, + 'pwdTimestamp': state.pwdTimestamp.value, + 'lockInfo': state.lockInfo, + 'featureValue': state.featureValue, + 'featureSettingValue': state.featureSettingValue, + 'featureSettingParams': state.featureSettingParams, + 'isFromMap': 1, + }); // Navigator.pushNamed(context, Routers.saveLockPage); }, ), diff --git a/pubspec.yaml b/pubspec.yaml index fd96384f..487bf75f 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -193,11 +193,11 @@ dependencies: easy_refresh: ^3.3.4 #高德地图定位 - amap_flutter_location: ^3.0.0 + amap_flutter_location: 3.0.0 #权限使用 permission_handler: ^11.3.1 #高德地图地图 - amap_flutter_map: ^3.0.0 + amap_flutter_map: 3.0.0 # 谷歌地图 google_maps_flutter: ^2.2.5 From 65cdddcf3c53abdb8e194c63eee62a6f9f3190b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Mon, 13 Jan 2025 17:46:23 +0800 Subject: [PATCH 47/67] =?UTF-8?q?fix:=201=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=94=B5=E5=AD=90=E9=92=A5=E5=8C=99=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A1=86=E6=B2=A1=E6=9C=89=E4=B8=8B=E5=88=92=E7=BA=BF?= =?UTF-8?q?=E3=80=822=E3=80=81=E7=AE=80=E4=BD=93=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=B9=B4=E6=9C=88=E6=97=A5=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=AE=80=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_zh.json | 10 +++++----- .../view/sendElectronicKeyView_page.dart | 13 ++++++++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lan/lan_zh.json b/lan/lan_zh.json index ce17267b..ecb737fe 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -1113,11 +1113,11 @@ "普通管理员英文": "普通管理员", "网关设备英文": "网关设备", "手机需联网英文": "手机需联网", - "年简称": "Y", - "月简称": "M", - "日简称": "D", - "时简称": "H", - "分简称": "M", + "年简称": "年", + "月简称": "月", + "日简称": "日", + "时简称": "时", + "分简称": "分", "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?" diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index 4aa39e86..9e2b8986 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -154,7 +154,14 @@ class _SendElectronicKeyViewState extends State Container( height: 65.h, padding: EdgeInsets.only(left: 20.w, right: 20.w), - color: Colors.white, + decoration: BoxDecoration( + color: Colors.white, + border: Border( + bottom: BorderSide( + color: AppColors.greyLineColor, // 设置边框颜色 + width: 2.0.h, // 设置边框宽度 + ), + )), child: Row( children: [ Text(titleStr, style: TextStyle(fontSize: 22.sp)), @@ -222,6 +229,10 @@ class _SendElectronicKeyViewState extends State } }, ), + ), + Container( + color: AppColors.greyLineColor, // 设置边框颜色 + height: 2.0.h, // ) ], ), From 65e0656956db66ca61cd4aef6edd25d822f65fab Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 13 Jan 2025 18:19:10 +0800 Subject: [PATCH 48/67] =?UTF-8?q?fix=EF=BC=9Asky=20umeng=20key=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/flavors.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/flavors.dart b/lib/flavors.dart index 1ba07b5c..6479398a 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -224,8 +224,8 @@ class F { channel: 'Product'); case Flavor.sky: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: '6784e6c99a16fe6dcd2b64b0', + iosKey: '6784e6fd8f232a05f1f7d729', channel: 'Product'); case Flavor.xhj_dev: return const UmengKey( From 0dde7c8c1d972391419ce349edc7876b6de7a5ed Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 13 Jan 2025 18:33:32 +0800 Subject: [PATCH 49/67] =?UTF-8?q?other:=20pubspec.lock=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pubspec.lock | 1766 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1766 insertions(+) create mode 100644 pubspec.lock diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 00000000..a31c6a96 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,1766 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "9371d13b8ee442e3bfc08a24e3a1b3742c839abbfaf5eef11b79c4b862c89bf7" + url: "https://pub.dev" + source: hosted + version: "1.3.41" + aj_captcha_flutter: + dependency: "direct main" + description: + name: aj_captcha_flutter + sha256: "5e771eece35b0f99ebc405e7bb2df09509e3a683e38c94a5775e98c19230e3f2" + url: "https://pub.dev" + source: hosted + version: "0.0.1" + aliyun_face_plugin: + dependency: "direct main" + description: + path: aliyun_face_plugin + relative: true + source: path + version: "0.0.1" + amap_flutter_base: + dependency: transitive + description: + name: amap_flutter_base + sha256: "9ef2439b8de7100cdd1b4357701b8ca8c059c0f2d9d0257b81750bbf0c6f53bb" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + amap_flutter_location: + dependency: "direct main" + description: + name: amap_flutter_location + sha256: f35ff00e196d579608e0bc28ccbc1f6f53787644702f947de941f775769cc701 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + amap_flutter_map: + dependency: "direct main" + description: + name: amap_flutter_map + sha256: "9cebb0b2f5fc7d3ae0427e99c41edc883e8f5459f6a28bc850f0f9e16918cf2f" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + app_settings: + dependency: "direct main" + description: + name: app_settings + sha256: "09bc7fe0313a507087bec1a3baf555f0576e816a760cbb31813a88890a09d9e5" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + url: "https://pub.dev" + source: hosted + version: "2.6.0" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: "4bae5ae63e6d6dd17c4aac8086f3dec26c0236f6a0f03416c6c19d830c367cf5" + url: "https://pub.dev" + source: hosted + version: "1.5.8" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + audio_session: + dependency: transitive + description: + name: audio_session + sha256: "343e83bc7809fbda2591a49e525d6b63213ade10c76f15813be9aed6657b3261" + url: "https://pub.dev" + source: hosted + version: "0.1.21" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + url: "https://pub.dev" + source: hosted + version: "4.0.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + auto_orientation: + dependency: "direct main" + description: + name: auto_orientation + sha256: cd56bb59b36fa54cc28ee254bc600524f022a4862f31d5ab20abd7bb1c54e678 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + azlistview: + dependency: "direct main" + description: + name: azlistview + sha256: "93e865f11777a271b439f0d6b00799c0797e9daeec2e082a2e01373809c4b90d" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" + url: "https://pub.dev" + source: hosted + version: "3.3.1" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + camera: + dependency: "direct main" + description: + name: camera + sha256: dfa8fc5a1adaeb95e7a54d86a5bd56f4bb0e035515354c8ac6d262e35cec2ec8 + url: "https://pub.dev" + source: hosted + version: "0.10.6" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: b350ac087f111467e705b2b76cc1322f7f5bdc122aa83b4b243b0872f390d229 + url: "https://pub.dev" + source: hosted + version: "0.10.9+2" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" + url: "https://pub.dev" + source: hosted + version: "0.9.17+5" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 + url: "https://pub.dev" + source: hosted + version: "2.8.0" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + colorfilter_generator: + dependency: "direct main" + description: + name: colorfilter_generator + sha256: ccc2995e440b1d828d55d99150e7cad64624f3cb4a1e235000de3f93cf10d35c + url: "https://pub.dev" + source: hosted + version: "0.0.8" + common_utils: + dependency: "direct main" + description: + name: common_utils + sha256: c26884339b13ff99b0739e56f4b02090c84054ed9dd3a045435cd24e7b99c2c1 + url: "https://pub.dev" + source: hosted + version: "2.1.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "2056db5241f96cdc0126bd94459fc4cdc13876753768fc7a31c425e50a7177d0" + url: "https://pub.dev" + source: hosted + version: "6.0.5" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + convert: + dependency: "direct main" + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crop_your_image: + dependency: "direct main" + description: + name: crop_your_image + sha256: "1dc98a5a35b424007bb0960bed011f2d0eecbcef7839707e97d349520245354c" + url: "https://pub.dev" + source: hosted + version: "0.7.5" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" + crypto: + dependency: "direct main" + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + date_format: + dependency: "direct main" + description: + name: date_format + sha256: a48254e60bdb7f1d5a15cac7f86e37491808056c0a99dbdc850841def4754ddc + url: "https://pub.dev" + source: hosted + version: "2.0.9" + dbus: + dependency: transitive + description: + name: dbus + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + url: "https://pub.dev" + source: hosted + version: "0.7.10" + decimal: + dependency: transitive + description: + name: decimal + sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: f52ab3b76b36ede4d135aab80194df8925b553686f0fa12226b4e2d658e45903 + url: "https://pub.dev" + source: hosted + version: "8.2.2" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" + url: "https://pub.dev" + source: hosted + version: "7.0.2" + dio: + dependency: transitive + description: + name: dio + sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8" + url: "https://pub.dev" + source: hosted + version: "4.0.6" + easy_refresh: + dependency: "direct main" + description: + name: easy_refresh + sha256: "486e30abfcaae66c0f2c2798a10de2298eb9dc5e0bb7e1dba9328308968cae0c" + url: "https://pub.dev" + source: hosted + version: "3.4.0" + encrypt: + dependency: "direct main" + description: + name: encrypt + sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + event_bus: + dependency: "direct main" + description: + name: event_bus + sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + expandable: + dependency: "direct main" + description: + name: expandable + sha256: "9604d612d4d1146dafa96c6d8eec9c2ff0994658d6d09fed720ab788c7f5afc2" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + fast_gbk: + dependency: "direct main" + description: + name: fast_gbk + sha256: "3f0dc0309986f615404ea8d1fccf00a535dc00ee90b88d71492866bd95586489" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + ffi: + dependency: "direct main" + description: + name: ffi + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + file_picker: + dependency: "direct main" + description: + name: file_picker + sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf" + url: "https://pub.dev" + source: hosted + version: "5.3.1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" + url: "https://pub.dev" + source: hosted + version: "0.9.4+2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "8f5d2f6590d51ecd9179ba39c64f722edc15226cc93dcc8698466ad36a4a85a4" + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + sha256: "7e032ade38dec2a92f543ba02c5f72f54ffaa095c60d2132b867eab56de3bc73" + url: "https://pub.dev" + source: hosted + version: "11.3.0" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + sha256: b62a2444767d95067a7e36b1d6e335e0b877968574bbbfb656168c46f2e95a13 + url: "https://pub.dev" + source: hosted + version: "4.2.2" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + sha256: bad44f71f96cfca6c16c9dd4f70b85f123ddca7d5dd698977449fadf298b1782 + url: "https://pub.dev" + source: hosted + version: "0.5.9+2" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "06537da27db981947fa535bb91ca120b4e9cb59cb87278dbdde718558cafc9ff" + url: "https://pub.dev" + source: hosted + version: "3.4.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf + url: "https://pub.dev" + source: hosted + version: "5.4.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + url: "https://pub.dev" + source: hosted + version: "2.17.5" + flustars: + dependency: "direct main" + description: + name: flustars + sha256: "7019ab8d68c0d4759ee122644d91a165d450b0492717f9e7e9d0ce277dcf664b" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_blue_plus: + dependency: "direct main" + description: + name: flutter_blue_plus + sha256: c762a694c2f67b1f492ef19ead2a30ed3254650bafd852cb8933823d13d7c89f + url: "https://pub.dev" + source: hosted + version: "1.32.7" + flutter_bugly: + dependency: "direct main" + description: + name: flutter_bugly + sha256: a968eae20a0684e19222ba3e7b37c100a13549299305ea914d791dc56b4cff9a + url: "https://pub.dev" + source: hosted + version: "1.0.7+1" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" + url: "https://pub.dev" + source: hosted + version: "3.3.1" + flutter_cupertino_datetime_picker: + dependency: "direct main" + description: + name: flutter_cupertino_datetime_picker + sha256: "631fbd3abed4d1151888e053d2153d905663a3b33ff24bdfa64afbcf750682cb" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + flutter_easyloading: + dependency: "direct main" + description: + name: flutter_easyloading + sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c + url: "https://pub.dev" + source: hosted + version: "3.0.5" + flutter_flavorizr: + dependency: "direct dev" + description: + name: flutter_flavorizr + sha256: e9550f67a890b9111ac5a555954f3808cb8c0132ce6dea08e3381964de39b906 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + flutter_hooks: + dependency: transitive + description: + name: flutter_hooks + sha256: cde36b12f7188c85286fba9b38cc5a902e7279f36dd676967106c041dc9dde70 + url: "https://pub.dev" + source: hosted + version: "0.20.5" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" + url: "https://pub.dev" + source: hosted + version: "17.2.4" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af + url: "https://pub.dev" + source: hosted + version: "4.0.1" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" + url: "https://pub.dev" + source: hosted + version: "7.2.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_mjpeg: + dependency: "direct main" + description: + name: flutter_mjpeg + sha256: "46ea3f1a49838deb8e2b01a70b897313c7f985affecfaf3b3bae6f4e15405b6b" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + flutter_native_contact_picker: + dependency: "direct main" + description: + name: flutter_native_contact_picker + sha256: "4df435115a23f7ba9464d945ccda81e02d5906552a2d3daec30feca53c2d051c" + url: "https://pub.dev" + source: hosted + version: "0.0.7" + flutter_pcm_sound: + dependency: "direct main" + description: + name: flutter_pcm_sound + sha256: e963b3a0c7658d57255f6e44fceddff6c7751dff82b7bcd561cfc1d5478d4e20 + url: "https://pub.dev" + source: hosted + version: "1.2.7" + flutter_picker: + dependency: "direct main" + description: + name: flutter_picker + sha256: "2f94c6eefba8697b07e3cd008b75f06b4ba7053cb26d23ae0fcd5932b7dc75af" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + flutter_plugin_android_lifecycle: + dependency: "direct overridden" + description: + name: flutter_plugin_android_lifecycle + sha256: "592dc01a18961a51c24ae5d963b724b2b7fa4a95c100fe8eb6ca8a5a4732cadf" + url: "https://pub.dev" + source: hosted + version: "2.0.18" + flutter_screenutil: + dependency: "direct main" + description: + name: flutter_screenutil + sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de" + url: "https://pub.dev" + source: hosted + version: "5.9.3" + flutter_slidable: + dependency: "direct main" + description: + name: flutter_slidable + sha256: a857de7ea701f276fd6a6c4c67ae885b60729a3449e42766bb0e655171042801 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 + url: "https://pub.dev" + source: hosted + version: "5.2.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_voice_processor: + dependency: "direct main" + description: + name: flutter_voice_processor + sha256: "3c91d8ab34b33016643ae7586a305b81c47c1b66a95b489807c34f127537fcbc" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + url: "https://pub.dev" + source: hosted + version: "8.2.8" + fluwx: + dependency: "direct main" + description: + name: fluwx + sha256: "935194aaa6aa48b99c7ce6200a075e4c9a9480fa4fb91e29255c6a2763c27b13" + url: "https://pub.dev" + source: hosted + version: "4.5.5" + get: + dependency: "direct main" + description: + name: get + sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e + url: "https://pub.dev" + source: hosted + version: "4.6.6" + get_storage: + dependency: "direct main" + description: + name: get_storage + sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + google_maps: + dependency: transitive + description: + name: google_maps + sha256: "47eef3836b49bb030d5cb3afc60b8451408bf34cf753e571b645d6529eb4251a" + url: "https://pub.dev" + source: hosted + version: "7.1.0" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + sha256: c1972cbad779bc5346c49045f26ae45550a0958b1cbca5b524dd3c8954995d28 + url: "https://pub.dev" + source: hosted + version: "2.6.1" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + sha256: "0bcadb80eba39afda77dede89a6caafd3b68f2786b90491eceea4a01c3db181c" + url: "https://pub.dev" + source: hosted + version: "2.8.0" + google_maps_flutter_ios: + dependency: "direct overridden" + description: + name: google_maps_flutter_ios + sha256: "6c50bce26ff73079b4401de5bfe77e89d89138897b9dcc6bdfbc7ada842f2bc1" + url: "https://pub.dev" + source: hosted + version: "2.5.2" + google_maps_flutter_platform_interface: + dependency: transitive + description: + name: google_maps_flutter_platform_interface + sha256: a951981c22d790848efb9f114f81794945bc5c06bc566238a419a92f110af6cb + url: "https://pub.dev" + source: hosted + version: "2.9.5" + google_maps_flutter_web: + dependency: transitive + description: + name: google_maps_flutter_web + sha256: f3155c12119d8a5c2732fdf39ceb5cc095bc662059a03b4ea23294ecebe1d199 + url: "https://pub.dev" + source: hosted + version: "0.5.8" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" + http: + dependency: transitive + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + url: "https://pub.dev" + source: hosted + version: "4.3.0" + image_gallery_saver: + dependency: "direct main" + description: + name: image_gallery_saver + sha256: "0aba74216a4d9b0561510cb968015d56b701ba1bd94aace26aacdd8ae5761816" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "0f57fee1e8bfadf8cc41818bbcd7f72e53bb768a54d9496355d5e8a5681a19f1" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "65d94623e15372c5c51bebbcb820848d7bcb323836e12dfdba60b5d3a8b39e50" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "4f0568120c6fcc0aaa04511cb9f9f4d29fc3d0139884b1d06be88dcec7641d6b" + url: "https://pub.dev" + source: hosted + version: "0.8.12+1" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + jpush_flutter: + dependency: "direct main" + description: + name: jpush_flutter + sha256: bb29ce650c6765a54ecbdd8f448840ecea83b4e24564e554d11eba20ed3b37d9 + url: "https://pub.dev" + source: hosted + version: "2.5.8" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + js_wrapping: + dependency: transitive + description: + name: js_wrapping + sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c + url: "https://pub.dev" + source: hosted + version: "0.7.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + just_audio: + dependency: "direct main" + description: + name: just_audio + sha256: a49e7120b95600bd357f37a2bb04cd1e88252f7cdea8f3368803779b925b1049 + url: "https://pub.dev" + source: hosted + version: "0.9.42" + just_audio_platform_interface: + dependency: transitive + description: + name: just_audio_platform_interface + sha256: "0243828cce503c8366cc2090cefb2b3c871aa8ed2f520670d76fd47aa1ab2790" + url: "https://pub.dev" + source: hosted + version: "4.3.0" + just_audio_web: + dependency: transitive + description: + name: just_audio_web + sha256: "9a98035b8b24b40749507687520ec5ab404e291d2b0937823ff45d92cb18d448" + url: "https://pub.dev" + source: hosted + version: "0.4.13" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + lpinyin: + dependency: "direct main" + description: + name: lpinyin + sha256: "0bb843363f1f65170efd09fbdfc760c7ec34fc6354f9fcb2f89e74866a0d814a" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + matrix2d: + dependency: transitive + description: + name: matrix2d + sha256: "188718dd3bc2a31e372cfd0791b0f77f4f13ea76164147342cc378d9132949e7" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + meta: + dependency: transitive + description: + name: meta + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + network_info_plus: + dependency: "direct main" + description: + name: network_info_plus + sha256: "4601b815b1c6a46d84839f65cd774a7d999738471d910fae00d813e9e98b04e1" + url: "https://pub.dev" + source: hosted + version: "4.1.0+1" + network_info_plus_platform_interface: + dependency: transitive + description: + name: network_info_plus_platform_interface + sha256: "881f5029c5edaf19c616c201d3d8b366c5b1384afd5c1da5a49e4345de82fb8b" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + open_filex: + dependency: "direct main" + description: + name: open_filex + sha256: dcb7bd3d32db8db5260253a62f1564c02c2c8df64bc0187cd213f65f827519bd + url: "https://pub.dev" + source: hosted + version: "4.6.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + sha256: "10259b111176fba5c505b102e3a5b022b51dd97e30522e906d6922c745584745" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d + url: "https://pub.dev" + source: hosted + version: "2.2.4" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" + url: "https://pub.dev" + source: hosted + version: "11.3.1" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" + url: "https://pub.dev" + source: hosted + version: "12.0.13" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + url: "https://pub.dev" + source: hosted + version: "9.4.5" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" + url: "https://pub.dev" + source: hosted + version: "0.1.3+5" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 + url: "https://pub.dev" + source: hosted + version: "4.2.3" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" + url: "https://pub.dev" + source: hosted + version: "0.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" + url: "https://pub.dev" + source: hosted + version: "3.9.1" + qr: + dependency: transitive + description: + name: qr + sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + qr_flutter: + dependency: "direct main" + description: + name: qr_flutter + sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + rational: + dependency: transitive + description: + name: rational + sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + sanitize_html: + dependency: transitive + description: + name: sanitize_html + sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + scrollable_positioned_list: + dependency: transitive + description: + name: scrollable_positioned_list + sha256: "9566352ab9ba05794ee6c8864f154afba5d36c5637d0e3e32c615ba4ceb92772" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" + url: "https://pub.dev" + source: hosted + version: "2.5.3" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "59dc807b94d29d52ddbb1b3c0d3b9d0a67fc535a64e62a5542c8db0513fcb6c2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sp_util: + dependency: transitive + description: + name: sp_util + sha256: "9da43dce5de79c17a787d0626bf01538d63090ca32521200d22a232171c495dc" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d + url: "https://pub.dev" + source: hosted + version: "2.3.3+1" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + steel_crypt: + dependency: transitive + description: + name: steel_crypt + sha256: "4f86a8ddc690ed1adff486faeb4ceece9e09f59cd90c8bd7e2ff48c42ca271dd" + url: "https://pub.dev" + source: hosted + version: "3.0.0+1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + syncfusion_flutter_core: + dependency: transitive + description: + name: syncfusion_flutter_core + sha256: "9f0a4593f7642b2f106e329734d0e5fc746baf8d0a59495eec586cd0d9ba7d02" + url: "https://pub.dev" + source: hosted + version: "22.2.12" + syncfusion_flutter_datepicker: + dependency: "direct main" + description: + name: syncfusion_flutter_datepicker + sha256: c09d8a84f07da41c12b02ac350f4aab8b73be2c51095fca9f9404b2a5af67585 + url: "https://pub.dev" + source: hosted + version: "22.2.12" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + system_settings: + dependency: "direct main" + description: + name: system_settings + sha256: "666693f8dace789bcf1200a88f6132b6906026643a5ee93ff140d3a547e5faf1" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + timelines: + dependency: "direct main" + description: + name: timelines + sha256: "40214f5ab772ff45459cb8c15e5f60505a6828af0c0eb1eec6f29ed911a4c1c5" + url: "https://pub.dev" + source: hosted + version: "0.1.0" + timezone: + dependency: transitive + description: + name: timezone + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" + url: "https://pub.dev" + source: hosted + version: "0.9.4" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + umeng_common_sdk: + dependency: "direct main" + description: + name: umeng_common_sdk + sha256: ba4ac629987f88cb42cb89a0a885be1a93cce8080bb6134014fe2ce4df7bac88 + url: "https://pub.dev" + source: hosted + version: "1.2.8" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + uuid: + dependency: "direct main" + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + video_player: + dependency: "direct main" + description: + name: video_player + sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" + url: "https://pub.dev" + source: hosted + version: "2.9.2" + video_player_android: + dependency: transitive + description: + name: video_player_android + sha256: "134e1ad410d67e18a19486ed9512c72dfc6d8ffb284d0e8f2e99e903d1ba8fa3" + url: "https://pub.dev" + source: hosted + version: "2.4.14" + video_player_avfoundation: + dependency: transitive + description: + name: video_player_avfoundation + sha256: "33224c19775fd244be2d6e3dbd8e1826ab162877bd61123bf71890772119a2b7" + url: "https://pub.dev" + source: hosted + version: "2.6.5" + video_player_platform_interface: + dependency: transitive + description: + name: video_player_platform_interface + sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb" + url: "https://pub.dev" + source: hosted + version: "6.2.3" + video_player_web: + dependency: transitive + description: + name: video_player_web + sha256: "6dcdd298136523eaf7dfc31abaf0dfba9aa8a8dbc96670e87e9d42b6f2caf774" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522" + url: "https://pub.dev" + source: hosted + version: "4.8.0" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "0d21cfc3bfdd2e30ab2ebeced66512b91134b39e72e97b43db2d47dda1c4e53a" + url: "https://pub.dev" + source: hosted + version: "3.16.3" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + url: "https://pub.dev" + source: hosted + version: "2.10.0" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: "9c62cc46fa4f2d41e10ab81014c1de470a6c6f26051a2de32111b2ee55287feb" + url: "https://pub.dev" + source: hosted + version: "3.14.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + url: "https://pub.dev" + source: hosted + version: "4.1.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" From 7e25bb01a9a6c8cad9dc1906fba6cc698ecc6447 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Wed, 15 Jan 2025 19:08:23 +0800 Subject: [PATCH 50/67] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Eapp=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=91=E5=B8=83=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_ar.json | 3 ++- lan/lan_bg.json | 3 ++- lan/lan_bn.json | 3 ++- lan/lan_cs.json | 3 ++- lan/lan_da.json | 3 ++- lan/lan_de.json | 3 ++- lan/lan_el.json | 3 ++- lan/lan_en.json | 3 ++- lan/lan_es.json | 3 ++- lan/lan_et.json | 3 ++- lan/lan_fi.json | 3 ++- lan/lan_fr.json | 3 ++- lan/lan_he.json | 3 ++- lan/lan_hk.json | 3 ++- lan/lan_hr.json | 3 ++- lan/lan_hu.json | 3 ++- lan/lan_id.json | 3 ++- lan/lan_it.json | 3 ++- lan/lan_ja.json | 3 ++- lan/lan_keys.json | 3 ++- lan/lan_kk.json | 3 ++- lan/lan_ko.json | 3 ++- lan/lan_lt.json | 3 ++- lan/lan_ms.json | 3 ++- lan/lan_nl.json | 3 ++- lan/lan_pl.json | 3 ++- lan/lan_pt.json | 3 ++- lan/lan_ro.json | 3 ++- lan/lan_ru.json | 3 ++- lan/lan_sk.json | 3 ++- lan/lan_sr_cyrl.json | 3 ++- lan/lan_sv.json | 3 ++- lan/lan_th.json | 3 ++- lan/lan_tr.json | 3 ++- lan/lan_tw.json | 3 ++- lan/lan_uk.json | 3 ++- lan/lan_vi.json | 3 ++- lan/lan_zh.json | 3 ++- lib/login/login/app_get_version.dart | 2 ++ lib/mine/about/about_page.dart | 37 ++++++++++++++++++++++++++ lib/tools/storage.dart | 2 +- lib/tools/wechat/wechatManageTool.dart | 11 ++++---- 42 files changed, 121 insertions(+), 45 deletions(-) diff --git a/lan/lan_ar.json b/lan/lan_ar.json index cc05a60a..f550d3eb 100644 --- a/lan/lan_ar.json +++ b/lan/lan_ar.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "اتبع النظام", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف بصمات القفل. هل أنت متأكد أنك تريد إعادة ضبطه ؟", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟", + "版本说明": "تعليمات الإصدار" } \ No newline at end of file diff --git a/lan/lan_bg.json b/lan/lan_bg.json index 1ff0814d..2f3d144b 100644 --- a/lan/lan_bg.json +++ b/lan/lan_bg.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Следете система", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "След нулиране, пръстовите отпечатъци на заключването ще бъдат изтрити. Сигурен ли сте, че искате да го нулирате?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?", + "版本说明": "Обяснение на версията" } \ No newline at end of file diff --git a/lan/lan_bn.json b/lan/lan_bn.json index 795fae0c..03eafc2b 100644 --- a/lan/lan_bn.json +++ b/lan/lan_bn.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "এক্ফক্লোসিস্টেম", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?", + "版本说明": "ভার্সনপরিচিতি", } \ No newline at end of file diff --git a/lan/lan_cs.json b/lan/lan_cs.json index 7481a2b9..d0eb38e6 100644 --- a/lan/lan_cs.json +++ b/lan/lan_cs.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Sledovat systém", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetování budou otisky prstů zámku odstraněny. Opravdu ho chcete obnovit?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?", + "版本说明": "Verze" } \ No newline at end of file diff --git a/lan/lan_da.json b/lan/lan_da.json index d31899a2..768ec600 100644 --- a/lan/lan_da.json +++ b/lan/lan_da.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Følg systemet", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?", + "版本说明": "Versionsbeskrivelse", } \ No newline at end of file diff --git a/lan/lan_de.json b/lan/lan_de.json index 049563a7..e6e2f250 100644 --- a/lan/lan_de.json +++ b/lan/lan_de.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "System folgen", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Finger abdrücke des Schlosses gelöscht. Sind Sie sicher, dass Sie es zurücksetzen wollen?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?", + "版本说明": "Versionsbeschreibung" } \ No newline at end of file diff --git a/lan/lan_el.json b/lan/lan_el.json index 82a15dfe..a076aac3 100644 --- a/lan/lan_el.json +++ b/lan/lan_el.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Ακολουθήστε το σύστημα", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;", + "版本说明": "Περιγραφή έκδοσης", } \ No newline at end of file diff --git a/lan/lan_en.json b/lan/lan_en.json index a4376a71..9138e86a 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Follow system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?", + "版本说明": "Version description" } diff --git a/lan/lan_es.json b/lan/lan_es.json index b9c06ea5..3e47d880 100644 --- a/lan/lan_es.json +++ b/lan/lan_es.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Seguir sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Después de restablecer, se eliminarán las huellas dactilares del bloqueo. ¿Está seguro de que desea restablecerlo?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?", + "版本说明": "Instrucciones de versión" } \ No newline at end of file diff --git a/lan/lan_et.json b/lan/lan_et.json index e7209737..63e90c7a 100644 --- a/lan/lan_et.json +++ b/lan/lan_et.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Süsteemi jälgimine", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?", + "版本说明": "Versiooniteave", } \ No newline at end of file diff --git a/lan/lan_fi.json b/lan/lan_fi.json index 727a8557..53aee63c 100644 --- a/lan/lan_fi.json +++ b/lan/lan_fi.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Seuraa järjestelmää", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?", + "版本说明": "Versio", } \ No newline at end of file diff --git a/lan/lan_fr.json b/lan/lan_fr.json index f630b6df..36f4918d 100644 --- a/lan/lan_fr.json +++ b/lan/lan_fr.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Suivre le système", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?", + "版本说明": "Explication de la version", } \ No newline at end of file diff --git a/lan/lan_he.json b/lan/lan_he.json index 4ed3a79a..2214efd6 100644 --- a/lan/lan_he.json +++ b/lan/lan_he.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "מערכת מעקב", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?", + "版本说明": "המידע על גרסה", } \ No newline at end of file diff --git a/lan/lan_hk.json b/lan/lan_hk.json index e774f098..10f8f20f 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "跟隨系統", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置之後,鎖嘅指紋將被刪除。 你確定要重置它啊?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?", + "版本说明": "版本說明" } \ No newline at end of file diff --git a/lan/lan_hr.json b/lan/lan_hr.json index 756e9c3d..2b46ae3f 100644 --- a/lan/lan_hr.json +++ b/lan/lan_hr.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Prati sistem:", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?", + "版本说明": "Informacije o verziji", } \ No newline at end of file diff --git a/lan/lan_hu.json b/lan/lan_hu.json index 5e47b0c3..5f6c38c9 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Follow system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?", + "版本说明": "Versió leírás", } \ No newline at end of file diff --git a/lan/lan_id.json b/lan/lan_id.json index 698dbd83..872dcb41 100644 --- a/lan/lan_id.json +++ b/lan/lan_id.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Sistem mengikuti", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?", + "版本说明": "Catatan versi", } \ No newline at end of file diff --git a/lan/lan_it.json b/lan/lan_it.json index cd375d3c..7bb5d872 100644 --- a/lan/lan_it.json +++ b/lan/lan_it.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Seguire il sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Dopo il reset, le impronte digitali del lucchetto verranno cancellate. Sei sicuro di volerlo resettare?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?", + "版本说明": "Versione" } \ No newline at end of file diff --git a/lan/lan_ja.json b/lan/lan_ja.json index ef2509f4..6c2f6de7 100644 --- a/lan/lan_ja.json +++ b/lan/lan_ja.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "システムに従う", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?", + "版本说明": "バージョン説明", } \ No newline at end of file diff --git a/lan/lan_keys.json b/lan/lan_keys.json index bf8f6820..577abfa7 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -1120,5 +1120,6 @@ "分简称": "分简称", "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?", + "版本说明": "版本说明", } diff --git a/lan/lan_kk.json b/lan/lan_kk.json index 9e6961bc..ee063c9e 100644 --- a/lan/lan_kk.json +++ b/lan/lan_kk.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Жүйені қолдану", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?", + "版本说明": "Версиятын көрсету", } \ No newline at end of file diff --git a/lan/lan_ko.json b/lan/lan_ko.json index eddb7629..0240269d 100644 --- a/lan/lan_ko.json +++ b/lan/lan_ko.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "시스템을 따르십시오", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", + "版本说明": "버전 설명", } \ No newline at end of file diff --git a/lan/lan_lt.json b/lan/lan_lt.json index 3be128da..d9e18b00 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Sekti sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?", + "版本说明": "Versijos aprašymas", } \ No newline at end of file diff --git a/lan/lan_ms.json b/lan/lan_ms.json index 9e382f28..05ed0ebd 100644 --- a/lan/lan_ms.json +++ b/lan/lan_ms.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Ikut system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?", + "版本说明": "Penerangan versi", } \ No newline at end of file diff --git a/lan/lan_nl.json b/lan/lan_nl.json index 545dd0a9..ceb6ec0e 100644 --- a/lan/lan_nl.json +++ b/lan/lan_nl.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Systeem volgen", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?", + "版本说明": "Versieomschrijving", } \ No newline at end of file diff --git a/lan/lan_pl.json b/lan/lan_pl.json index cb25c002..18cfb3d6 100644 --- a/lan/lan_pl.json +++ b/lan/lan_pl.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Śledź system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?", + "版本说明": "Wersja", } \ No newline at end of file diff --git a/lan/lan_pt.json b/lan/lan_pt.json index d77d3b0e..22636d1e 100644 --- a/lan/lan_pt.json +++ b/lan/lan_pt.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Siga o sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?", + "版本说明": "Descrição da versão", } \ No newline at end of file diff --git a/lan/lan_ro.json b/lan/lan_ro.json index e0f4f397..3fe81f0f 100644 --- a/lan/lan_ro.json +++ b/lan/lan_ro.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Urmează sistemul:", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?", + "版本说明": "Descrierea versiunii", } \ No newline at end of file diff --git a/lan/lan_ru.json b/lan/lan_ru.json index be2e5622..cfba1ebf 100644 --- a/lan/lan_ru.json +++ b/lan/lan_ru.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Следуйте системе", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?", + "版本说明": "Объяснение версии", } \ No newline at end of file diff --git a/lan/lan_sk.json b/lan/lan_sk.json index b72ccb15..7606e642 100644 --- a/lan/lan_sk.json +++ b/lan/lan_sk.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Sledovať systém", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetovaní budú prstové odtlačky zámku vymazané. Ste si istí, že chcete obnoviť?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?", + "版本说明": "Popis verzie" } \ No newline at end of file diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json index 381e1bcc..076b29b3 100644 --- a/lan/lan_sr_cyrl.json +++ b/lan/lan_sr_cyrl.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Пратите систем", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Након ресетовања, отисци прстију браве ће бити избрисани. Да ли сте сигурни да желите да га ресетујете?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?", + "版本说明": "Опис верзије" } \ No newline at end of file diff --git a/lan/lan_sv.json b/lan/lan_sv.json index b1f95839..c81b013b 100644 --- a/lan/lan_sv.json +++ b/lan/lan_sv.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Följ system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter återställd, kommer låsets fingeravtryck tas bort. Är du säker på att du vill återställa den?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?", + "版本说明": "Versionsbeskrivning" } \ No newline at end of file diff --git a/lan/lan_th.json b/lan/lan_th.json index 45abbb64..bf4bdf0c 100644 --- a/lan/lan_th.json +++ b/lan/lan_th.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "ระบบติดตามผล", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วลายนิ้วมือของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม", + "版本说明": "คำอธิบายรุ่น" } \ No newline at end of file diff --git a/lan/lan_tr.json b/lan/lan_tr.json index 53ae8ad3..035738ba 100644 --- a/lan/lan_tr.json +++ b/lan/lan_tr.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Sistemi takip et", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?", + "版本说明": "Sürüm açıklaması", } \ No newline at end of file diff --git a/lan/lan_tw.json b/lan/lan_tw.json index 9b69c146..7347b2c4 100644 --- a/lan/lan_tw.json +++ b/lan/lan_tw.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "跟蹤系統", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?", + "版本说明": "版本說明", } \ No newline at end of file diff --git a/lan/lan_uk.json b/lan/lan_uk.json index fc64e240..1df767a6 100644 --- a/lan/lan_uk.json +++ b/lan/lan_uk.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Система стеження за", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?", + "版本说明": "Опис версії", } \ No newline at end of file diff --git a/lan/lan_vi.json b/lan/lan_vi.json index b83db737..5e8939b7 100644 --- a/lan/lan_vi.json +++ b/lan/lan_vi.json @@ -1120,5 +1120,6 @@ "分简称": "M", "跟随系统": "Hệ thống theo dõi", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sau khi đặt lại, dấu vân tay của khóa sẽ bị xóa. Bạn có chắc chắn muốn thiết lập lại nó?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?", + "版本说明": "Thông tin phiên bản" } \ No newline at end of file diff --git a/lan/lan_zh.json b/lan/lan_zh.json index ecb737fe..d5099701 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -1120,5 +1120,6 @@ "分简称": "分", "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", - "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?" + "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?", + "版本说明": "版本说明" } diff --git a/lib/login/login/app_get_version.dart b/lib/login/login/app_get_version.dart index fb738b60..522e2e72 100644 --- a/lib/login/login/app_get_version.dart +++ b/lib/login/login/app_get_version.dart @@ -29,10 +29,12 @@ class Data { Data.fromJson(Map json) { wechatServiceUrl = json['wechat_service_url']; appSiteUrl = json['app_site_url']; + appVersionHistoryUrl = json['app_version_history_url']; } String? wechatServiceUrl; String? appSiteUrl; + String? appVersionHistoryUrl; Map toJson() { final Map data = {}; diff --git a/lib/mine/about/about_page.dart b/lib/mine/about/about_page.dart index 91c2dd68..ba6f4f44 100755 --- a/lib/mine/about/about_page.dart +++ b/lib/mine/about/about_page.dart @@ -1,3 +1,6 @@ +import 'dart:io'; + +import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -9,7 +12,9 @@ import 'package:star_lock/mine/about/about_console.dart'; import '../../app_settings/app_colors.dart'; import '../../flavors.dart'; import '../../tools/commonItem.dart'; +import '../../tools/storage.dart'; import '../../tools/titleAppBar.dart'; +import '../../tools/wechat/wechatManageTool.dart'; class AboutPage extends StatefulWidget { const AboutPage({Key? key}) : super(key: key); @@ -80,6 +85,38 @@ class _AboutPageState extends State { Widget listView() { Widget view = Column( children: [ + CommonItem( + leftTitel: '版本说明'.tr, + rightTitle: '', + isHaveLine: false, + isHaveDirection: true, + action: () async { + WechatManageTool.getAppInfo(() async { + final String? appVersionHistoryBaseUrl = + await Storage.getString(appVersionHistoryUrl); + if (appVersionHistoryBaseUrl == null) { + return; + } + String brandName = ''; + if (Platform.isAndroid) { + final AndroidDeviceInfo androidDeviceInfo = + await DeviceInfoPlugin().androidInfo; + brandName = androidDeviceInfo.manufacturer; + } else { + final IosDeviceInfo iosDeviceInfo = + await DeviceInfoPlugin().iosInfo; + brandName = iosDeviceInfo.systemName ?? 'ios'; + } + final PackageInfo packageInfo = + await PackageInfo.fromPlatform(); + Navigator.pushNamed(context, Routers.webviewShowPage, + arguments: { + 'url': appVersionHistoryBaseUrl + + '?version=${packageInfo.version}&brandName=${brandName}', + 'title': '版本说明'.tr + }); + }); + }), CommonItem( leftTitel: '介绍'.tr, rightTitle: '', diff --git a/lib/tools/storage.dart b/lib/tools/storage.dart index b76f65c4..f4fbf998 100755 --- a/lib/tools/storage.dart +++ b/lib/tools/storage.dart @@ -30,7 +30,7 @@ const String saveLockMainListData = 'lockMainListData'; const String isOpenDeBug = 'isOpenDeBug'; //是否打开 debug const String automaticLockOffTime = 'automaticLockOffTime'; //自动关锁时间 const String associationUrl = 'associationUrl'; //ios跳转微信的 url - +const String appVersionHistoryUrl = 'appVersionHistoryUrl'; //是否同意隐私协议弹窗 class Storage { factory Storage() => _instance; diff --git a/lib/tools/wechat/wechatManageTool.dart b/lib/tools/wechat/wechatManageTool.dart index 9f77c6dc..fa548669 100644 --- a/lib/tools/wechat/wechatManageTool.dart +++ b/lib/tools/wechat/wechatManageTool.dart @@ -1,7 +1,6 @@ - - import '../../login/login/app_get_version.dart'; import '../../network/api_repository.dart'; +import '../storage.dart'; import 'customer_tool.dart'; import 'pay/wx_pay_tool.dart'; @@ -13,12 +12,12 @@ class WechatManageTool { static Future getAppInfo(void Function() action) async { // AppLog.log('AppFirstEnterHandle调用了获取App信息接口'); final GetAppInfo entity = await ApiRepository.to.getAppInfo(); - if(entity.errorCode == 0) { + if (entity.errorCode == 0) { + Storage.setString( + appVersionHistoryUrl, entity.data?.appVersionHistoryUrl ?? ''); CustomerTool.init(entity.data?.wechatServiceUrl ?? ''); WxPayTool.setAssociationUrl(entity.data!.appSiteUrl!); action(); } - } - -} \ No newline at end of file +} From 973a1384feb11d2944812fabc16e7e841ae1bab0 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 16 Jan 2025 09:13:42 +0800 Subject: [PATCH 51/67] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Eapp=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=91=E5=B8=83=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login/login/app_get_version.dart | 2 +- lib/mine/about/about_page.dart | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/login/login/app_get_version.dart b/lib/login/login/app_get_version.dart index 522e2e72..de2a642c 100644 --- a/lib/login/login/app_get_version.dart +++ b/lib/login/login/app_get_version.dart @@ -29,7 +29,7 @@ class Data { Data.fromJson(Map json) { wechatServiceUrl = json['wechat_service_url']; appSiteUrl = json['app_site_url']; - appVersionHistoryUrl = json['app_version_history_url']; + appVersionHistoryUrl = json['appVersionHistoryUrl']; } String? wechatServiceUrl; diff --git a/lib/mine/about/about_page.dart b/lib/mine/about/about_page.dart index ba6f4f44..46632a87 100755 --- a/lib/mine/about/about_page.dart +++ b/lib/mine/about/about_page.dart @@ -117,6 +117,12 @@ class _AboutPageState extends State { }); }); }), + Divider( + height: 1, + color: AppColors.greyLineColor, + indent: 20.w, + endIndent: 20.w, + ), CommonItem( leftTitel: '介绍'.tr, rightTitle: '', From f0a5d142ad3b057d37cb1fa585a2da66bc2668f6 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 16 Jan 2025 16:25:20 +0800 Subject: [PATCH 52/67] =?UTF-8?q?other=EF=BC=9A=E5=85=B6=E4=BB=96=E7=8E=AF?= =?UTF-8?q?=E5=A2=83ummeng=E5=92=8Cfirebase=20key=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/sky_dev/google-services.json | 48 ++++++++++++++++++++ android/app/src/sky_pre/google-services.json | 48 ++++++++++++++++++++ android/app/src/xhj_dev/google-services.json | 48 ++++++++++++++++++++ android/app/src/xhj_pre/google-services.json | 48 ++++++++++++++++++++ lib/flavors.dart | 32 ++++++------- 5 files changed, 208 insertions(+), 16 deletions(-) create mode 100644 android/app/src/sky_dev/google-services.json create mode 100644 android/app/src/sky_pre/google-services.json create mode 100644 android/app/src/xhj_dev/google-services.json create mode 100644 android/app/src/xhj_pre/google-services.json diff --git a/android/app/src/sky_dev/google-services.json b/android/app/src/sky_dev/google-services.json new file mode 100644 index 00000000..6eaa86af --- /dev/null +++ b/android/app/src/sky_dev/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "281500445726", + "project_id": "skychip2023-ecdff", + "storage_bucket": "skychip2023-ecdff.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d20f", + "android_client_info": { + "package_name": "com.skychip.lock.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4d20f", + "android_client_info": { + "package_name": "com.starlock.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/sky_pre/google-services.json b/android/app/src/sky_pre/google-services.json new file mode 100644 index 00000000..2a7a6dbe --- /dev/null +++ b/android/app/src/sky_pre/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "281500445726", + "project_id": "skychip2023-ecdff", + "storage_bucket": "skychip2023-ecdff.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d", + "android_client_info": { + "package_name": "com.skychip.lock.pre" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc", + "android_client_info": { + "package_name": "com.starlock.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/xhj_dev/google-services.json b/android/app/src/xhj_dev/google-services.json new file mode 100644 index 00000000..791f2d92 --- /dev/null +++ b/android/app/src/xhj_dev/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "28150044todo", + "project_id": "skychip2023-etodo", + "storage_bucket": "skychip2023-etodo.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4Dank9todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/xhj_pre/google-services.json b/android/app/src/xhj_pre/google-services.json new file mode 100644 index 00000000..791f2d92 --- /dev/null +++ b/android/app/src/xhj_pre/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "28150044todo", + "project_id": "skychip2023-etodo", + "storage_bucket": "skychip2023-etodo.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4todo", + "android_client_info": { + "package_name": "com.xhjcn.lock.local" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4Dank9todo" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/lib/flavors.dart b/lib/flavors.dart index 6479398a..5334def5 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -199,28 +199,28 @@ class F { switch (appFlavor) { case Flavor.local: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'local-671244cf80464b33f6df9648', + iosKey: 'local-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.dev: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'dev-671244cf80464b33f6df9648', + iosKey: 'dev-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.pre: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'pre-671244cf80464b33f6df9648', + iosKey: 'pre-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.sky_dev: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'sky_dev-671244cf80464b33f6df9648', + iosKey: 'sky_dev-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.sky_pre: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'sky_pre-671244cf80464b33f6df9648', + iosKey: 'sky_pre-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.sky: return const UmengKey( @@ -229,13 +229,13 @@ class F { channel: 'Product'); case Flavor.xhj_dev: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'xhj_dev-671244cf80464b33f6df9648', + iosKey: 'xhj_dev-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.xhj_pre: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'xhj_pre-671244cf80464b33f6df9648', + iosKey: 'xhj_pre-671244ae80464b33f6df9646', channel: 'Product'); case Flavor.xhj: return const UmengKey( @@ -244,8 +244,8 @@ class F { channel: 'Product'); default: return const UmengKey( - androidKey: '671244cf80464b33f6df9648', - iosKey: '671244ae80464b33f6df9646', + androidKey: 'default-671244cf80464b33f6df9648', + iosKey: 'default-671244ae80464b33f6df9646', channel: 'Product'); } } From e9921f1180725a6d82d74ff13c9236d25c0ce2d7 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 20 Jan 2025 13:46:12 +0800 Subject: [PATCH 53/67] =?UTF-8?q?other:=20xhj=20google=E4=B8=8A=E6=9E=B6?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=9B=B4=E6=8D=A2=E5=8C=85=E5=90=8D=E5=92=8C?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=85=B3=E8=81=94?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 17 +++++++++++++++++ android/app/xhj_bundle.jks | Bin 0 -> 2706 bytes android/build.sh | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 android/app/xhj_bundle.jks diff --git a/android/app/build.gradle b/android/app/build.gradle index 587f16e3..87be9e46 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -78,6 +78,13 @@ android { keyAlias = 'upload' keyPassword 'xhj8872' } + + xhj_bundle { + storeFile file("xhj_bundle.jks") + storePassword 'xhj8872' + keyAlias = 'xhj' + keyPassword 'xhj8872' + } } // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) ----- @@ -135,6 +142,16 @@ android { manifestPlaceholders.JPUSH_PKGNAME = "com.xhjcn.lock" proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-xhj.pro' } + + xhj_bundle { + dimension "flavor-type" + applicationId "ltd.xhjcn.lock" + signingConfig signingConfigs.xhj_bundle + resValue "string", "app_name", "Star Lock" + manifestPlaceholders.JPUSH_PKGNAME = "ltd.xhjcn.lock" + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-xhj.pro' + } + xhj_pre { dimension "flavor-type" applicationId "com.xhjcn.lock.pre" diff --git a/android/app/xhj_bundle.jks b/android/app/xhj_bundle.jks new file mode 100644 index 0000000000000000000000000000000000000000..50f0c2c2801e642741012f385c81ac26a9fdfaed GIT binary patch literal 2706 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 p= Date: Mon, 20 Jan 2025 14:10:55 +0800 Subject: [PATCH 54/67] =?UTF-8?q?other:=20xhj=20google=20appbundle=20?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=89=93=E5=8C=85=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main_xhj_bundle_lite.dart | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 lib/main_xhj_bundle_lite.dart diff --git a/lib/main_xhj_bundle_lite.dart b/lib/main_xhj_bundle_lite.dart new file mode 100755 index 00000000..d24e296d --- /dev/null +++ b/lib/main_xhj_bundle_lite.dart @@ -0,0 +1,11 @@ +import 'app_settings/app_settings.dart'; +import 'flavors.dart'; + +import 'main.dart' as runner; + +Future main() async { + F.appFlavor = Flavor.xhj; + F.isLite = true; + // AppLog.log('xhj_lite调用了main函数'); + await runner.main(); +} From 20b21f6c888bf527796a84a8f6661b53f5704b99 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 20 Jan 2025 14:31:41 +0800 Subject: [PATCH 55/67] =?UTF-8?q?other:=20xhj=20google=20appbundle=20?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=89=93=E5=8C=85=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/xhj_bundle/agconnect-services.json | 96 ++++++++++++++++++ .../app/src/xhj_bundle/google-services.json | 29 ++++++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2734 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1662 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3940 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6187 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8600 bytes .../xhj_bundle/res/values-en-rUS/string.xml | 4 + .../xhj_bundle/res/values-zh-rCN/string.xml | 4 + 9 files changed, 133 insertions(+) create mode 100644 android/app/src/xhj_bundle/agconnect-services.json create mode 100644 android/app/src/xhj_bundle/google-services.json create mode 100755 android/app/src/xhj_bundle/res/mipmap-hdpi/ic_launcher.png create mode 100755 android/app/src/xhj_bundle/res/mipmap-mdpi/ic_launcher.png create mode 100755 android/app/src/xhj_bundle/res/mipmap-xhdpi/ic_launcher.png create mode 100755 android/app/src/xhj_bundle/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 android/app/src/xhj_bundle/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/xhj_bundle/res/values-en-rUS/string.xml create mode 100644 android/app/src/xhj_bundle/res/values-zh-rCN/string.xml diff --git a/android/app/src/xhj_bundle/agconnect-services.json b/android/app/src/xhj_bundle/agconnect-services.json new file mode 100644 index 00000000..52e91d21 --- /dev/null +++ b/android/app/src/xhj_bundle/agconnect-services.json @@ -0,0 +1,96 @@ +{ + "agcgw":{ + "backurl":"connect-drcn.hispace.hicloud.com", + "url":"connect-drcn.dbankcloud.cn", + "websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com", + "websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn" + }, + "agcgw_all":{ + "CN":"connect-drcn.dbankcloud.cn", + "CN_back":"connect-drcn.hispace.hicloud.com", + "DE":"connect-dre.dbankcloud.cn", + "DE_back":"connect-dre.hispace.hicloud.com", + "RU":"connect-drru.hispace.dbankcloud.ru", + "RU_back":"connect-drru.hispace.dbankcloud.cn", + "SG":"connect-dra.dbankcloud.cn", + "SG_back":"connect-dra.hispace.hicloud.com" + }, + "websocketgw_all":{ + "CN":"connect-ws-drcn.hispace.dbankcloud.cn", + "CN_back":"connect-ws-drcn.hispace.dbankcloud.com", + "DE":"connect-ws-dre.hispace.dbankcloud.cn", + "DE_back":"connect-ws-dre.hispace.dbankcloud.com", + "RU":"connect-ws-drru.hispace.dbankcloud.ru", + "RU_back":"connect-ws-drru.hispace.dbankcloud.cn", + "SG":"connect-ws-dra.hispace.dbankcloud.cn", + "SG_back":"connect-ws-dra.hispace.dbankcloud.com" + }, + "client":{ + "cp_id":"30086000752967166", + "product_id":"388421841222116270", + "client_id":"1406555529261648640", + "client_secret":"843E8191B02B692239726CF0ED990E1EC2B31928F825AA012B932A128FD2C516", + "project_id":"388421841222116270", + "app_id":"110798531", + "api_key":"DQEDAALnPCtuCgoYOyZfsIDa9/YZZhQ+buDGpypeurXhQUGMajWcVyYLQgXXqV3x2HbI6oyG+Wm2Gf+1hPs6j+wA3B6ylYAXG4aAQA==", + "package_name":"com.xhjcn.lock" + }, + "oauth_client":{ + "client_id":"110798531", + "client_type":1 + }, + "app_info":{ + "app_id":"110798531", + "package_name":"com.xhjcn.lock" + }, + "service":{ + "analytics":{ + "collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com", + "collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn", + "collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn", + "collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "resource_id":"p1", + "channel_id":"" + }, + "edukit":{ + "edu_url":"edukit.cloud.huawei.com.cn", + "dh_url":"edukit.cloud.huawei.com.cn" + }, + "search":{ + "url":"https://search-drcn.cloud.huawei.com" + }, + "cloudstorage":{ + "storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia", + "storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu", + "storage_url_de":"https://ops-dre.agcstorage.link", + "storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn", + "storage_url_sg":"https://ops-dra.agcstorage.link", + "storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn", + "storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn" + }, + "ml":{ + "mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn" + } + }, + "region":"CN", + "configuration_version":"3.0", + "appInfos":[ + { + "package_name":"com.xhjcn.lock", + "client":{ + "app_id":"110798531" + }, + "app_info":{ + "package_name":"com.xhjcn.lock", + "app_id":"110798531" + }, + "oauth_client":{ + "client_type":1, + "client_id":"110798531" + } + } + ] +} \ No newline at end of file diff --git a/android/app/src/xhj_bundle/google-services.json b/android/app/src/xhj_bundle/google-services.json new file mode 100644 index 00000000..453982a0 --- /dev/null +++ b/android/app/src/xhj_bundle/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "448746601330", + "project_id": "smart-lock-12b8c", + "storage_bucket": "smart-lock-12b8c.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:448746601330:android:1a8056175e1dad5e317beb", + "android_client_info": { + "package_name": "ltd.xhjcn.lock" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAm8dJlBY5hjslJDVDBNd2bkWrJlGjAMqw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/xhj_bundle/res/mipmap-hdpi/ic_launcher.png b/android/app/src/xhj_bundle/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..e17ec78d37e5f5d8014c59a9b1e380c5723f871b GIT binary patch literal 2734 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 yupr)pkKWHbB>FG84a3OMySsJqqD!&juoPX~ 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 literal 0 HcmV?d00001 diff --git a/android/app/src/xhj_bundle/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/xhj_bundle/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..58a29a5e322242bc35212bd924afe2509b18503f GIT binary patch literal 8600 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 G@P7auPKKHQ literal 0 HcmV?d00001 diff --git a/android/app/src/xhj_bundle/res/values-en-rUS/string.xml b/android/app/src/xhj_bundle/res/values-en-rUS/string.xml new file mode 100644 index 00000000..7c497348 --- /dev/null +++ b/android/app/src/xhj_bundle/res/values-en-rUS/string.xml @@ -0,0 +1,4 @@ + + + Star Lock + \ No newline at end of file diff --git a/android/app/src/xhj_bundle/res/values-zh-rCN/string.xml b/android/app/src/xhj_bundle/res/values-zh-rCN/string.xml new file mode 100644 index 00000000..384ea2dd --- /dev/null +++ b/android/app/src/xhj_bundle/res/values-zh-rCN/string.xml @@ -0,0 +1,4 @@ + + + 星星锁 + \ No newline at end of file From a960136c7b341f9c51db728421549bf7f559f981 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 20 Jan 2025 14:38:41 +0800 Subject: [PATCH 56/67] =?UTF-8?q?other:=20xhj=20google=20appbundle=20?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=89=93=E5=8C=85=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/xhj_bundle/agconnect-services.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/android/app/src/xhj_bundle/agconnect-services.json b/android/app/src/xhj_bundle/agconnect-services.json index 52e91d21..de206a1a 100644 --- a/android/app/src/xhj_bundle/agconnect-services.json +++ b/android/app/src/xhj_bundle/agconnect-services.json @@ -33,7 +33,7 @@ "project_id":"388421841222116270", "app_id":"110798531", "api_key":"DQEDAALnPCtuCgoYOyZfsIDa9/YZZhQ+buDGpypeurXhQUGMajWcVyYLQgXXqV3x2HbI6oyG+Wm2Gf+1hPs6j+wA3B6ylYAXG4aAQA==", - "package_name":"com.xhjcn.lock" + "package_name":"ltd.xhjcn.lock" }, "oauth_client":{ "client_id":"110798531", @@ -41,7 +41,7 @@ }, "app_info":{ "app_id":"110798531", - "package_name":"com.xhjcn.lock" + "package_name":"ltd.xhjcn.lock" }, "service":{ "analytics":{ @@ -79,12 +79,12 @@ "configuration_version":"3.0", "appInfos":[ { - "package_name":"com.xhjcn.lock", + "package_name":"ltd.xhjcn.lock", "client":{ "app_id":"110798531" }, "app_info":{ - "package_name":"com.xhjcn.lock", + "package_name":"ltd.xhjcn.lock", "app_id":"110798531" }, "oauth_client":{ From 7866a5c60126fd245744f39905b1fc730bc35996 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 20 Jan 2025 17:19:53 +0800 Subject: [PATCH 57/67] =?UTF-8?q?fix:=20sky=20=E9=94=81=E9=80=9A=E9=80=9A?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=86=85=E8=8B=B1=E6=96=87=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_en.json | 2 +- lan/lan_hu.json | 2 +- lan/lan_lt.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lan/lan_en.json b/lan/lan_en.json index 9138e86a..37e99e98 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -1,6 +1,6 @@ { "星锁": "Star Lock", - "锁通通": "Lock Through", + "锁通通": "TTLock Pro", "点击开锁,长按闭锁": "Touch to Unlock,Hold to Lock", "考勤": "Attendance", "考勤设置": "Attendance Settings", diff --git a/lan/lan_hu.json b/lan/lan_hu.json index 5f6c38c9..6398d992 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -1,6 +1,6 @@ { "星锁": "Star lock", - "锁通通": "Lock through", + "锁通通": "TTLock Pro", "点击开锁,长按闭锁": "Érintse fel, hogy kinyit, tartsa zárni", "考勤": "Látogatottság", "考勤设置": "Látogatottsági beállítások", diff --git a/lan/lan_lt.json b/lan/lan_lt.json index d9e18b00..939601de 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -1,6 +1,6 @@ { "星锁": "Žvaigždžių užraktas", - "锁通通": "Lock through", + "锁通通": "TTLock Pro", "点击开锁,长按闭锁": "Palieskite atrakinti, laikykite užrakinti", "考勤": "Lankomumas", "考勤设置": "Lankomumo nustatymai", From e2af53b58b47398c9f5dd70fa5060de3fe7433c2 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Mon, 20 Jan 2025 18:07:00 +0800 Subject: [PATCH 58/67] =?UTF-8?q?ci:=20=E4=BF=AE=E5=A4=8Dxhj=20apkbundle?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0release=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1704ba4b..868db348 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -172,7 +172,7 @@ create-release: url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.apk' link_type: 'package' - name: 'xhj bundle binary package' - url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.aab' + url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab' link_type: 'package' - name: 'sky apk binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.apk' From 9c00533e0f3594d7ea7567da476528fc6dd3e817 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 23 Jan 2025 10:28:11 +0800 Subject: [PATCH 59/67] build trigger From 5c4aab96343f54b0c7fa5c4d8dd37fb1d4ba6e0c Mon Sep 17 00:00:00 2001 From: Liuyf Date: Thu, 23 Jan 2025 10:54:20 +0800 Subject: [PATCH 60/67] =?UTF-8?q?fix=EF=BC=9Afirebase=20base=20on=20iOS=20?= =?UTF-8?q?13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Podfile | 2 +- ios/Podfile.lock | 124 ++++++++++++++++++++++++++- ios/Runner.xcodeproj/project.pbxproj | 18 ++-- 3 files changed, 133 insertions(+), 11 deletions(-) diff --git a/ios/Podfile b/ios/Podfile index 76407fa5..64791de8 100755 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '12.0' +platform :ios, '13.0' #use_modular_headers! use_frameworks! :linkage => :static # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9dca6bdf..e0f0b584 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -77,6 +77,49 @@ PODS: - file_picker (0.0.1): - DKImagePickerController/PhotoGallery - Flutter + - Firebase/Analytics (11.0.0): + - Firebase/Core + - Firebase/Core (11.0.0): + - Firebase/CoreOnly + - FirebaseAnalytics (~> 11.0.0) + - Firebase/CoreOnly (11.0.0): + - FirebaseCore (= 11.0.0) + - firebase_analytics (11.3.0): + - Firebase/Analytics (= 11.0.0) + - firebase_core + - Flutter + - firebase_core (3.4.0): + - Firebase/CoreOnly (= 11.0.0) + - Flutter + - FirebaseAnalytics (11.0.0): + - FirebaseAnalytics/AdIdSupport (= 11.0.0) + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - FirebaseAnalytics/AdIdSupport (11.0.0): + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleAppMeasurement (= 11.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - FirebaseCore (11.0.0): + - FirebaseCoreInternal (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Logger (~> 8.0) + - FirebaseCoreInternal (11.7.0): + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - FirebaseInstallations (11.4.0): + - FirebaseCore (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) - Flutter (1.0.0) - flutter_blue_plus (0.0.1): - Flutter @@ -104,11 +147,58 @@ PODS: - google_maps_flutter_ios (0.0.1): - Flutter - GoogleMaps (< 9.0) + - GoogleAppMeasurement (11.0.0): + - GoogleAppMeasurement/AdIdSupport (= 11.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/AdIdSupport (11.0.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 11.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/WithoutAdIdSupport (11.0.0): + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) - GoogleMaps (6.2.1): - GoogleMaps/Maps (= 6.2.1) - GoogleMaps/Base (6.2.1) - GoogleMaps/Maps (6.2.1): - GoogleMaps/Base + - GoogleUtilities/AppDelegateSwizzler (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.0.2): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.0.2): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.0.2)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.0.2) + - GoogleUtilities/Reachability (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy - image_gallery_saver (2.0.2): - Flutter - image_picker_ios (0.0.1): @@ -123,6 +213,11 @@ PODS: - JPush (= 5.3.0) - just_audio (0.0.1): - Flutter + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) - network_info_plus (0.0.1): - Flutter - open_filex (0.0.2): @@ -134,6 +229,7 @@ PODS: - FlutterMacOS - permission_handler_apple (9.3.0): - Flutter + - PromisesObjC (2.4.0) - SDWebImage (5.19.2): - SDWebImage/Core (= 5.19.2) - SDWebImage/Core (5.19.2) @@ -177,6 +273,8 @@ DEPENDENCIES: - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - Flutter (from `Flutter`) - flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`) - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`) @@ -222,10 +320,19 @@ SPEC REPOS: - Bugly - DKImagePickerController - DKPhotoGallery + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - GoogleAppMeasurement - GoogleMaps + - GoogleUtilities - ios-voice-processor - JCore - JPush + - nanopb + - PromisesObjC - SDWebImage - SwiftyGif - Toast @@ -258,6 +365,10 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/device_info_plus/ios" file_picker: :path: ".symlinks/plugins/file_picker/ios" + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" Flutter: :path: Flutter flutter_blue_plus: @@ -336,6 +447,13 @@ SPEC CHECKSUMS: DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475 file_picker: ce3938a0df3cc1ef404671531facef740d03f920 + Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9 + firebase_analytics: 1a66fe8d4375eccff44671ea37897683a78b2675 + firebase_core: ceec591a66629daaee82d3321551692c4a871493 + FirebaseAnalytics: 27eb78b97880ea4a004839b9bac0b58880f5a92a + FirebaseCore: 3cf438f431f18c12cdf2aaf64434648b63f7e383 + FirebaseCoreInternal: d6c17dafc8dc33614733a8b52df78fcb4394c881 + FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96 flutter_bugly: bf35df32a9c5d50b8aacdd35bd8ddc5b55150dae @@ -346,7 +464,9 @@ SPEC CHECKSUMS: fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849 google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99 + GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 + GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1 @@ -354,11 +474,13 @@ SPEC CHECKSUMS: JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5 just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4 package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec @@ -373,6 +495,6 @@ SPEC CHECKSUMS: webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1 WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f -PODFILE CHECKSUM: a4d4747e9f246a7c5b9d643d5efa33799112963a +PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6 COCOAPODS: 1.14.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 26844532..7a12c6ca 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1080,7 +1080,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1178,7 +1178,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_xhj.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1205,7 +1205,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1231,7 +1231,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1477,7 +1477,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1575,7 +1575,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1673,7 +1673,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1771,7 +1771,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1869,7 +1869,7 @@ DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", From 0839c9ec3c9c33685d570cd47b7d47d2bca9cbd8 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 24 Jan 2025 12:01:55 +0800 Subject: [PATCH 61/67] =?UTF-8?q?fix=EF=BC=9A=E6=98=9F=E6=98=9F=E9=94=81?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=8C=85=E5=90=8D=E7=AD=BE=E5=90=8D=E5=90=8E?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?key=E7=94=B3=E8=AF=B7=E3=80=81=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=80=82=E9=85=8D=E7=AD=89=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 6 ++++- lib/apm/firebase/firebase_helper.dart | 34 +++++++++++++++++++-------- lib/flavors.dart | 32 +++++++++++++++++++++++++ lib/main_xhj_bundle_lite.dart | 2 +- lib/tools/push/xs_jPhush.dart | 14 ++++------- lib/widget/flavors_img.dart | 4 ++-- 6 files changed, 68 insertions(+), 24 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 87be9e46..d71567ad 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -148,7 +148,11 @@ android { applicationId "ltd.xhjcn.lock" signingConfig signingConfigs.xhj_bundle resValue "string", "app_name", "Star Lock" - manifestPlaceholders.JPUSH_PKGNAME = "ltd.xhjcn.lock" + manifestPlaceholders = [ + JPUSH_PKGNAME : "ltd.xhjcn.lock", + JPUSH_APPKEY : "5ccdb9b8d3faaae66ba5d02e", + JPUSH_CHANNEL : "flutter_channel", + ] proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-xhj.pro' } diff --git a/lib/apm/firebase/firebase_helper.dart b/lib/apm/firebase/firebase_helper.dart index 98188c1c..cb354174 100644 --- a/lib/apm/firebase/firebase_helper.dart +++ b/lib/apm/firebase/firebase_helper.dart @@ -4,14 +4,15 @@ import 'package:firebase_core/firebase_core.dart' show Firebase, FirebaseOptions; import 'package:flutter/foundation.dart' show defaultTargetPlatform, kIsWeb, TargetPlatform; +import 'package:star_lock/flavors.dart'; class DefaultFirebaseOptions { static FirebaseOptions get currentPlatform { - switch (defaultTargetPlatform) { - case TargetPlatform.android: - return android; - case TargetPlatform.iOS: - return ios; + switch (F.appFlavor) { + case Flavor.sky: + return sky_android; + case Flavor.xhj_bundle: + return xhj_android; default: throw UnsupportedError( 'DefaultFirebaseOptions are not supported for this platform.', @@ -19,14 +20,22 @@ class DefaultFirebaseOptions { } } - static const FirebaseOptions android = FirebaseOptions( + static const FirebaseOptions sky_android = FirebaseOptions( apiKey: 'AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g', appId: '1:281500445726:android:ddf52ac7b7f83cf5c4d20f', messagingSenderId: '281500445726', - projectId: 'skychip2023-ecdff', + projectId: 'smart-lock-12b8c', storageBucket: 'skychip2023-ecdff.firebasestorage.app', ); + static const FirebaseOptions xhj_android = FirebaseOptions( + apiKey: 'AIzaSyAm8dJlBY5hjslJDVDBNd2bkWrJlGjAMqw', + appId: '1:448746601330:android:1a8056175e1dad5e317beb', + messagingSenderId: '448746601330', + projectId: 'smart-lock-12b8c', + storageBucket: 'smart-lock-12b8c.firebasestorage.app', + ); + static const FirebaseOptions ios = FirebaseOptions( apiKey: 'AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc', appId: '1:281500445726:ios:b194ccffb92fb86cc4d20f', @@ -51,9 +60,14 @@ class FirebaseHelper { } Future initApp() async { - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); + const bool isProductVmMode = bool.fromEnvironment('dart.vm.product'); + if (F.isProductionEnv && + isProductVmMode && + defaultTargetPlatform == TargetPlatform.android) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + } } Future initSdk() async { diff --git a/lib/flavors.dart b/lib/flavors.dart index 5334def5..145d2bf5 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -8,6 +8,7 @@ enum Flavor { sky_dev, sky_pre, xhj, + xhj_bundle, xhj_dev, xhj_pre, } @@ -48,6 +49,7 @@ class F { static bool get isXHJ => appFlavor == Flavor.xhj || + appFlavor == Flavor.xhj_bundle || appFlavor == Flavor.xhj_dev || appFlavor == Flavor.xhj_pre; @@ -71,6 +73,7 @@ class F { case Flavor.dev: case Flavor.pre: case Flavor.xhj: + case Flavor.xhj_bundle: default: return xhjCall(); } @@ -89,6 +92,7 @@ class F { case Flavor.sky_pre: return '锁通通'.tr; case Flavor.xhj: + case Flavor.xhj_bundle: case Flavor.xhj_dev: case Flavor.xhj_pre: return '星星锁'.tr; @@ -110,6 +114,7 @@ class F { case Flavor.sky_pre: return '锁通通'.tr; case Flavor.xhj: + case Flavor.xhj_bundle: case Flavor.xhj_dev: case Flavor.xhj_pre: return '星星锁'.tr; @@ -136,6 +141,7 @@ class F { case Flavor.sky: return 'https://lock.skychip.top'; case Flavor.xhj: + case Flavor.xhj_bundle: return 'https://lock.xhjcn.ltd'; // return 'https://pre.lock.star-lock.cn'; default: @@ -186,6 +192,9 @@ class F { return const StarLockAMapKey( androidKey: '9dd8073a2e96870b206269bb562a887a', iosKey: 'c70047e60ce704d945ea89d6c2763b82'); + case Flavor.xhj_bundle: + return const StarLockAMapKey( + androidKey: 'c47fa8e1d9e2a25321dbee75e1ff7790', iosKey: ''); default: return const StarLockAMapKey( androidKey: 'no valied key', @@ -250,6 +259,28 @@ class F { } } + // StarLockAMapKey + static String get jPushKey { + switch (appFlavor) { + case Flavor.local: + case Flavor.dev: + case Flavor.pre: + return ''; + case Flavor.sky_dev: + case Flavor.sky_pre: + case Flavor.sky: + return '7ff37d174c1a568a89e98dad'; + case Flavor.xhj_dev: + case Flavor.xhj_pre: + case Flavor.xhj: + return '251fc8074820d122b6de58d2'; + case Flavor.xhj_bundle: + return '5ccdb9b8d3faaae66ba5d02e'; + default: + return ''; + } + } + // 是否是生产环境 static bool get isProductionEnv { switch (appFlavor) { @@ -259,6 +290,7 @@ class F { return false; case Flavor.sky: case Flavor.xhj: + case Flavor.xhj_bundle: return true; default: return false; diff --git a/lib/main_xhj_bundle_lite.dart b/lib/main_xhj_bundle_lite.dart index d24e296d..8cf182cb 100755 --- a/lib/main_xhj_bundle_lite.dart +++ b/lib/main_xhj_bundle_lite.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.xhj; + F.appFlavor = Flavor.xhj_bundle; F.isLite = true; // AppLog.log('xhj_lite调用了main函数'); await runner.main(); diff --git a/lib/tools/push/xs_jPhush.dart b/lib/tools/push/xs_jPhush.dart index 7c72a424..1d1847f2 100755 --- a/lib/tools/push/xs_jPhush.dart +++ b/lib/tools/push/xs_jPhush.dart @@ -24,18 +24,12 @@ class XSJPushProvider { return; } - String appKey; - if (F.isSKY) { - appKey = '7ff37d174c1a568a89e98dad'; - } else { - appKey = '251fc8074820d122b6de58d2'; - } - + print('jPushKey ${F.jPushKey}'); jpush.setup( - appKey: appKey, + appKey: F.jPushKey, channel: 'flutter_channel', - production: false, - debug: false, + production: F.isProductionEnv, + debug: !F.isProductionEnv, ); jpush.applyPushAuthority( diff --git a/lib/widget/flavors_img.dart b/lib/widget/flavors_img.dart index 4d7eb325..f1fa0138 100755 --- a/lib/widget/flavors_img.dart +++ b/lib/widget/flavors_img.dart @@ -15,9 +15,9 @@ class FlavorsImg extends StatelessWidget { @override Widget build(BuildContext context) { myFilter = ColorFilterGenerator(name: 'xhj', filters: >[ - if (black) ColorFilterAddons.addictiveColor(-255, -255, -255) else ColorFilterAddons.addictiveColor(1, 22, 93), + if (black) ColorFilterAddons.addictiveColor(-255, -255, -255) else ColorFilterAddons.addictiveColor(1 , 22, 93), ]); - if (F.appFlavor != Flavor.xhj) { + if (F.appFlavor != Flavor.xhj && F.appFlavor != Flavor.xhj_bundle) { return child; } return ColorFiltered( From d4e7753fcffa210bc6e664503a1f72d8e6e3c86d Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 24 Jan 2025 13:31:40 +0800 Subject: [PATCH 62/67] =?UTF-8?q?fix=EF=BC=9A=E6=98=9F=E6=98=9F=E9=94=81?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=8C=85=E5=90=8D=E7=AD=BE=E5=90=8D=E5=90=8E?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?key=E7=94=B3=E8=AF=B7=E3=80=81=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=80=82=E9=85=8D=E7=AD=89=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/android/app/build.gradle b/android/app/build.gradle index d71567ad..549a0230 100755 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -146,6 +146,7 @@ android { xhj_bundle { dimension "flavor-type" applicationId "ltd.xhjcn.lock" + signingConfig signingConfigs.xhj_bundle resValue "string", "app_name", "Star Lock" manifestPlaceholders = [ From 28442b961447979ca081d5236d12fd94d0d4a8dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Fri, 24 Jan 2025 13:47:26 +0800 Subject: [PATCH 63/67] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=98=9F?= =?UTF-8?q?=E5=9B=BE=E5=BE=85=E5=8A=9E=EF=BC=9A=E7=BD=91=E5=85=B3=E3=80=81?= =?UTF-8?q?=E5=AF=B9=E8=AE=B2=E3=80=81P2P=E5=AF=B9=E5=BA=94=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Podfile.lock | 42 ++++++++-------- ios/Runner.xcodeproj/project.pbxproj | 35 ++++--------- lan/lan_ar.json | 1 - lan/lan_bg.json | 1 - lan/lan_bn.json | 3 +- lan/lan_cs.json | 1 - lan/lan_da.json | 3 +- lan/lan_de.json | 1 - lan/lan_el.json | 3 +- lan/lan_en.json | 4 +- lan/lan_es.json | 1 - lan/lan_et.json | 3 +- lan/lan_fi.json | 3 +- lan/lan_fr.json | 3 +- lan/lan_he.json | 3 +- lan/lan_hk.json | 1 - lan/lan_hr.json | 3 +- lan/lan_hu.json | 3 +- lan/lan_id.json | 3 +- lan/lan_it.json | 1 - lan/lan_ja.json | 3 +- lan/lan_keys.json | 4 +- lan/lan_kk.json | 3 +- lan/lan_ko.json | 3 +- lan/lan_lt.json | 3 +- lan/lan_ms.json | 3 +- lan/lan_nl.json | 3 +- lan/lan_pl.json | 3 +- lan/lan_pt.json | 3 +- lan/lan_ro.json | 3 +- lan/lan_ru.json | 3 +- lan/lan_sk.json | 1 - lan/lan_sr_cyrl.json | 1 - lan/lan_sv.json | 1 - lan/lan_th.json | 1 - lan/lan_tr.json | 3 +- lan/lan_tw.json | 3 +- lan/lan_uk.json | 3 +- lan/lan_vi.json | 1 - lan/lan_zh.json | 2 +- lib/main.dart | 2 +- lib/main_local.dart | 2 +- .../gatewayConfigurationWifi_page.dart | 18 +++---- .../gatewayGetWifiList_logic.dart | 16 ++++++ .../gatewayGetWifiList_page.dart | 50 ++++++++++++------- .../gatewayGetWifiList_state.dart | 10 ++-- .../selectGatewayList_logic.dart | 9 +++- .../selectGatewayTypeNextTip_page.dart | 2 +- 48 files changed, 130 insertions(+), 147 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e0f0b584..be48a85c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -10,12 +10,12 @@ PODS: - EMASRest - AlicloudUT (5.2.0.16): - AlicloudUTDID - - AlicloudUTDID (1.6.0) - - AlicloudUtils (2.0.0): + - AlicloudUTDID (1.6.1) + - AlicloudUtils (2.0.1): - AlicloudUTDID - aliyun_face_plugin (0.0.1): - Flutter - - AMap3DMap (10.0.700): + - AMap3DMap (10.1.200): - AMapFoundation (>= 1.8.0) - amap_flutter_location (0.0.1): - AMapLocation @@ -167,10 +167,10 @@ PODS: - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleMaps (6.2.1): - - GoogleMaps/Maps (= 6.2.1) - - GoogleMaps/Base (6.2.1) - - GoogleMaps/Maps (6.2.1): + - GoogleMaps (7.4.0): + - GoogleMaps/Maps (= 7.4.0) + - GoogleMaps/Base (7.4.0) + - GoogleMaps/Maps (7.4.0): - GoogleMaps/Base - GoogleUtilities/AppDelegateSwizzler (8.0.2): - GoogleUtilities/Environment @@ -203,8 +203,8 @@ PODS: - Flutter - image_picker_ios (0.0.1): - Flutter - - ios-voice-processor (1.1.0) - - JCore (4.6.2) + - ios-voice-processor (1.1.2) + - JCore (4.9.0) - JPush (5.3.0): - JCore (>= 2.0.0) - jpush_flutter (0.0.2): @@ -230,9 +230,9 @@ PODS: - permission_handler_apple (9.3.0): - Flutter - PromisesObjC (2.4.0) - - SDWebImage (5.19.2): - - SDWebImage/Core (= 5.19.2) - - SDWebImage/Core (5.19.2) + - SDWebImage (5.20.0): + - SDWebImage/Core (= 5.20.0) + - SDWebImage/Core (5.20.0) - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS @@ -243,7 +243,7 @@ PODS: - system_settings (0.0.1): - Flutter - Toast (4.1.1) - - UMCommon (7.4.7): + - UMCommon (7.5.2): - UMDevice - UMDevice (3.4.0) - umeng_common_sdk (0.0.1): @@ -427,10 +427,10 @@ SPEC CHECKSUMS: AlicloudPush: 88529c9b796e4ece0601de0867b30359f55b61f7 AlicloudSender: 1f468b6bd962a099ffc19d45e3608b0fe98f259d AlicloudUT: 6d1cf30d57d096b7e9bb4b069dd0ba6ad59a3338 - AlicloudUTDID: 4e9d44c2fd704b3508069c38eaec9d6a759e702c - AlicloudUtils: 2a78de434a8b2dc99e408c4d6220e654076d9ef0 + AlicloudUTDID: 5d2f22d50e11eecd38f30bc7a48c71925ea90976 + AlicloudUtils: ef4436f52b828b1182b002373758ecb88068e679 aliyun_face_plugin: 7a90b6526c5acea616062e809699294c782c3eb8 - AMap3DMap: 6ee456d7ba946ebbad580a343b74ffa8e9936175 + AMap3DMap: 06a11a83072857d6076c14060b2e1a676182e84d amap_flutter_location: 44ff5beb64f42e0bf5feb402fe299dac0013af6f amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec @@ -465,12 +465,12 @@ SPEC CHECKSUMS: fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849 google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99 GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de - GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 + GoogleMaps: 032f676450ba0779bd8ce16840690915f84e57ac GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1 - JCore: 024c73b04e110b496e93d8c127ea9cd1ed934e4c + ios-voice-processor: 00bf226d172c7006f565d6b6dbf2dc5e5b76938b + JCore: 1128d8c6f33f5c3607536a7b87c0e450d2c6ada6 JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5 just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa @@ -481,13 +481,13 @@ SPEC CHECKSUMS: path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a + SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 system_settings: 8f5cdbfa72c677fc8d665b863bcc20d393d87e9d Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e - UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7 + UMCommon: 72513a01ebca2dead52f2112b4d7c6196dbbe412 UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82 umeng_common_sdk: a8abd7f86dfd013dbbeeae587ee143760c6582f2 url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7a12c6ca..7006341b 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1075,10 +1075,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1088,7 +1086,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1200,10 +1197,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1212,7 +1207,6 @@ ); PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.skychip.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1226,10 +1220,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1239,7 +1231,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.xhjcn.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1570,10 +1561,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1583,7 +1572,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1766,10 +1754,8 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1779,7 +1765,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.xhjcn.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; diff --git a/lan/lan_ar.json b/lan/lan_ar.json index f550d3eb..51882dae 100644 --- a/lan/lan_ar.json +++ b/lan/lan_ar.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "كلمات المرور غير متسقة", "中功率": "قوة متوسطة", "常规使用": "استخدام منتظم", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "بعد تشغيل البوابة ، اضغط مع الاستمرار على زر إعادة الضبط لمدة 5 ثوانٍ ، وانقر بعد ذلك عندما يومض مصباح المؤشر بالتناوب", "扫描设备": "جهاز المسح الضوئي", "删除失败,网关可能已经离线,是否强制删除该数据?": "فشل الحذف. ربما تكون البوابة قد اختفت دون اتصال. هل تريد فرض حذف البيانات ؟", "超级管理员英文": "Super Admin", diff --git a/lan/lan_bg.json b/lan/lan_bg.json index 2f3d144b..62e1410b 100644 --- a/lan/lan_bg.json +++ b/lan/lan_bg.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Паролите са непоследователни", "中功率": "Средна мощност", "常规使用": "Редовна употреба", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "След като шлюзът е включен, натиснете и задръжте бутона reset за 5 секунди и щракнете върху следващия, когато индикаторната светлина мига алтернативно", "扫描设备": "Сканиране устройство", "删除失败,网关可能已经离线,是否强制删除该数据?": "Изтриването не успя. Портата може да е отишла офлайн. Искате ли да принудите изтриване на данните?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_bn.json b/lan/lan_bn.json index 03eafc2b..7c730be4 100644 --- a/lan/lan_bn.json +++ b/lan/lan_bn.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Thepasswordsare pencay", "中功率": "উইউমপোওয়ার", "常规使用": "গ্যারিউস", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "অ্যারাস্টার্টিউইসপোভেরেডন, প্রেস এবং টিপেস্টেট্রিসেট গানttonfor5sononds, এবং চক্লিক উইভেন্থে-উইন্টার", "扫描设备": "সিস্কান্লিভাইস", "删除失败,网关可能已经离线,是否强制删除该数据?": "ডাইজেজেশনিমেরিলেড। টিভওয়েমাইয়ানভিগনোনোআরলাইন। ডো ডাউনডেটা?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "এক্ফক্লোসিস্টেম", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?", - "版本说明": "ভার্সনপরিচিতি", + "版本说明": "ভার্সনপরিচিতি" } \ No newline at end of file diff --git a/lan/lan_cs.json b/lan/lan_cs.json index d0eb38e6..504867c1 100644 --- a/lan/lan_cs.json +++ b/lan/lan_cs.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Hesla jsou nekonzistentní", "中功率": "Střední síla", "常规使用": "Pravidelné použití", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Po zapnutí brány stiskněte a podržte tlačítko reset po dobu 5 sekund a klepněte na tlačítko next", "扫描设备": "Skenovat zařízení", "删除失败,网关可能已经离线,是否强制删除该数据?": "Odstranění se nezdařilo. Brána možná byla offline. Chcete vynutit smazat data?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_da.json b/lan/lan_da.json index 768ec600..df10a266 100644 --- a/lan/lan_da.json +++ b/lan/lan_da.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Adgangskoderne er inkonsekvente", "中功率": "Mellem effekt", "常规使用": "Regelmæssig anvendelse", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Når gateway er tændt, tryk og hold nulstillingsknappen i 5 sekunder, og klik Next, når indikator lys blinker skiftevist", "扫描设备": "Scan- enhed", "删除失败,网关可能已经离线,是否强制删除该数据?": "Sletning mislykkedes. Porten er måske offline. Vil du tvinge slette data?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Følg systemet", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?", - "版本说明": "Versionsbeskrivelse", + "版本说明": "Versionsbeskrivelse" } \ No newline at end of file diff --git a/lan/lan_de.json b/lan/lan_de.json index e6e2f250..32b6dcd6 100644 --- a/lan/lan_de.json +++ b/lan/lan_de.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Die Passwörter sind inkonsistent", "中功率": "Mittlere Leistung", "常规使用": "Regelmäßige Verwendung", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Nachdem das Gateway eingesc haltet ist, drücken und halten Sie die Reset-Taste für 5 Sekunden, und klicken Sie auf Weiter, wenn die Kontroll leuchte blinkt abwechselnd", "扫描设备": "Scan-Gerät", "删除失败,网关可能已经离线,是否强制删除该数据?": "Löschung fehl geschlagen. Das Gateway ist möglicher weise offline gegangen. Möchten Sie das Löschen der Daten erzwingen?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_el.json b/lan/lan_el.json index a076aac3..dadf971d 100644 --- a/lan/lan_el.json +++ b/lan/lan_el.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Οι κωδικοί πρόσβασης δεν είναι συνεπείς.", "中功率": "Μέση ισχύς", "常规使用": "Κανονική χρήση:", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Αφού ενεργοποιηθεί η πύλη, πατήστε και κρατήστε το κουμπί επαναφοράς για 5 δευτερόλεπτα, και κάντε κλικ Next όταν το φως δείκτη αναβοσβήνει εναλλάξα", "扫描设备": "Συσκευή σάρωσης", "删除失败,网关可能已经离线,是否强制删除该数据?": "Η διαγραφή απέτυχε. Η πύλη μπορεί να έχει εκτός λειτουργίας. Θέλετε να αναγκάσετε τη διαγραφή των δεδομένων;", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Ακολουθήστε το σύστημα", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;", - "版本说明": "Περιγραφή έκδοσης", + "版本说明": "Περιγραφή έκδοσης" } \ No newline at end of file diff --git a/lan/lan_en.json b/lan/lan_en.json index 37e99e98..eb01a32a 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -217,7 +217,6 @@ "添加网关": "Add Gateway", "重新通电": "Re Connect the Power", "指示灯": "Indicator Light", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds, and click Next when the indicator light flashes alternately", "选择网关": "Choose Gateway", "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "5G is not supported,.Please select a WiFi of 2.4G.", "WiFi密码": "WiFi Passward", @@ -1121,5 +1120,6 @@ "跟随系统": "Follow system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?", - "版本说明": "Version description" + "版本说明": "Version description", + "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds. Click Next when the blue indicator light flashes" } diff --git a/lan/lan_es.json b/lan/lan_es.json index 3e47d880..f2d40436 100644 --- a/lan/lan_es.json +++ b/lan/lan_es.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Las contraseñas son inconsistentes", "中功率": "Potencia media", "常规使用": "Uso regular", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Después de encender la puerta de enlace, mantenga presionado el botón de reinicio durante 5 segundos y haga clic en Siguiente cuando la luz indicadora parpadee alternativamente", "扫描设备": "Dispositivo de exploración", "删除失败,网关可能已经离线,是否强制删除该数据?": "Falló la eliminación. Es posible que la puerta de enlace se haya desconectado. ¿Desea forzar la eliminación de los datos?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_et.json b/lan/lan_et.json index 63e90c7a..3b680872 100644 --- a/lan/lan_et.json +++ b/lan/lan_et.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Paroolid ei ole järjekindlad", "中功率": "Keskmine võimse", "常规使用": "Regulaarne kasutamine", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Kui värav on sisse lülitatud, vajutage ja hoidke nuppu 5 sekundit, ja klõpsa Järgmine, kui indikaator valgus vilgub vaheldumisel", "扫描设备": "Skaneerimisseade", "删除失败,网关可能已经离线,是否强制删除该数据?": "Kustutamine nurjus. Värav võis välja lülitada. Kas soovid kustutada andmed?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Süsteemi jälgimine", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?", - "版本说明": "Versiooniteave", + "版本说明": "Versiooniteave" } \ No newline at end of file diff --git a/lan/lan_fi.json b/lan/lan_fi.json index 53aee63c..0bc1d06e 100644 --- a/lan/lan_fi.json +++ b/lan/lan_fi.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Salasanat ovat epäjohdonmukaiset.", "中功率": "Keskimääräinen teho", "常规使用": "Säännöllinen käyttö", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Kun portti on käytössä, paina ja pidä painiketta nollauspainiketta 5 sekunnin ajan, ja klikkaa Seuraava kun ilmaisin valo vilkkuu vuorotellensa", "扫描设备": "Skannauslaite", "删除失败,网关可能已经离线,是否强制删除该数据?": "Poisto epäonnistui. Portti on ehkä pois päältä. Haluatko pakottaa poistamaan tiedot?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Seuraa järjestelmää", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?", - "版本说明": "Versio", + "版本说明": "Versio" } \ No newline at end of file diff --git a/lan/lan_fr.json b/lan/lan_fr.json index 36f4918d..f2c17fcc 100644 --- a/lan/lan_fr.json +++ b/lan/lan_fr.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Les mots de passe sont incohérents", "中功率": "Puissance moyenne", "常规使用": "Utilisation régulière", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Une fois la passerelle allumée, appuyez et maintenez enfoncé le bouton de réinitialisation pendant 5 secondes, puis cliquez sur Suivant lorsque le voyant clignote alternativement", "扫描设备": "Appareil de numérisation", "删除失败,网关可能已经离线,是否强制删除该数据?": "La suppression a échoué. La passerelle est peut-être hors ligne. Voulez-vous forcer la suppression des données?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Suivre le système", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?", - "版本说明": "Explication de la version", + "版本说明": "Explication de la version" } \ No newline at end of file diff --git a/lan/lan_he.json b/lan/lan_he.json index 2214efd6..b5ce2fe3 100644 --- a/lan/lan_he.json +++ b/lan/lan_he.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "הסיסמאות אינן עקביות", "中功率": "כוח בינוני", "常规使用": "שימוש קבוע", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "לאחר השער מופעל, לחץ והחזק את כפתור איפוס עבור 5 שניות, ולחץ על הבא כאשר מחוון אור מהבהב לסירוגין", "扫描设备": "התקן סריקה", "删除失败,网关可能已经离线,是否强制删除该数据?": "מחיקה נכשלה. ייתכן שהשער נעלם מהרשת. האם ברצונך לאלץ למחוק את הנתונים?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "מערכת מעקב", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?", - "版本说明": "המידע על גרסה", + "版本说明": "המידע על גרסה" } \ No newline at end of file diff --git a/lan/lan_hk.json b/lan/lan_hk.json index 10f8f20f..c61800ba 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -217,7 +217,6 @@ "添加网关": "添加網關", "重新通电": "重新連接電源", "指示灯": "指示燈", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "網關上電之後,長按復位鍵5秒,指示燈交替閃爍時點擊下一步", "选择网关": "選擇Gateway (網關)", "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "唔撐5G。 請選擇2.4G嘅WiFi。", "WiFi密码": "WiFi通行證", diff --git a/lan/lan_hr.json b/lan/lan_hr.json index 2b46ae3f..3eede61c 100644 --- a/lan/lan_hr.json +++ b/lan/lan_hr.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Šifre nisu dosljedne", "中功率": "Srednja snaga", "常规使用": "Redovna upotreba", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Nakon što se prolaz ukljuèi, pritisnite i zadržite dugme za reset 5 sekundi, i kliknite Sljedeća kada svjetlost indikatora izmijeniti", "扫描设备": "Skeniraj uređaj", "删除失败,网关可能已经离线,是否强制删除该数据?": "Brisanje nije uspjelo. Prolaz je možda nestao. Želite li prisiliti brisati podatke?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Prati sistem:", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?", - "版本说明": "Informacije o verziji", + "版本说明": "Informacije o verziji" } \ No newline at end of file diff --git a/lan/lan_hu.json b/lan/lan_hu.json index 6398d992..f0a2c104 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "A jelszavak nem következetesek", "中功率": "Közepes teljesítmény", "常规使用": "Rendszeres használat", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Miután az átjáró be van kapcsolva, nyomja meg és tartsa a reset gombot 5 másodpercig, és kattintson a következő gombra, amikor a jelző fény felváltva villog", "扫描设备": "Beolvasási eszköz", "删除失败,网关可能已经离线,是否强制删除该数据?": "A törlés nem sikerült. Az átjáró lehet, hogy offline lett. Szeretné kényszeríteni az adatok törlését?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Follow system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?", - "版本说明": "Versió leírás", + "版本说明": "Versió leírás" } \ No newline at end of file diff --git a/lan/lan_id.json b/lan/lan_id.json index 872dcb41..735d0d50 100644 --- a/lan/lan_id.json +++ b/lan/lan_id.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Kata sandi tidak konsisten", "中功率": "Kekuatan sedang", "常规使用": "Penggunaan biasa", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Setelah gateway menyala, tekan dan tahan tombol reset selama 5 detik, dan klik berikutnya ketika lampu indikator berkedip secara bersamaan", "扫描设备": "Perangkat Pindai", "删除失败,网关可能已经离线,是否强制删除该数据?": "Penghapusan gagal. Gateway mungkin telah offline. Ingin menghapus data?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Sistem mengikuti", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?", - "版本说明": "Catatan versi", + "版本说明": "Catatan versi" } \ No newline at end of file diff --git a/lan/lan_it.json b/lan/lan_it.json index 7bb5d872..91b0f6cf 100644 --- a/lan/lan_it.json +++ b/lan/lan_it.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Le password sono incoerenti", "中功率": "Potenza media", "常规使用": "Uso regolare", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Dopo aver acceso il gateway, tenere premuto il pulsante di ripristino per 5 secondi e fare clic su Avanti quando l'indicatore luminoso lampeggia alternativamente", "扫描设备": "Dispositivo di scansione", "删除失败,网关可能已经离线,是否强制删除该数据?": "Eliminazione non riuscita. Il gateway potrebbe essere andato offline. Vuoi forzare l'eliminazione dei dati?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_ja.json b/lan/lan_ja.json index 6c2f6de7..77e5ddd2 100644 --- a/lan/lan_ja.json +++ b/lan/lan_ja.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "パスワードが一致しない", "中功率": "ミディアムパワー", "常规使用": "通常の使用", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "ゲートウェイの電源がオンになった後、リセットボタンを5秒間押し続け、インジケーターライトが交互に点滅したら [次へ] をクリックします。", "扫描设备": "スキャン装置", "删除失败,网关可能已经离线,是否强制删除该数据?": "削除に失敗しました。ゲートウェイがオフラインになった可能性があります。強制的にデータを削除しますか?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "システムに従う", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?", - "版本说明": "バージョン説明", + "版本说明": "バージョン説明" } \ No newline at end of file diff --git a/lan/lan_keys.json b/lan/lan_keys.json index 577abfa7..d4247e2f 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -219,7 +219,7 @@ "添加网关": "添加网关", "重新通电": "重新通电", "指示灯": "指示灯", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步", + "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步", "选择网关": "选择网关", "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置", "WiFi密码": "WiFi密码", @@ -1121,5 +1121,5 @@ "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?", - "版本说明": "版本说明", + "版本说明": "版本说明" } diff --git a/lan/lan_kk.json b/lan/lan_kk.json index ee063c9e..6bafdaca 100644 --- a/lan/lan_kk.json +++ b/lan/lan_kk.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Парольдер болмаған", "中功率": "Орташа қуары", "常规使用": "Қалыпты қолданылсын", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Келесі періңізнен соң, ысырып тасымалдау батырмасын басып 5 секунд басыңыз, Индикаторның жарықты ауыстырғанда, келесі басыңыз", "扫描设备": "Сканер құрылғысы", "删除失败,网关可能已经离线,是否强制删除该数据?": "Өшіру жаңылысы. Келесі жіберді. Деректерді өшіргіңіз келе ме?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Жүйені қолдану", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?", - "版本说明": "Версиятын көрсету", + "版本说明": "Версиятын көрсету" } \ No newline at end of file diff --git a/lan/lan_ko.json b/lan/lan_ko.json index 0240269d..ecaeda0f 100644 --- a/lan/lan_ko.json +++ b/lan/lan_ko.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "암호가 일치하지 않습니다.", "中功率": "중간 전력", "常规使用": "정사이즈 사용", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "게이트웨이의 전원이 켜진 후 5 초 동안 리셋 버튼을 누르고 누르고 표시등이 번갈아 깜박이면 다음 을 클릭하십시오.", "扫描设备": "스캔 장치", "删除失败,网关可能已经离线,是否强制删除该数据?": "삭제가 실패했습니다. 게이트웨이가 오프라인 상태일 수 있다. 강제로 데이터 삭제를 하시겠습니까?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "시스템을 따르십시오", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", - "版本说明": "버전 설명", + "版本说明": "버전 설명" } \ No newline at end of file diff --git a/lan/lan_lt.json b/lan/lan_lt.json index 939601de..fec5cf96 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Slaptažodžiai yra nenuoseklūs", "中功率": "Vidutinės galios", "常规使用": "Reguliarus naudojimas", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Įjungus vartus, 5 sekundes paspauskite ir palaikykite reset mygtuką ir spustelėkite toliau, kai indikatoriaus lemputė mirksi pakaitomis.", "扫描设备": "Nuskaitymo įrenginys", "删除失败,网关可能已经离线,是否强制删除该数据?": "Ištrynimas nepavyko. Vartai gali būti neprisijungę. Ar norite priversti ištrinti duomenis?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Sekti sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?", - "版本说明": "Versijos aprašymas", + "版本说明": "Versijos aprašymas" } \ No newline at end of file diff --git a/lan/lan_ms.json b/lan/lan_ms.json index 05ed0ebd..f084c7bb 100644 --- a/lan/lan_ms.json +++ b/lan/lan_ms.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Kata laluan tidak konsisten", "中功率": "Kuasa sederhana", "常规使用": "Penggunaan biasa", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Selepas pintu masuk dihidupkan, tekan dan tahan butang reset selama 5 saat, dan klik seterusnya apabila lampu penunjuk berkelip bergantian", "扫描设备": "Imbas peranti", "删除失败,网关可能已经离线,是否强制删除该数据?": "Penghapusan gagal. Pintu masuk mungkin telah pergi di luar talian. Adakah anda mahu memaksa memadam data?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Ikut system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?", - "版本说明": "Penerangan versi", + "版本说明": "Penerangan versi" } \ No newline at end of file diff --git a/lan/lan_nl.json b/lan/lan_nl.json index ceb6ec0e..3bed21f6 100644 --- a/lan/lan_nl.json +++ b/lan/lan_nl.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "De wachtwoorden zijn inconsistent", "中功率": "Middelgroot vermogen", "常规使用": "Regelmatig gebruik", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Nadat de gateway is ingeschakeld, houdt u de resetknop 5 seconden ingedrukt en klikt u op Volgende wanneer het indicatielampje afwisselend knippert", "扫描设备": "Scan apparaat", "删除失败,网关可能已经离线,是否强制删除该数据?": "Verwijdering is mislukt. De gateway is mogelijk offline gegaan. Wilt u de gegevens forceren verwijderen?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Systeem volgen", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?", - "版本说明": "Versieomschrijving", + "版本说明": "Versieomschrijving" } \ No newline at end of file diff --git a/lan/lan_pl.json b/lan/lan_pl.json index 18cfb3d6..fe406a81 100644 --- a/lan/lan_pl.json +++ b/lan/lan_pl.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Hasła są niespójne", "中功率": "Średnia moc", "常规使用": "Regularne stosowanie", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Po włączeniu bramy naciśnij i przytrzymaj przycisk resetowania przez 5 sekund i kliknij przycisk Dalej, gdy wskaźnik miga na przemian", "扫描设备": "Urządzenie skanujące", "删除失败,网关可能已经离线,是否强制删除该数据?": "Usunięcie nie powiodło się. Brama mogła zostać wyłączona. Czy chcesz wymusić usunięcie danych?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Śledź system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?", - "版本说明": "Wersja", + "版本说明": "Wersja" } \ No newline at end of file diff --git a/lan/lan_pt.json b/lan/lan_pt.json index 22636d1e..bcdb2ed2 100644 --- a/lan/lan_pt.json +++ b/lan/lan_pt.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "As senhas são inconsistentes", "中功率": "Potência média", "常规使用": "Uso regular", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Depois que o gateway estiver ligado, pressione e segure o botão de reset por 5 segundos e clique em Next quando a luz indicadora pisca alternadamente", "扫描设备": "Digitalizar dispositivo", "删除失败,网关可能已经离线,是否强制删除该数据?": "A eliminação falhou. O gateway pode ter ficado offline. Você quer forçar a exclusão dos dados?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Siga o sistema", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?", - "版本说明": "Descrição da versão", + "版本说明": "Descrição da versão" } \ No newline at end of file diff --git a/lan/lan_ro.json b/lan/lan_ro.json index 3fe81f0f..7c6da3e2 100644 --- a/lan/lan_ro.json +++ b/lan/lan_ro.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Parolele sunt inconsistente", "中功率": "Putere medie", "常规使用": "Utilizare regulată", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "După ce poarta este pornită, apăsați și țineți butonul de resetare timp de 5 secunde, și faceți clic pe Următor atunci când lumina indicatorului se aprinde alternativ.", "扫描设备": "Dispozitiv de scanare", "删除失败,网关可能已经离线,是否强制删除该数据?": "Ștergerea a eșuat. Poarta poate s-a oprit. Doriți să forțați ștergerea datelor?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Urmează sistemul:", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?", - "版本说明": "Descrierea versiunii", + "版本说明": "Descrierea versiunii" } \ No newline at end of file diff --git a/lan/lan_ru.json b/lan/lan_ru.json index cfba1ebf..8001445e 100644 --- a/lan/lan_ru.json +++ b/lan/lan_ru.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Пароли являются несовместимыми", "中功率": "Средняя мощность", "常规使用": "Регулярное использование", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "После включения шлюза нажмите и удерживайте кнопку сброса в течение 5 секунд и нажмите «Далее», когда индикатор попеременно начнет мигать.", "扫描设备": "Устройство сканирования", "删除失败,网关可能已经离线,是否强制删除该数据?": "Ошибка удаления. Возможно, шлюз ушел в автономный режим. Хотите ли вы принудительно удалить данные?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Следуйте системе", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?", - "版本说明": "Объяснение версии", + "版本说明": "Объяснение версии" } \ No newline at end of file diff --git a/lan/lan_sk.json b/lan/lan_sk.json index 7606e642..e6c0b02f 100644 --- a/lan/lan_sk.json +++ b/lan/lan_sk.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Heslá sú nekonzistentné", "中功率": "Stredný výkon", "常规使用": "Pravidelné použitie", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Po zapnutí brány stlačte a podržte tlačidlo reset po dobu 5 sekúnd a kliknite na ďalšie, keď indikátorové svetlo záblesky striedavo", "扫描设备": "Skenovanie zariadenia", "删除失败,网关可能已经离线,是否强制删除该数据?": "Vymazanie sa nepodarilo. Brána môže ísť offline. Chcete vynútiť odstránenie údajov?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json index 076b29b3..bdfb900b 100644 --- a/lan/lan_sr_cyrl.json +++ b/lan/lan_sr_cyrl.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Лозинке су недоследне", "中功率": "Средња снага", "常规使用": "Редовна употреба", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Након што је гатеваи укључен, притисните и држите дугме за ресетовање за 5 секунди, и кликните Следећи када индикатор трепери наизменично", "扫描设备": "Уређај за скенирање", "删除失败,网关可能已经离线,是否强制删除该数据?": "Брисање није успело. Гатеваи је можда отишао ван мреже. Да ли желите да присилите брисање података?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_sv.json b/lan/lan_sv.json index c81b013b..99de674a 100644 --- a/lan/lan_sv.json +++ b/lan/lan_sv.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Lösenord är inkonsekventa", "中功率": "Medelse", "常规使用": "Regelbunden användning", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "När gateway är på, tryck och håll omställningsknappen i 5 sekunder, och klicka Nästa när indikatorljuset blinkar växelvist", "扫描设备": "Söka enheter", "删除失败,网关可能已经离线,是否强制删除该数据?": "Borttagning misslyckades. Porten kan ha gått offline. Vill du tvinga bort data?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_th.json b/lan/lan_th.json index bf4bdf0c..62fc6a47 100644 --- a/lan/lan_th.json +++ b/lan/lan_th.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "รหัสผ่านไม่สอดคล้องกัน", "中功率": "กำลังไฟปานกลาง", "常规使用": "ใช้เป็นประจำ", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "หลังจากเปิดเกตเวย์แล้วให้กดปุ่มรีเซ็ตค้างไว้5วินาทีและคลิกถัดไปเมื่อไฟแสดงสถานะกะพริบสลับกัน", "扫描设备": "อุปกรณ์สแกน", "删除失败,网关可能已经离线,是否强制删除该数据?": "การลบล้มเหลวเกตเวย์อาจออฟไลน์ไปแล้วคุณต้องการบังคับให้ลบข้อมูลหรือไม่?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_tr.json b/lan/lan_tr.json index 035738ba..8bf1e675 100644 --- a/lan/lan_tr.json +++ b/lan/lan_tr.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Şifreler tutarsız", "中功率": "Orta güç", "常规使用": "Düzenli kullanım", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Ağ geçidi açıldıktan sonra, sıfırlama düğmesine 5 saniye basılı tutun ve gösterge ışığı dönüşümlü olarak yanıp söndüğünde İleri'ye tıklayın.", "扫描设备": "Tarama cihazı", "删除失败,网关可能已经离线,是否强制删除该数据?": "Silme başarısız oldu. Ağ geçidi çevrimdışı geçmiş olabilir. Verileri silmeye zorlamak ister misiniz?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Sistemi takip et", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?", - "版本说明": "Sürüm açıklaması", + "版本说明": "Sürüm açıklaması" } \ No newline at end of file diff --git a/lan/lan_tw.json b/lan/lan_tw.json index 7347b2c4..3c0cf448 100644 --- a/lan/lan_tw.json +++ b/lan/lan_tw.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "密碼不一致", "中功率": "媒介權力", "常规使用": "經常使用", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "網關通電後,按住reset按鈕5秒鐘,當指示燈交替閃爍時單擊Next", "扫描设备": "掃描設備", "删除失败,网关可能已经离线,是否强制删除该数据?": "刪除失敗。 網關可能已脫機。 是否要強制刪除數據?", "超级管理员英文": "超級管理員", @@ -1121,5 +1120,5 @@ "跟随系统": "跟蹤系統", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?", - "版本说明": "版本說明", + "版本说明": "版本說明" } \ No newline at end of file diff --git a/lan/lan_uk.json b/lan/lan_uk.json index 1df767a6..bbbe0c19 100644 --- a/lan/lan_uk.json +++ b/lan/lan_uk.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Паролі несумісні", "中功率": "Середня потужність", "常规使用": "Регулярне використання", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Після ввімкнення шлюзу натисніть і утримуйте кнопку скидання протягом 5 секунд, а потім натисніть «Далі», коли індикатор почне блимати по черзі", "扫描设备": "Сканування пристрою", "删除失败,网关可能已经离线,是否强制删除该数据?": "Видалення не вдалося. Можливо, шлюз перейшов в автономний режим. Ви хочете примусово видалити дані?", "超级管理员英文": "Super Admin", @@ -1121,5 +1120,5 @@ "跟随系统": "Система стеження за", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?", - "版本说明": "Опис версії", + "版本说明": "Опис версії" } \ No newline at end of file diff --git a/lan/lan_vi.json b/lan/lan_vi.json index 5e8939b7..3d23aa5b 100644 --- a/lan/lan_vi.json +++ b/lan/lan_vi.json @@ -1105,7 +1105,6 @@ "两次密码不一致哦": "Mật khẩu không nhất quán", "中功率": "Công suất trung bình", "常规使用": "Sử dụng thường xuyên", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "Sau khi cổng được bật, Nhấn và giữ nút đặt lại trong 5 giây và Nhấp vào tiếp theo khi đèn báo nhấp nháy luân phiên", "扫描设备": "Thiết bị quét", "删除失败,网关可能已经离线,是否强制删除该数据?": "Xóa thất bại. Cổng có thể đã tắt. Bạn có muốn buộc xóa dữ liệu không?", "超级管理员英文": "Super Admin", diff --git a/lan/lan_zh.json b/lan/lan_zh.json index d5099701..d665bb14 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -218,7 +218,7 @@ "添加网关": "添加网关", "重新通电": "重新通电", "指示灯": "指示灯", - "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步": "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步", + "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步", "选择网关": "选择网关", "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置", "WiFi密码": "WiFi密码", diff --git a/lib/main.dart b/lib/main.dart index a25d730e..b4fc09fd 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -27,7 +27,7 @@ import 'tools/store_service.dart'; FutureOr main() async { FlutterBugly.postCatchedException(() async { WidgetsFlutterBinding.ensureInitialized(); - await ApmHelper.instance.initApp(); + // await ApmHelper.instance.initApp(); await _setCommonServices(); // 设置国际化信息 diff --git a/lib/main_local.dart b/lib/main_local.dart index 9e30d007..0fe387f7 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.xhj; + F.appFlavor = Flavor.pre; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart index e1e20481..5342d939 100755 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart @@ -36,15 +36,15 @@ class _GatewayConfigurationWifiPageState backgroundColor: AppColors.mainColor), body: Column( children: [ - // Container( - // width: 1.sw, - // color: const Color(0xFFF2F6F9), - // padding: EdgeInsets.all(15.h), - // child: Text( - // '不支持5G WiFi网络,请选择2.4G WiFi网络进行配置'.tr, - // style: TextStyle( - // color: AppColors.darkGrayTextColor, fontSize: 20.sp), - // )), + Container( + width: 1.sw, + color: const Color(0xFFF2F6F9), + padding: EdgeInsets.all(15.h), + child: Text( + '不支持5G WiFi网络,请选择2.4G WiFi网络进行配置'.tr, + style: TextStyle( + color: AppColors.darkGrayTextColor, fontSize: 20.sp), + )), Expanded( child: ListView( children: [ diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart index 9d671e45..bc1be973 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_logic.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:network_info_plus/network_info_plus.dart'; import 'package:star_lock/blue/io_gateway/io_gateway_getWifiList.dart'; import 'package:star_lock/tools/baseGetXController.dart'; @@ -128,11 +129,26 @@ class GatewayGetWifiListLogic extends BaseGetXController { }, isAddEquipment: true); } + final NetworkInfo _networkInfo = NetworkInfo(); + Future getWifiName() async { + String ssid = ''; + ssid = (await _networkInfo.getWifiName())!; + ssid = ssid ?? ''; + ssid = ssid.replaceAll(r'"', ''); + return ssid ?? ''; + } + @override void onReady() { super.onReady(); _initReplySubscription(); + + getWifiName().then((String value) { + state.phoneConnectedWiFi = value; + // update(); + // AppLog.log('wifiNameTF:${state.wifiNameTF.text} value:$value'); + }); } @override diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart index fc031e43..7302a69b 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -20,9 +19,11 @@ class GatewayGetWifiListPage extends StatefulWidget { State createState() => _GatewayGetWifiListPageState(); } -class _GatewayGetWifiListPageState extends State with RouteAware{ +class _GatewayGetWifiListPageState extends State + with RouteAware { final GatewayGetWifiListLogic logic = Get.put(GatewayGetWifiListLogic()); - final GatewayGetWifiListState state = Get.find().state; + final GatewayGetWifiListState state = + Get.find().state; @override Widget build(BuildContext context) { @@ -34,7 +35,8 @@ class _GatewayGetWifiListPageState extends State with Ro actionsList: [ TextButton( child: Text( - '刷新'.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp), + '刷新'.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), ), onPressed: logic.senderGetWifiListWifiAction, ), @@ -43,17 +45,25 @@ class _GatewayGetWifiListPageState extends State with Ro body: Column( children: [ Expanded( - child: Obx(() => state.wifiNameDataList.value.isNotEmpty ? ListView.builder( - itemCount: state.wifiNameDataList.value.length, - itemBuilder: (BuildContext c, int index) { - Map wifiNameStr = state.wifiNameDataList.value[index]; - return _messageListItem(wifiNameStr['wifiName'], wifiNameStr['rssi'], () { - Get.toNamed(Routers.gatewayConfigurationWifiPage, arguments: { - 'wifiName': wifiNameStr['wifiName'], - 'gatewayModel': state.gatewayModel - }); - }); - }) : NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 64.h)), + child: Obx(() => state.wifiNameDataList.value.isNotEmpty + ? ListView.builder( + itemCount: state.wifiNameDataList.value.length, + itemBuilder: (BuildContext c, int index) { + Map wifiNameStr = state.wifiNameDataList.value[index]; + return _messageListItem( + wifiNameStr['wifiName'], wifiNameStr['rssi'], () { + Get.toNamed(Routers.gatewayConfigurationWifiPage, + arguments: { + 'wifiName': wifiNameStr['wifiName'], + 'gatewayModel': state.gatewayModel + }); + }); + }) + : NoData( + noDataHeight: 1.sh - + ScreenUtil().statusBarHeight - + ScreenUtil().bottomBarHeight - + 64.h)), ), SubmitBtn( btnName: '手动配网'.tr, @@ -70,8 +80,7 @@ class _GatewayGetWifiListPageState extends State with Ro height: 64.h, ) ], - ) - ); + )); } Widget _messageListItem(String wifiName, String rssi, Function() action) { @@ -93,7 +102,7 @@ class _GatewayGetWifiListPageState extends State with Ro children: [ SizedBox( height: 79.h, - width: 1.sw - 20.w*2, + width: 1.sw - 20.w * 2, child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -103,7 +112,10 @@ class _GatewayGetWifiListPageState extends State with Ro maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( - fontSize: 22.sp, color: AppColors.blackColor), + fontSize: 22.sp, + color: state.phoneConnectedWiFi == wifiName + ? AppColors.mainColor + : AppColors.blackColor), ), ), // Text( diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart index 0ef78d83..224c1025 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart @@ -1,10 +1,8 @@ - - import 'package:get/get.dart'; import '../selectGateway/getGatewayInfo_model.dart'; -class GatewayGetWifiListState{ +class GatewayGetWifiListState { GatewayGetWifiListState() { var map = Get.arguments; if (map['gatewayModel'] != null && map['gatewayModel'] != '') { @@ -12,9 +10,11 @@ class GatewayGetWifiListState{ } } - final RxList> wifiNameDataList = >[].obs; + final RxList> wifiNameDataList = + >[].obs; GetGatewayInfoModel gatewayModel = GetGatewayInfoModel(); RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 RxInt sureBtnState = 0.obs; -} \ No newline at end of file + String? phoneConnectedWiFi; +} diff --git a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart index 89289209..09222b9e 100644 --- a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart +++ b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart @@ -97,9 +97,9 @@ class SelectGatewayListLogic extends BaseGetXController { } void startScanBlueList() { + state.devices.clear(); BlueManage().startScan(2000, DeviceType.gateway, (List list) { AppLog.log('ScanResultList:$list'); - state.devices.clear(); for (int i = 0; i < list.length; i++) { final ScanResult device = list[i]; // if ((device.advertisementData.serviceUuids.isNotEmpty @@ -107,7 +107,12 @@ class SelectGatewayListLogic extends BaseGetXController { // : '') // .toString()[31] != // '1') { - state.devices.add(list[i]); + if (!state.devices.contains(device)) { + state.devices.add(device); + } else { + // 包含的情况下替换 + state.devices[state.devices.indexOf(device)] = device; + } // AppLog.log('device:${list[i]}'); // } } diff --git a/lib/mine/gateway/addGateway/selectGatewayTypeNextTip/selectGatewayTypeNextTip_page.dart b/lib/mine/gateway/addGateway/selectGatewayTypeNextTip/selectGatewayTypeNextTip_page.dart index 6626f63f..e63d2cfd 100755 --- a/lib/mine/gateway/addGateway/selectGatewayTypeNextTip/selectGatewayTypeNextTip_page.dart +++ b/lib/mine/gateway/addGateway/selectGatewayTypeNextTip/selectGatewayTypeNextTip_page.dart @@ -53,7 +53,7 @@ class _SelectGatewayTypeNextTipPageState padding: EdgeInsets.all(20.w), child: Center( child: Text( - '网关通电后,长按重置按钮5秒,指示灯交替闪烁时点击下一步'.tr, + '网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步'.tr, textAlign: TextAlign.center, style: TextStyle(fontSize: 18.sp), ))), From cceec11e7f1ca60bdf217ae2a6a52ce25754e71b Mon Sep 17 00:00:00 2001 From: wsy <786612630@qq.com> Date: Sun, 26 Jan 2025 17:26:29 +0800 Subject: [PATCH 64/67] =?UTF-8?q?fix:=20=E6=94=BE=E5=BC=80Firebase?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index b4fc09fd..a25d730e 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -27,7 +27,7 @@ import 'tools/store_service.dart'; FutureOr main() async { FlutterBugly.postCatchedException(() async { WidgetsFlutterBinding.ensureInitialized(); - // await ApmHelper.instance.initApp(); + await ApmHelper.instance.initApp(); await _setCommonServices(); // 设置国际化信息 From e1d347760e1882be625874df996f9ecdb5a9dbc1 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Sun, 26 Jan 2025 18:01:22 +0800 Subject: [PATCH 65/67] =?UTF-8?q?fix=EF=BC=9A=E6=98=9F=E6=98=9F=E9=94=81?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=8C=85=E5=90=8D=E7=AD=BE=E5=90=8D=E5=90=8E?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?key=E7=94=B3=E8=AF=B7=E3=80=81=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=80=82=E9=85=8D=E7=AD=89=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Podfile.lock | 43 ++++++++++++++-------------- ios/Runner.xcodeproj/project.pbxproj | 35 +++++++++++++++------- 2 files changed, 47 insertions(+), 31 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index be48a85c..a137bc25 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -10,12 +10,12 @@ PODS: - EMASRest - AlicloudUT (5.2.0.16): - AlicloudUTDID - - AlicloudUTDID (1.6.1) - - AlicloudUtils (2.0.1): + - AlicloudUTDID (1.6.0) + - AlicloudUtils (2.0.0): - AlicloudUTDID - aliyun_face_plugin (0.0.1): - Flutter - - AMap3DMap (10.1.200): + - AMap3DMap (10.0.700): - AMapFoundation (>= 1.8.0) - amap_flutter_location (0.0.1): - AMapLocation @@ -167,10 +167,10 @@ PODS: - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleMaps (7.4.0): - - GoogleMaps/Maps (= 7.4.0) - - GoogleMaps/Base (7.4.0) - - GoogleMaps/Maps (7.4.0): + - GoogleMaps (6.2.1): + - GoogleMaps/Maps (= 6.2.1) + - GoogleMaps/Base (6.2.1) + - GoogleMaps/Maps (6.2.1): - GoogleMaps/Base - GoogleUtilities/AppDelegateSwizzler (8.0.2): - GoogleUtilities/Environment @@ -203,8 +203,8 @@ PODS: - Flutter - image_picker_ios (0.0.1): - Flutter - - ios-voice-processor (1.1.2) - - JCore (4.9.0) + - ios-voice-processor (1.1.0) + - JCore (4.6.2) - JPush (5.3.0): - JCore (>= 2.0.0) - jpush_flutter (0.0.2): @@ -230,9 +230,9 @@ PODS: - permission_handler_apple (9.3.0): - Flutter - PromisesObjC (2.4.0) - - SDWebImage (5.20.0): - - SDWebImage/Core (= 5.20.0) - - SDWebImage/Core (5.20.0) + - SDWebImage (5.19.2): + - SDWebImage/Core (= 5.19.2) + - SDWebImage/Core (5.19.2) - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS @@ -243,7 +243,7 @@ PODS: - system_settings (0.0.1): - Flutter - Toast (4.1.1) - - UMCommon (7.5.2): + - UMCommon (7.4.7): - UMDevice - UMDevice (3.4.0) - umeng_common_sdk (0.0.1): @@ -427,10 +427,10 @@ SPEC CHECKSUMS: AlicloudPush: 88529c9b796e4ece0601de0867b30359f55b61f7 AlicloudSender: 1f468b6bd962a099ffc19d45e3608b0fe98f259d AlicloudUT: 6d1cf30d57d096b7e9bb4b069dd0ba6ad59a3338 - AlicloudUTDID: 5d2f22d50e11eecd38f30bc7a48c71925ea90976 - AlicloudUtils: ef4436f52b828b1182b002373758ecb88068e679 + AlicloudUTDID: 4e9d44c2fd704b3508069c38eaec9d6a759e702c + AlicloudUtils: 2a78de434a8b2dc99e408c4d6220e654076d9ef0 aliyun_face_plugin: 7a90b6526c5acea616062e809699294c782c3eb8 - AMap3DMap: 06a11a83072857d6076c14060b2e1a676182e84d + AMap3DMap: 6ee456d7ba946ebbad580a343b74ffa8e9936175 amap_flutter_location: 44ff5beb64f42e0bf5feb402fe299dac0013af6f amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec @@ -465,12 +465,12 @@ SPEC CHECKSUMS: fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849 google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99 GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de - GoogleMaps: 032f676450ba0779bd8ce16840690915f84e57ac + GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - ios-voice-processor: 00bf226d172c7006f565d6b6dbf2dc5e5b76938b - JCore: 1128d8c6f33f5c3607536a7b87c0e450d2c6ada6 + ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1 + JCore: 024c73b04e110b496e93d8c127ea9cd1ed934e4c JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5 just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa @@ -481,13 +481,13 @@ SPEC CHECKSUMS: path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 + SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 system_settings: 8f5cdbfa72c677fc8d665b863bcc20d393d87e9d Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e - UMCommon: 72513a01ebca2dead52f2112b4d7c6196dbbe412 + UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7 UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82 umeng_common_sdk: a8abd7f86dfd013dbbeeae587ee143760c6582f2 url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe @@ -498,3 +498,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6 COCOAPODS: 1.14.3 + diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7006341b..7a12c6ca 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1075,8 +1075,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1086,6 +1088,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1197,8 +1200,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1207,6 +1212,7 @@ ); PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.skychip.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1220,8 +1226,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P8997RW3V8; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1231,6 +1239,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.xhjcn.lock.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1561,8 +1570,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = NAQ5PL2DYC; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC; INFOPLIST_FILE = Runner/info_sky.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1572,6 +1583,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; @@ -1754,8 +1766,10 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P8997RW3V8; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8; INFOPLIST_FILE = Runner/info_xhj.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1765,6 +1779,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock.pre; PRODUCT_NAME = Runner; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.xhjcn.lock.pre.mobileprovision; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; From 7a694f567ea02b7c5b842a057b551dd8a40f48b8 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 7 Feb 2025 11:04:23 +0800 Subject: [PATCH 66/67] =?UTF-8?q?fix=EF=BC=9Axhj=20applinks=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner/RunnerRelease-xhj.entitlements | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Runner/RunnerRelease-xhj.entitlements b/ios/Runner/RunnerRelease-xhj.entitlements index d7b50f42..66cd751d 100755 --- a/ios/Runner/RunnerRelease-xhj.entitlements +++ b/ios/Runner/RunnerRelease-xhj.entitlements @@ -6,7 +6,7 @@ development com.apple.developer.associated-domains - applinks:lock.skychip.top + applinks:lock.xhjcn.ltd com.apple.external-accessory.wireless-configuration From 0f246f306713675299b5b6d9c1e77211272e5505 Mon Sep 17 00:00:00 2001 From: Liuyf Date: Fri, 7 Feb 2025 15:27:06 +0800 Subject: [PATCH 67/67] =?UTF-8?q?fix=EF=BC=9Axhj=EF=BC=8Csky=20=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner/info_xhj.plist | 6 +-- lib/flavors.dart | 38 +++++++++++++++++++ lib/mine/mine/starLockMine_page.dart | 2 +- lib/mine/mineSet/mineSet/mineSet_page.dart | 3 +- .../wx_push_miniProgram.dart | 3 +- pubspec.yaml | 12 +++--- 6 files changed, 51 insertions(+), 13 deletions(-) diff --git a/ios/Runner/info_xhj.plist b/ios/Runner/info_xhj.plist index f6cc0fca..a21ee95c 100755 --- a/ios/Runner/info_xhj.plist +++ b/ios/Runner/info_xhj.plist @@ -30,10 +30,10 @@ CFBundleURLIconFile CFBundleURLName - com.sky.skysmartlock + com.xhj.xhjsmartlock CFBundleURLSchemes - skysmartlock + xhjsmartlock @@ -45,7 +45,7 @@ weixin CFBundleURLSchemes - wxbe340095d2b8fd51 + wx8e48112e22343817 diff --git a/lib/flavors.dart b/lib/flavors.dart index 145d2bf5..0d4fbe8f 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -39,6 +39,13 @@ class UmengKey { typedef dynamic fCallFunction(); +class WechatAppInfo { + WechatAppInfo({required this.wechatAppId, required this.universalLink}); + + String wechatAppId; + String universalLink; +} + class F { static Flavor? appFlavor; @@ -281,6 +288,37 @@ class F { } } + static WechatAppInfo get wechatAppInfo { + switch (appFlavor) { + case Flavor.local: + return WechatAppInfo( + wechatAppId: 'wxbe340095d2b8fd51', + universalLink: 'https://apt.skychip.top/'); + case Flavor.dev: + return WechatAppInfo( + wechatAppId: 'wxbe340095d2b8fd51', + universalLink: 'https://apt.skychip.top/'); + case Flavor.pre: + case Flavor.sky_pre: + case Flavor.xhj_pre: + return WechatAppInfo( + wechatAppId: 'wxbe340095d2b8fd51', + universalLink: 'https://apt.skychip.top/'); + case Flavor.sky: + return WechatAppInfo( + wechatAppId: 'wxbe340095d2b8fd51', + universalLink: 'https://lock.skychip.top/'); + case Flavor.xhj: + case Flavor.xhj_bundle: + return WechatAppInfo( + wechatAppId: 'wx8e48112e22343817', + universalLink: 'https://lock.xhjcn.ltd/'); + default: + return WechatAppInfo( + wechatAppId: 'wxbe340095d2b8fd51', universalLink: ''); + } + } + // 是否是生产环境 static bool get isProductionEnv { switch (appFlavor) { diff --git a/lib/mine/mine/starLockMine_page.dart b/lib/mine/mine/starLockMine_page.dart index fad1ad1d..aae1828c 100755 --- a/lib/mine/mine/starLockMine_page.dart +++ b/lib/mine/mine/starLockMine_page.dart @@ -49,7 +49,7 @@ class StarLockMinePageState extends State with BaseWidget { onTap: () { WechatManageTool.getAppInfo(() { WxPushWeChatMiniProgramTool.pushWeChatMiniProgram( - 'wxbe340095d2b8fd51'); + F.wechatAppInfo.wechatAppId, F.wechatAppInfo.universalLink); }); }, child: Padding( diff --git a/lib/mine/mineSet/mineSet/mineSet_page.dart b/lib/mine/mineSet/mineSet/mineSet_page.dart index e0835c62..0f277f3a 100755 --- a/lib/mine/mineSet/mineSet/mineSet_page.dart +++ b/lib/mine/mineSet/mineSet/mineSet_page.dart @@ -86,7 +86,8 @@ class _MineSetPageState extends State onTap: () { WechatManageTool.getAppInfo(() { WxPushWeChatMiniProgramTool.pushWeChatMiniProgram( - 'wxbe340095d2b8fd51'); + F.wechatAppInfo.wechatAppId, + F.wechatAppInfo.universalLink); }); }, child: ClipRRect( diff --git a/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart b/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart index e877bae0..43a16561 100644 --- a/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart +++ b/lib/tools/wechat/wx_push_miniProgram/wx_push_miniProgram.dart @@ -23,10 +23,9 @@ class WxPushWeChatMiniProgramTool { doOnIOS: true); } - static Future pushWeChatMiniProgram(String appId) async { + static Future pushWeChatMiniProgram(String appId,String _associationUrl) async { if (!isInit) { isInit = true; - final String _associationUrl = await Storage.getAssociationUrl(); await initWeChatMiniProgram(appId, _associationUrl); final MiniProgram miniProgram = MiniProgram( diff --git a/pubspec.yaml b/pubspec.yaml index 487bf75f..8462e77b 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -109,12 +109,12 @@ version: 1.0.85+2025010802 environment: sdk: '>=2.12.0 <3.0.0' -fluwx: - app_id: 'wxbe340095d2b8fd51' - debug_logging: true - android: - ios: - universal_link: https://lock.skychip.top/apple-app-site-association.json +#fluwx: +# app_id: 'wxbe340095d2b8fd51' +# debug_logging: true +# android: +# ios: +# universal_link: https://lock.skychip.top/apple-app-site-association.json # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions