Merge branch 'release' of https://gitee.com/starlock-cn/app-starlock into release

This commit is contained in:
魏少阳 2024-06-18 10:36:46 +08:00
commit 1b66698504
10 changed files with 168 additions and 137 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -198,6 +198,18 @@ android {
}
buildTypes {
debug {
// release编译模式下应用闪退[Debug模式下运行正常但是打Release包时则闪退解决办法](https://blog.csdn.net/weixin_39370093/article/details/109631210)
// release模式设置混淆可以解决地图闪退问题
//
minifyEnabled false
shrinkResources false
productFlavors.local.signingConfig signingConfigs.debug
productFlavors.dev.signingConfig signingConfigs.debug
productFlavors.pre.signingConfig signingConfigs.debug
productFlavors.sky.signingConfig signingConfigs.sky
productFlavors.xhj.signingConfig signingConfigs.xhj
}
release {
// release编译模式下应用闪退[Debug模式下运行正常但是打Release包时则闪退解决办法](https://blog.csdn.net/weixin_39370093/article/details/109631210)
// release模式设置混淆可以解决地图闪退问题

View File

@ -179,6 +179,7 @@ class LockDetailLogic extends BaseGetXController {
Future<void> loadData({ required LockListInfoItemEntity lockListInfoItemEntity,required bool isOnlyOneData}) async {
state.keyInfos.value = lockListInfoItemEntity;
CommonDataManage().currentLockUserNo = state.keyInfos.value.lockUserNo!;
CommonDataManage().initUserNo = state.keyInfos.value.initUserNo!;
CommonDataManage().currentKeyInfo = state.keyInfos.value;
state.lockUserNo = state.keyInfos.value.lockUserNo!;

View File

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -60,6 +61,9 @@ class _LockDetailPageState extends State<LockDetailPage>
_initRefreshLockDetailInfoDataEventAction();
logic.initReplySubscription();
logic.initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
logic.loadData(
lockListInfoItemEntity: widget.lockListInfoItemEntity,
isOnlyOneData: widget.isOnlyOneData);
}
@override
@ -68,6 +72,7 @@ class _LockDetailPageState extends State<LockDetailPage>
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
state.isOpenLockNeedOnline.refresh();
}
StreamSubscription? _lockRefreshLockDetailInfoDataEvent;
@ -81,69 +86,8 @@ class _LockDetailPageState extends State<LockDetailPage>
});
}
Future<void> loadData() async {
state.keyInfos.value = widget.lockListInfoItemEntity;
CommonDataManage().currentLockUserNo = state.keyInfos.value.lockUserNo!;
CommonDataManage().initUserNo = state.keyInfos.value.initUserNo!;
CommonDataManage().currentKeyInfo = state.keyInfos.value;
state.lockUserNo = state.keyInfos.value.lockUserNo!;
if (state.keyInfos.value.keyStatus ==
XSConstantMacro.keyStatusWaitIneffective ||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusFrozen ||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusExpired ||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusDeleted ||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusReset) {
state.openDoorBtnisUneable.value = false;
state.bottomBtnisEable.value = false;
} else {
state.openDoorBtnisUneable.value = true;
state.bottomBtnisEable.value = true;
}
state.isOnlyOneData = widget.isOnlyOneData;
state.senderUserId = state.keyInfos.value.senderUserId!;
state.isAttendance.value = state.keyInfos.value.lockSetting!.attendance!;
state.isOpenLockNeedOnline.value =
state.keyInfos.value.lockSetting!.appUnlockOnline!;
state.electricQuantity.value = state.keyInfos.value.electricQuantity!;
state.isOpenPassageMode.value = state.keyInfos.value.passageMode!;
state.lockAlias.value = state.keyInfos.value.lockAlias!;
Storage.setString(saveLockAlias, state.lockAlias.value);
BlueManage().connectDeviceName =
state.keyInfos.value.bluetooth!.bluetoothDeviceName!;
final List<int> publicKeyData =
state.keyInfos.value.bluetooth!.publicKey!.cast<int>();
final List<String> saveStrList = changeIntListToStringList(publicKeyData);
Storage.setStringList(saveBluePublicKey, saveStrList);
//
final List<int> privateKeyData =
state.keyInfos.value.bluetooth!.privateKey!.cast<int>();
final List<String> savePrivateKeyList =
changeIntListToStringList(privateKeyData);
Storage.setStringList(saveBluePrivateKey, savePrivateKeyList);
// signKey
final List<int> signKeyData =
state.keyInfos.value.bluetooth!.signKey!.cast<int>();
final List<String> saveSignKeyList = changeIntListToStringList(signKeyData);
Storage.setStringList(saveBlueSignKey, saveSignKeyList);
final bool ifHaveKey = await Storage.ifHaveKey(saveBlueToken);
if (!ifHaveKey) {
final List<String> saveTokenList =
changeIntListToStringList(<int>[0, 0, 0, 0]);
Storage.setStringList(saveBlueToken, saveTokenList);
}
}
@override
Widget build(BuildContext context) {
loadData();
return F.sw(skyCall: skWidget, xhjCall: xhjWidget);
}
@ -155,35 +99,50 @@ class _LockDetailPageState extends State<LockDetailPage>
final String lockAlias = state.keyInfos.value.lockAlias!;
return Stack(
children: <Widget>[
Column(
children: <Widget>[
SizedBox(
height: 15.h,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 24.w),
child: Text(
lockAlias,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 24.sp, color: Colors.black),
SingleChildScrollView(
child: Column(
children: <Widget>[
SizedBox(
height: 15.h,
),
),
SizedBox(
height: 35.h,
),
xhjInfoView(),
SizedBox(
height: 35.h,
),
labelText('images/icon_slider_horizontal.png', '功能'.tr, () {
Get.to(LockDetailListPage(
title: '功能'.tr, items: getBottomWidget()));
}),
labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () {
Get.to(LockDetailListPage(
title: '配件'.tr, items: getAttachmentWidget()));
}),
],
Padding(
padding: EdgeInsets.symmetric(horizontal: 24.w),
child: Text(
lockAlias,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 24.sp, color: Colors.black),
),
),
SizedBox(
height: 35.h,
),
xhjInfoView(),
SizedBox(
height: 35.h,
),
labelText(
img: 'images/icon_slider_horizontal.png',
text: '功能'.tr,
child: bottomWidget()),
labelText(
img: 'images/icon_puzzlepiece_extension.png',
text: '配件'.tr,
child: attachmentWidget()),
btnText(
img: 'images/main/icon_main_set.png',
text: TranslationLoader.lanKeys!.set!.tr,
onTap: () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.lockSetPage,
arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData
});
}),
],
),
),
Visibility(
visible: state.iSClosedUnlockSuccessfulPopup.value,
@ -199,7 +158,8 @@ class _LockDetailPageState extends State<LockDetailPage>
);
}
Widget labelText(String img, String text, var onTap) {
Widget btnText(
{required String img, required String text, required var onTap}) {
return GestureDetector(
onTap: onTap,
child: Container(
@ -212,16 +172,19 @@ class _LockDetailPageState extends State<LockDetailPage>
BoxShadow(
color: Colors.black.withOpacity(0.15),
offset: const Offset(0, 0),
blurRadius: 10.r,
blurRadius: 5.r,
spreadRadius: 0,
),
]),
child: Row(
children: <Widget>[
Image.asset(
img,
width: 32.r,
height: 32.r,
FlavorsImg(
black: true,
child: Image.asset(
img,
width: 32.r,
height: 32.r,
),
),
SizedBox(
width: 15.w,
@ -241,6 +204,49 @@ class _LockDetailPageState extends State<LockDetailPage>
);
}
Widget labelText(
{required String img, required String text, required Widget child}) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 0.05.sw, vertical: 15.h),
padding: EdgeInsets.symmetric(horizontal: 0.05.sw, vertical: 20.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.r),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.black.withOpacity(0.15),
offset: const Offset(0, 0),
blurRadius: 5.r,
spreadRadius: 0,
),
]),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Image.asset(
img,
width: 32.r,
height: 32.r,
),
SizedBox(
width: 15.w,
),
Text(
text,
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor),
),
],
),
SizedBox(
height: 18.h,
),
child,
],
),
);
}
Widget xhjInfoView() {
return Container(
width: 0.9.sw,
@ -354,7 +360,7 @@ class _LockDetailPageState extends State<LockDetailPage>
BoxShadow(
color: Colors.black.withOpacity(0.3),
offset: const Offset(0, 0),
blurRadius: 10.r,
blurRadius: 15.r,
spreadRadius: 0,
),
]),
@ -777,7 +783,7 @@ class _LockDetailPageState extends State<LockDetailPage>
child: Image.asset('images/main/icon_lockDetail_needNetwork.png',
width: 24.w,
height: 20.w,
color: state.keyInfos.value.appUnlockOnline == 1
color: state.isOpenLockNeedOnline.value == 1
? AppColors.mainColor
: AppColors.btnDisableColor),
),
@ -786,7 +792,7 @@ class _LockDetailPageState extends State<LockDetailPage>
'手机需联网',
style: TextStyle(
fontSize: 20.sp,
color: state.keyInfos.value.appUnlockOnline == 1
color: state.isOpenLockNeedOnline.value == 1
? AppColors.mainColor
: AppColors.btnDisableColor),
),
@ -896,6 +902,7 @@ class _LockDetailPageState extends State<LockDetailPage>
// childAspectRatio: 3,
crossAxisSpacing: 20.w,
mainAxisSpacing: 0.h,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
children: getAttachmentWidget()),
);
@ -940,7 +947,8 @@ class _LockDetailPageState extends State<LockDetailPage>
crossAxisCount: 4,
// childAspectRatio: 3,
crossAxisSpacing: 25.h,
mainAxisSpacing: 0.h,
mainAxisSpacing: 5.h,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
children: getBottomWidget()),
);
@ -982,13 +990,15 @@ class _LockDetailPageState extends State<LockDetailPage>
}));
//
showWidgetArr.add(bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () {
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData
});
}));
if (F.isSKY) {
showWidgetArr.add(bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () {
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData
});
}));
}
return showWidgetArr;
}
@ -1166,17 +1176,19 @@ class _LockDetailPageState extends State<LockDetailPage>
}),
);
endWiddget.add(
//
bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () {
// logic.clickItemBtnAction(10);
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData,
});
}),
);
if (F.isSKY) {
endWiddget.add(
//
bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () {
// logic.clickItemBtnAction(10);
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData,
});
}),
);
}
showWidgetArr.addAll(endWiddget);
return showWidgetArr;
}
@ -1218,13 +1230,13 @@ class _LockDetailPageState extends State<LockDetailPage>
xhjCall: () => Container(
color: Colors.white,
margin: EdgeInsets.symmetric(vertical: 5.h),
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.w),
child: Row(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 42.w,
height: 42.h,
height: 42.w,
child: FlavorsImg(
black: true,
child: Image.asset(iconUrl,
@ -1236,7 +1248,7 @@ class _LockDetailPageState extends State<LockDetailPage>
fit: BoxFit.fitWidth),
),
),
SizedBox(width: 20.w),
SizedBox(height: 20.h),
Text(
name,
style: TextStyle(

View File

@ -569,15 +569,10 @@ class LockSetLogic extends BaseGetXController {
);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = '';
final bool isXHJ = F.isXHJ;
final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200))
.then((e) {
if (isXHJ) {
Get.close(3);
} else {
Get.close(isOnlyOneData ? 1 : 2);
}
Get.close(isOnlyOneData ? 1 : 2);
});
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());
@ -594,17 +589,10 @@ class LockSetLogic extends BaseGetXController {
state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = '';
final bool isXHJ = F.isXHJ;
final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200))
.then((e) {
if (isXHJ) {
Get.close(3);
} else {
final int onlyOneDataInt = isOnlyOneData ? 1 : 2;
Get.close(onlyOneDataInt);
}
Get.close(isOnlyOneData ? 1 : 2);
});
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());

View File

@ -285,6 +285,9 @@ class NearbyLockLogic extends BaseGetXController {
index = index + 20;
AppLog.log('mac地址 macAddressStr:$macAddressStr');
//
state.lockInfo['timezoneOffset'] = DateTime.now().timeZoneOffset.inSeconds;
//
final int featureValueLength = reply.data[index];
index = index + 1;

View File

@ -23,7 +23,7 @@ abstract class Api {
final String getLockNetTokenURL = '/lock/getLockNetToken'; //token
final String updateLockUserNoURL = '/key/updateLockUserNo'; //NO
final String bindingBlueAdminURL = '/lock/bindAdmin'; //
final String bindingBlueAdminURL = '/v2/lock/bindAdmin'; //
final String modifyKeyNameURL = '/key/modifyKeyName'; //
final String updateLockNameURL = '/lock/updateLockName'; //()
final String modifyKeyNameForAdminURL =

View File

@ -7,4 +7,6 @@ class MessageConstant {
static const int lockReceive = 30;
//+
static const int keyReceive = 40;
//
static const int lockSetChange = 50;
}

View File

@ -71,6 +71,18 @@ class MessageManagement {
final int lockId = data['lockId'];
eventBus.fire(RogerThatLockInfoDataEvent(keyId: keyId, lockId: lockId));
break;
case MessageConstant.lockSetChange:
final int keyId = data['keyId'];
final int lockId = data['lockId'];
final Map<String, dynamic> extra = data['updateFieldList'];
if (extra['appUnlockOnline'] != null) {
final String appUnlockOnline = extra['appUnlockOnline'];
eventBus.fire(
LockSetChangeSetRefreshLockDetailWithType(1, appUnlockOnline));
eventBus.fire(RefreshLockInfoDataEvent(keyId: keyId, lockId: lockId));
}
break;
default:
throw Exception('无法识别eventNo 参数:$eventNo');
}

View File

@ -72,8 +72,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.61+2024061103xhj 线上环境,对外发布,提交测试:处理华为拒审
# 1.0.62+2024061301xhj 线上环境,对外发布,提交测试:处理华为拒审
# 1.0.63+2024061302xhj 线上环境,提交测试:回归 bug
# 1.0.65+2024061801xhj 线上环境,提交测试:回归 bug
version: 1.0.63+2024061302
version: 1.0.65+2024061801
environment:
sdk: '>=2.12.0 <3.0.0'