feat:接入自定义消息,完成锁列表状态改变和新增和删除

This commit is contained in:
anfe 2024-06-15 13:35:23 +08:00
parent 74393a3d64
commit 0c85af9d0f
24 changed files with 493 additions and 279 deletions

View File

@ -885,5 +885,6 @@
"请输入时间(秒)": "Please enter the time (seconds)", "请输入时间(秒)": "Please enter the time (seconds)",
"加载数据失败": "Failed to load data", "加载数据失败": "Failed to load data",
"重试": "Retry", "重试": "Retry",
"升级中,是否退出": "During the upgrade, whether to exit" "升级中,是否退出": "During the upgrade, whether to exit",
"该已锁被删除": "The locked is deleted"
} }

View File

@ -917,5 +917,6 @@
"请输入时间(秒)": "请输入时间(秒)", "请输入时间(秒)": "请输入时间(秒)",
"加载数据失败": "加载数据失败", "加载数据失败": "加载数据失败",
"重试": "重试", "重试": "重试",
"升级中,是否退出": "升级中,是否退出" "升级中,是否退出": "升级中,是否退出",
"该已锁被删除": "该已锁被删除"
} }

View File

@ -883,5 +883,6 @@
"请输入时间(秒)": "请输入时间(秒)", "请输入时间(秒)": "请输入时间(秒)",
"加载数据失败": "加载数据失败", "加载数据失败": "加载数据失败",
"重试": "重试", "重试": "重试",
"升级中,是否退出": "升级中,是否退出" "升级中,是否退出": "升级中,是否退出",
"该已锁被删除": "该已锁被删除"
} }

View File

@ -9,7 +9,7 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart'; import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import '../../mine/mine/starLockMine_logic.dart'; import '../../mine/mine/starLockMine_logic.dart';
import '../../network/api_repository.dart'; import '../../network/api_repository.dart';
@ -48,7 +48,7 @@ class StarLockLoginLogic extends BaseGetXController {
password: state.pwd.value, password: state.pwd.value,
countryCode: state.countryCode.value, countryCode: state.countryCode.value,
username: state.emailOrPhone.value, username: state.emailOrPhone.value,
deviceInfo: state.deviceInfoMap.value); deviceInfo: state.deviceInfoMap);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
Storage.saveLoginData(entity.data); Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1); Storage.setBool(saveIsVip, entity.data!.isVip == 1);
@ -61,12 +61,13 @@ class StarLockLoginLogic extends BaseGetXController {
} }
Future<void> checkIpAction() async { Future<void> checkIpAction() async {
final CheckIPEntity entity = await ApiRepository.to.checkIpAction( final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
ip: ''
);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
if(state.countryName.value == entity.data!.name){ if (state.countryName.value == entity.data!.name) {
ShowTipView().showSureAlertDialog('国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续'.tr, tipTitle: '确认国家或地区'.tr, sureStr: '我知道了'.tr); ShowTipView().showSureAlertDialog(
'国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续'.tr,
tipTitle: '确认国家或地区'.tr,
sureStr: '我知道了'.tr);
} }
} }
} }
@ -103,7 +104,7 @@ class StarLockLoginLogic extends BaseGetXController {
} }
// //
void flushedDeviceInfo(){ void flushedDeviceInfo() {
XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) { XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) {
state.deviceInfoMap.value = data; state.deviceInfoMap.value = data;
}).catchError((dynamic error) { }).catchError((dynamic error) {
@ -111,5 +112,4 @@ class StarLockLoginLogic extends BaseGetXController {
AppLog.log('获取设备信息时出错: $error'); AppLog.log('获取设备信息时出错: $error');
}); });
} }
} }

View File

@ -11,7 +11,7 @@ import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart'; import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
import 'package:star_lock/tools/eventBusEventManage.dart'; import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import '../../network/api_repository.dart'; import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart'; import '../../tools/baseGetXController.dart';

View File

@ -14,7 +14,7 @@ import 'package:star_lock/tools/device_info_service.dart';
import 'package:star_lock/tools/pay/wx_pay_tool.dart'; import 'package:star_lock/tools/pay/wx_pay_tool.dart';
import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
import 'app.dart'; import 'app.dart';

View File

@ -9,6 +9,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockTime/getServerDatetime_entity.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockTime/getServerDatetime_entity.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/tools/throttler.dart'; import 'package:star_lock/tools/throttler.dart';
import 'package:star_lock/widget/permission/permission_dialog.dart'; import 'package:star_lock/widget/permission/permission_dialog.dart';
@ -174,6 +175,66 @@ 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().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 = 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);
}
}
// //
void openDoorError() { void openDoorError() {
resetOpenDoorState(); resetOpenDoorState();
@ -184,7 +245,7 @@ class LockDetailLogic extends BaseGetXController {
// //
void closeLuckStatus() { void closeLuckStatus() {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
state.openDoorBtnisUneable.value = true; // state.openDoorBtnisUneable.value = true;
state.animationController!.stop(canceled: true); state.animationController!.stop(canceled: true);
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
} }
@ -516,7 +577,7 @@ class LockDetailLogic extends BaseGetXController {
void resetOpenDoorState() { void resetOpenDoorState() {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
state.openDoorBtnisUneable.value = false; // state.openDoorBtnisUneable.value = false;
state.animationController?.reset(); state.animationController?.reset();
state.animationController?.forward(); state.animationController?.forward();
eventBus.fire(RefreshLockDetailInfoDataEvent()); eventBus.fire(RefreshLockDetailInfoDataEvent());

View File

@ -46,6 +46,7 @@ class _LockDetailPageState extends State<LockDetailPage>
// with RouteAware // with RouteAware
final LockDetailLogic logic = Get.put(LockDetailLogic()); final LockDetailLogic logic = Get.put(LockDetailLogic());
final LockDetailState state = Get.find<LockDetailLogic>().state; final LockDetailState state = Get.find<LockDetailLogic>().state;
StreamSubscription<void>? _lockRefreshLockDetailInfoDataEvent;
@override @override
void initState() { void initState() {
@ -60,6 +61,16 @@ class _LockDetailPageState extends State<LockDetailPage>
_initRefreshLockDetailInfoDataEventAction(); _initRefreshLockDetailInfoDataEventAction();
logic.initReplySubscription(); logic.initReplySubscription();
logic.initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction(); logic.initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
logic.loadData(
lockListInfoItemEntity: widget.lockListInfoItemEntity,
isOnlyOneData: widget.isOnlyOneData);
}
@override
void deactivate() {
Get.delete<LockDetailLogic>();
super.deactivate();
} }
@override @override
@ -70,8 +81,6 @@ class _LockDetailPageState extends State<LockDetailPage>
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
} }
StreamSubscription? _lockRefreshLockDetailInfoDataEvent;
void _initRefreshLockDetailInfoDataEventAction() { void _initRefreshLockDetailInfoDataEventAction() {
// eventBus // eventBus
_lockRefreshLockDetailInfoDataEvent = eventBus _lockRefreshLockDetailInfoDataEvent = eventBus
@ -81,68 +90,8 @@ class _LockDetailPageState extends State<LockDetailPage>
}); });
} }
Future<void> loadData() async {
state.keyInfos.value = widget.lockListInfoItemEntity;
CommonDataManage().currentLockUserNo = state.keyInfos.value.lockUserNo!;
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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
loadData();
return F.sw(skyCall: skWidget, xhjCall: xhjWidget); return F.sw(skyCall: skWidget, xhjCall: xhjWidget);
} }
@ -175,10 +124,16 @@ class _LockDetailPageState extends State<LockDetailPage>
height: 35.h, height: 35.h,
), ),
labelText('images/icon_slider_horizontal.png', '功能'.tr, () { labelText('images/icon_slider_horizontal.png', '功能'.tr, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.to(LockDetailListPage( Get.to(LockDetailListPage(
title: '功能'.tr, items: getBottomWidget())); title: '功能'.tr, items: getBottomWidget()));
}), }),
labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () { labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.to(LockDetailListPage( Get.to(LockDetailListPage(
title: '配件'.tr, items: getAttachmentWidget())); title: '配件'.tr, items: getAttachmentWidget()));
}), }),
@ -365,7 +320,7 @@ class _LockDetailPageState extends State<LockDetailPage>
Icon( Icon(
Icons.bluetooth_searching, Icons.bluetooth_searching,
size: 78.r, size: 78.r,
color: AppColors.mainColor.withOpacity(0.6), color: AppColors.wifiDisableColor.withOpacity(0.7),
) )
else else
Image.asset( Image.asset(
@ -388,7 +343,7 @@ class _LockDetailPageState extends State<LockDetailPage>
width: 168.r, width: 168.r,
height: 168.r, height: 168.r,
color: state.openDoorBtnisUneable.value == false color: state.openDoorBtnisUneable.value == false
? AppColors.mainColor.withOpacity(0.6) ? AppColors.wifiDisableColor.withOpacity(0.7)
: state.isOpenPassageMode.value == 1 : state.isOpenPassageMode.value == 1
? Colors.red ? Colors.red
: AppColors.mainColor, : AppColors.mainColor,
@ -407,8 +362,7 @@ class _LockDetailPageState extends State<LockDetailPage>
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Text( Text(
TranslationLoader logic.getKeyStatusTextAndShow(),
.lanKeys!.clickUnlockAndHoldDownClose!.tr,
style: TextStyle( style: TextStyle(
color: AppColors.darkGrayTextColor, color: AppColors.darkGrayTextColor,
fontSize: 20.sp, fontSize: 20.sp,
@ -677,6 +631,9 @@ class _LockDetailPageState extends State<LockDetailPage>
state.keyInfos.value.lockSetting!.remoteUnlock == 1, state.keyInfos.value.lockSetting!.remoteUnlock == 1,
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
ShowCupertinoAlertView().isToRemoteUnLockAlert( ShowCupertinoAlertView().isToRemoteUnLockAlert(
remoteUnlockAction: () { remoteUnlockAction: () {
if (state.keyInfos.value.hasGateway != 1) { if (state.keyInfos.value.hasGateway != 1) {
@ -793,6 +750,9 @@ class _LockDetailPageState extends State<LockDetailPage>
const Spacer(), const Spacer(),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.selectLockTypePage); Get.toNamed(Routers.selectLockTypePage);
}, },
child: Padding( child: Padding(
@ -926,6 +886,9 @@ class _LockDetailPageState extends State<LockDetailPage>
// //
showWidgetArr.add(bottomItem('images/main/icon_main_addLock.png', '新增配件'.tr, showWidgetArr.add(bottomItem('images/main/icon_main_addLock.png', '新增配件'.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Navigator.pushNamed(context, Routers.accessoriesListPage); Navigator.pushNamed(context, Routers.accessoriesListPage);
})); }));
@ -965,6 +928,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_clockingIn.png', 'images/main/icon_main_clockingIn.png',
TranslationLoader.lanKeys!.checkingIn!.tr, TranslationLoader.lanKeys!.checkingIn!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.checkingInListPage, Get.toNamed(Routers.checkingInListPage,
arguments: state.keyInfos.value); arguments: state.keyInfos.value);
})); }));
@ -974,6 +940,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_operatingRecord.png', 'images/main/icon_main_operatingRecord.png',
TranslationLoader.lanKeys!.operatingRecord!.tr, TranslationLoader.lanKeys!.operatingRecord!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.doorLockLogPage, Get.toNamed(Routers.doorLockLogPage,
arguments: <String, LockListInfoItemEntity>{ arguments: <String, LockListInfoItemEntity>{
'keyInfo': state.keyInfos.value 'keyInfo': state.keyInfos.value
@ -983,6 +952,9 @@ class _LockDetailPageState extends State<LockDetailPage>
// //
showWidgetArr.add(bottomItem('images/main/icon_main_set.png', showWidgetArr.add(bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () { TranslationLoader.lanKeys!.set!.tr, true, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{ Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData 'isOnlyOneData': state.isOnlyOneData
@ -1001,6 +973,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_clockingIn.png', 'images/main/icon_main_clockingIn.png',
TranslationLoader.lanKeys!.checkingIn!.tr, TranslationLoader.lanKeys!.checkingIn!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.checkingInListPage, Get.toNamed(Routers.checkingInListPage,
arguments: state.keyInfos.value); arguments: state.keyInfos.value);
})); }));
@ -1011,6 +986,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_electronicKey.png', 'images/main/icon_main_electronicKey.png',
TranslationLoader.lanKeys!.electronicKey!.tr, TranslationLoader.lanKeys!.electronicKey!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.electronicKeyListPage); Get.toNamed(Routers.electronicKeyListPage);
})); }));
@ -1019,6 +997,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_password.png', 'images/main/icon_main_password.png',
TranslationLoader.lanKeys!.password!.tr, TranslationLoader.lanKeys!.password!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.passwordKeyListPage, Get.toNamed(Routers.passwordKeyListPage,
arguments: <String, LockListInfoItemEntity>{ arguments: <String, LockListInfoItemEntity>{
'keyInfo': state.keyInfos.value 'keyInfo': state.keyInfos.value
@ -1031,6 +1012,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_icCard.png', 'images/main/icon_main_icCard.png',
TranslationLoader.lanKeys!.card!.tr, TranslationLoader.lanKeys!.card!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.cardListPage, arguments: <String, int?>{ Get.toNamed(Routers.cardListPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1043,6 +1027,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_fingerprint.png', 'images/main/icon_main_fingerprint.png',
TranslationLoader.lanKeys!.fingerprint!.tr, TranslationLoader.lanKeys!.fingerprint!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.fingerprintListPage, arguments: <String, int?>{ Get.toNamed(Routers.fingerprintListPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1055,6 +1042,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_remoteControl.png', 'images/main/icon_main_remoteControl.png',
TranslationLoader.lanKeys!.remoteControl!.tr, TranslationLoader.lanKeys!.remoteControl!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.remoteControlListPage); Get.toNamed(Routers.remoteControlListPage);
})); }));
} }
@ -1066,6 +1056,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_face.png', 'images/main/icon_face.png',
TranslationLoader.lanKeys!.humanFace!.tr, TranslationLoader.lanKeys!.humanFace!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.faceListPage, arguments: <String, int?>{ Get.toNamed(Routers.faceListPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1078,6 +1071,9 @@ class _LockDetailPageState extends State<LockDetailPage>
bottomItem( bottomItem(
'images/main/icon_iris.png', '虹膜'.tr, state.bottomBtnisEable.value, 'images/main/icon_iris.png', '虹膜'.tr, state.bottomBtnisEable.value,
() { () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.irisListPage, arguments: <String, int?>{ Get.toNamed(Routers.irisListPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1090,6 +1086,9 @@ class _LockDetailPageState extends State<LockDetailPage>
bottomItem( bottomItem(
'images/main/icon_palm.png', '手掌'.tr, state.bottomBtnisEable.value, 'images/main/icon_palm.png', '手掌'.tr, state.bottomBtnisEable.value,
() { () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.palmListPage, arguments: <String, int?>{ Get.toNamed(Routers.palmListPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1104,6 +1103,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_catEyes.png', 'images/main/icon_catEyes.png',
TranslationLoader.lanKeys!.monitoring!.tr, TranslationLoader.lanKeys!.monitoring!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.realTimePicturePage, arguments: <String, Object?>{ Get.toNamed(Routers.realTimePicturePage, arguments: <String, Object?>{
'lockName': state.keyInfos.value.lockName, 'lockName': state.keyInfos.value.lockName,
'isMonitoring': true 'isMonitoring': true
@ -1118,6 +1120,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_authorizedAdmin.png', 'images/main/icon_main_authorizedAdmin.png',
TranslationLoader.lanKeys!.authorizedAdmin!.tr, TranslationLoader.lanKeys!.authorizedAdmin!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.authorizedAdminListPage, Get.toNamed(Routers.authorizedAdminListPage,
arguments: <String, LockListInfoItemEntity>{ arguments: <String, LockListInfoItemEntity>{
'keyInfo': state.keyInfos.value 'keyInfo': state.keyInfos.value
@ -1132,6 +1137,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_main_operatingRecord.png', 'images/main/icon_main_operatingRecord.png',
TranslationLoader.lanKeys!.operatingRecord!.tr, TranslationLoader.lanKeys!.operatingRecord!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
// Get.toNamed(Routers.lockOperatingRecordPage, // Get.toNamed(Routers.lockOperatingRecordPage,
// arguments: {"keyInfo": state.keyInfos.value}); // arguments: {"keyInfo": state.keyInfos.value});
Get.toNamed(Routers.doorLockLogPage, Get.toNamed(Routers.doorLockLogPage,
@ -1147,6 +1155,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_lockDetail_videoLog.png', 'images/main/icon_lockDetail_videoLog.png',
TranslationLoader.lanKeys!.videoLog!.tr, TranslationLoader.lanKeys!.videoLog!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.videoLogPage, arguments: <String, int?>{ Get.toNamed(Routers.videoLogPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
}); });
@ -1158,6 +1169,9 @@ class _LockDetailPageState extends State<LockDetailPage>
'images/main/icon_lockDetail_messageReminding.png', 'images/main/icon_lockDetail_messageReminding.png',
TranslationLoader.lanKeys!.messageReminding!.tr, TranslationLoader.lanKeys!.messageReminding!.tr,
state.bottomBtnisEable.value, () { state.bottomBtnisEable.value, () {
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.msgNotificationPage, arguments: <String, int?>{ Get.toNamed(Routers.msgNotificationPage, arguments: <String, int?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
'isSupportCatEye': state.keyInfos.value.lockFeature!.isSupportCatEye, 'isSupportCatEye': state.keyInfos.value.lockFeature!.isSupportCatEye,
@ -1170,6 +1184,9 @@ class _LockDetailPageState extends State<LockDetailPage>
bottomItem('images/main/icon_main_set.png', bottomItem('images/main/icon_main_set.png',
TranslationLoader.lanKeys!.set!.tr, true, () { TranslationLoader.lanKeys!.set!.tr, true, () {
// logic.clickItemBtnAction(10); // logic.clickItemBtnAction(10);
if (state.openDoorBtnisUneable.value == false) {
return;
}
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{ Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
'lockId': state.keyInfos.value.lockId, 'lockId': state.keyInfos.value.lockId,
'isOnlyOneData': state.isOnlyOneData, 'isOnlyOneData': state.isOnlyOneData,

View File

@ -143,6 +143,7 @@ class LockListInfoItemEntity {
int? hasGateway; int? hasGateway;
int? appUnlockOnline; int? appUnlockOnline;
String? mac; String? mac;
int? updateDate;
LockListInfoItemEntity({ LockListInfoItemEntity({
this.keyId, this.keyId,
@ -180,6 +181,7 @@ class LockListInfoItemEntity {
this.hasGateway, this.hasGateway,
this.appUnlockOnline, this.appUnlockOnline,
this.mac, this.mac,
this.updateDate,
}); });
LockListInfoItemEntity.fromJson(Map<String, dynamic> json) { LockListInfoItemEntity.fromJson(Map<String, dynamic> json) {
@ -224,6 +226,7 @@ class LockListInfoItemEntity {
hasGateway = json['hasGateway']; hasGateway = json['hasGateway'];
appUnlockOnline = json['appUnlockOnline']; appUnlockOnline = json['appUnlockOnline'];
mac = json['mac']; mac = json['mac'];
updateDate = json['updateDate'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -269,6 +272,7 @@ class LockListInfoItemEntity {
data['hasGateway'] = hasGateway; data['hasGateway'] = hasGateway;
data['appUnlockOnline'] = appUnlockOnline; data['appUnlockOnline'] = appUnlockOnline;
data['mac'] = mac; data['mac'] = mac;
data['updateDate'] = updateDate;
return data; return data;
} }

View File

@ -182,7 +182,7 @@ class _LockListXHJPageState extends State<LockListXHJPage> with RouteAware {
isLast = true; isLast = true;
} }
list.add(Slidable( list.add(Slidable(
key: ValueKey<int?>(keyInfo.keyId), key: ValueKey<String?>('${keyInfo.keyId}_${keyInfo.updateDate}'),
endActionPane: ActionPane( endActionPane: ActionPane(
extentRatio: 0.5, extentRatio: 0.5,
motion: const ScrollMotion(), motion: const ScrollMotion(),

View File

@ -1,10 +1,16 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_logic.dart';
import 'package:star_lock/main/lockMian/lockList/lockList_logic.dart'; import 'package:star_lock/main/lockMian/lockList/lockList_logic.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/showTipView.dart';
import '../../../app_settings/app_settings.dart'; import '../../../app_settings/app_settings.dart';
@ -18,6 +24,8 @@ import 'lockMain_state.dart';
class LockMainLogic extends BaseGetXController { class LockMainLogic extends BaseGetXController {
final LockMainState state = LockMainState(); final LockMainState state = LockMainState();
final List<StreamSubscription<void>> _subscriptions =
<StreamSubscription<void>>[];
Future<LockListInfoEntity> getStarLockInfo( Future<LockListInfoEntity> getStarLockInfo(
{bool isUnShowLoading = false}) async { {bool isUnShowLoading = false}) async {
@ -29,13 +37,14 @@ class LockMainLogic extends BaseGetXController {
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
loadMainDataLogic(entity.data!); loadMainDataLogic(entity.data!);
Storage.saveMainListData(entity.data!);
} }
return entity; return entity;
} }
void loadMainDataLogic(LockListInfoGroupEntity entity) { void loadMainDataLogic(LockListInfoGroupEntity entity) {
if (entity.groupList!.isEmpty) { final bool every = entity.groupList!.every((GroupList list) =>
(list.lockList ?? <LockListInfoItemEntity>[]).isEmpty);
if (entity.groupList!.isEmpty || every) {
state.dataLength.value = 0; state.dataLength.value = 0;
} else if (entity.groupList!.length == 1) { } else if (entity.groupList!.length == 1) {
final GroupList groupList = entity.groupList![0]; final GroupList groupList = entity.groupList![0];
@ -61,12 +70,13 @@ class LockMainLogic extends BaseGetXController {
} }
}); });
} }
Storage.saveMainListData(entity);
} }
/// ///
void getConnectType() async { Future<void> getConnectType() async {
final ConnectivityResult connectResult = final ConnectivityResult connectResult =
await (Connectivity().checkConnectivity()); await Connectivity().checkConnectivity();
if (connectResult == ConnectivityResult.mobile) { if (connectResult == ConnectivityResult.mobile) {
// _netType = "4G"; // _netType = "4G";
state.networkConnectionStatus.value = 1; state.networkConnectionStatus.value = 1;
@ -133,6 +143,109 @@ class LockMainLogic extends BaseGetXController {
} }
} }
//
Future<void> flushedStarLockInfo(int keyId, int lockId) async {
final LockListInfoEntity entity = await ApiRepository.to.getStarLockInfo(
keyId: keyId,
);
if (entity.errorCode!.codeIsSuccessful) {
state.lockListInfoGroupEntity.value.groupList ??= <GroupList>[];
final GroupList list = entity.data!.groupList!.first;
final LockListInfoItemEntity listItem =
entity.data!.groupList!.first.lockList!.first;
final int groupIndex = state.lockListInfoGroupEntity.value.groupList
?.indexWhere(
(GroupList group) => group.groupId == list.groupId) ??
-1;
if (groupIndex != -1) {
//
state.lockListInfoGroupEntity.value.groupList![groupIndex].lockList ??=
<LockListInfoItemEntity>[];
final List<LockListInfoItemEntity> lockList = state
.lockListInfoGroupEntity.value.groupList![groupIndex].lockList!;
list.lockList ??= <LockListInfoItemEntity>[];
final int keyIndex = lockList.indexWhere(
(LockListInfoItemEntity lock) => lock.keyId == keyId) ??
-1;
if (keyIndex != -1) {
//
lockList.removeAt(keyIndex);
lockList.insert(keyIndex, listItem);
if (Get.isRegistered<LockDetailLogic>()) {
final bool isOnlyOneData =
F.sw(xhjCall: () => false, skyCall: () => lockList.length > 1);
Get.find<LockDetailLogic>().loadData(
lockListInfoItemEntity: listItem, isOnlyOneData: isOnlyOneData);
}
} else {
//
lockList.insert(0, listItem);
}
} else {
//
state.lockListInfoGroupEntity.value.groupList!.insert(0, list);
}
state.lockListInfoGroupEntity.refresh();
loadMainDataLogic(state.lockListInfoGroupEntity.value);
}
update();
}
//
Future<void> deleteStarLockInfo(int keyId, int lockId) async {
state.lockListInfoGroupEntity.value.groupList
?.forEach((GroupList groupList) {
groupList.lockList
?.removeWhere((LockListInfoItemEntity lock) => lock.keyId == keyId);
});
state.lockListInfoGroupEntity.refresh();
loadMainDataLogic(state.lockListInfoGroupEntity.value);
if (Get.isRegistered<LockDetailLogic>()) {
final bool isKey =
Get.find<LockDetailLogic>().state.keyInfos.value.keyId == keyId;
if (isKey) {
//
EasyLoading.showToast('该已锁被删除'.tr, duration: 3.seconds);
Get.until((Route<dynamic> route) =>
route.settings.name == Routers.starLockMain);
}
}
update();
}
//
void _initSubscription() {
_subscriptions.add(eventBus
.on<RefreshLockInfoDataEvent>()
.listen((RefreshLockInfoDataEvent event) {
//
flushedStarLockInfo(
event.keyId,
event.lockId,
);
}));
_subscriptions.add(eventBus
.on<DeleteLockInfoDataEvent>()
.listen((DeleteLockInfoDataEvent event) {
//
deleteStarLockInfo(
event.keyId,
event.lockId,
);
}));
_subscriptions.add(eventBus
.on<RogerThatLockInfoDataEvent>()
.listen((RogerThatLockInfoDataEvent event) {
//
flushedStarLockInfo(
event.keyId,
event.lockId,
);
}));
}
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
@ -145,10 +258,14 @@ class LockMainLogic extends BaseGetXController {
void onInit() { void onInit() {
super.onInit(); super.onInit();
checkWhetherPushIsEnabled(); checkWhetherPushIsEnabled();
_initSubscription();
} }
@override @override
void onClose() { void onClose() {
_subscriptions.forEach((StreamSubscription<void> subscription) {
subscription.cancel();
});
super.onClose(); super.onClose();
} }
} }

View File

@ -75,60 +75,62 @@ class _StarLockMainPageState extends State<StarLockMainPage>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget child = EasyRefreshTool( return GetBuilder<LockMainLogic>(builder: (LockMainLogic logic) {
onRefresh: () { Widget child = EasyRefreshTool(
SchedulerBinding.instance.addPostFrameCallback((_) { onRefresh: () {
// SchedulerBinding.instance.addPostFrameCallback((_) {
logic.pageNo = 1; //
getHttpData(); logic.pageNo = 1;
}); getHttpData();
}, });
// child: getDataReturnUI(state.dataLength.value)); },
child: getDataReturnUI(state.dataLength.value)); // child: getDataReturnUI(state.dataLength.value));
if (widget.showAppBar || widget.showDrawer) { child: getDataReturnUI(state.dataLength.value));
child = Scaffold( if (widget.showAppBar || widget.showDrawer) {
backgroundColor: const Color(0xFFF5F5F5), child = Scaffold(
appBar: widget.showAppBar backgroundColor: const Color(0xFFF5F5F5),
? TitleAppBar( appBar: widget.showAppBar
barTitle: F.navTitle, ? TitleAppBar(
haveBack: false, barTitle: F.navTitle,
haveOtherLeftWidget: true, haveBack: false,
leftWidget: Builder( haveOtherLeftWidget: true,
builder: (BuildContext context) => IconButton( leftWidget: Builder(
icon: Image.asset( builder: (BuildContext context) => IconButton(
'images/main/mainLeft_menu_icon.png', icon: Image.asset(
color: Colors.white, 'images/main/mainLeft_menu_icon.png',
width: 44.w, color: Colors.white,
height: 44.w, width: 44.w,
), height: 44.w,
onPressed: () { ),
Scaffold.of(context).openDrawer(); onPressed: () {
}, Scaffold.of(context).openDrawer();
)), },
backgroundColor: AppColors.mainColor, )),
) backgroundColor: AppColors.mainColor,
: null, )
drawer: widget.showDrawer : null,
? Drawer( drawer: widget.showDrawer
width: 1.sw / 3 * 2, ? Drawer(
child: const StarLockMinePage(), width: 1.sw / 3 * 2,
) child: const StarLockMinePage(),
: null, )
body: child, : null,
); body: child,
} );
child = F.sw( }
skyCall: () => child, child = F.sw(
xhjCall: () => Container( skyCall: () => child,
decoration: const BoxDecoration( xhjCall: () => Container(
image: DecorationImage( decoration: const BoxDecoration(
image: AssetImage('images/xhj_main_bg.jpg'), image: DecorationImage(
fit: BoxFit.cover, image: AssetImage('images/xhj_main_bg.jpg'),
fit: BoxFit.cover,
),
), ),
), child: child,
child: child, ));
)); return child;
return child; });
} }
Widget getDataReturnUI(int type) { Widget getDataReturnUI(int type) {
@ -232,10 +234,6 @@ class _StarLockMainPageState extends State<StarLockMainPage>
); );
} }
void onShow() {}
void onHide() {}
late StreamSubscription _teamEvent; late StreamSubscription _teamEvent;
void _initLoadDataAction() { void _initLoadDataAction() {

View File

@ -8,7 +8,7 @@ import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart';
import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart'; import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/versionUndate/versionUndate_entity.dart'; import 'package:star_lock/versionUndate/versionUndate_entity.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';

View File

@ -1,11 +0,0 @@
import 'package:get/get.dart';
import 'navLogic.dart';
class NavBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => NavLogic());
}
}

View File

@ -1,6 +0,0 @@
import '../tools/baseGetXController.dart';
class NavLogic extends BaseGetXController {
}

View File

@ -1,82 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:star_lock/mine/mine/starLockMine_page.dart';
import '../app_settings/app_colors.dart';
import '../main/lockMian/lockMain/lockMain_page.dart';
class NavPages extends StatefulWidget {
const NavPages({Key? key}) : super(key: key);
@override
State<NavPages> createState() => _NavPagesState();
}
class _NavPagesState extends State<NavPages> {
int _currentIndex = 0;
final List<Widget> _listPage = [
StarLockMainPage(),
// StarLockMinePage(key: starLockMineKey),
];
@override
Widget build(BuildContext context) {
var sp;
return Scaffold(
body: IndexedStack(
///
// index: _currentIndex,
children: _listPage,
),
// bottomNavigationBar: BottomNavigationBar(
// elevation: 0.0,
// selectedFontSize: 24.sp,
// unselectedFontSize: 24.sp,
// type: BottomNavigationBarType.fixed,
// selectedItemColor: AppColors.mainColor,
// backgroundColor: Colors.white,
// currentIndex: _currentIndex, ///
// onTap: (index) {
// //bottomNavigationBar的点击事件
// if (_currentIndex == index) {
// return;
// }
// setState(() {
// _currentIndex = index; //
// });
// if (_currentIndex == 0) {
// starLockMainKey.currentState?.onShow();
// starLockMineKey.currentState?.onHide();
// } else if (_currentIndex == 1) {
// starLockMainKey.currentState?.onHide();
// starLockMineKey.currentState?.onShow();
// }
// },
// items: [
// BottomNavigationBarItem(
// icon: SizedBox(
// width: 56.w,
// height: 56.w,
// child: Image.asset(
// _currentIndex == 0
// ? 'images/tabbar/icon_tab_main_select.png'
// : 'images/tabbar/icon_tab_main_unselect.png',
// fit: BoxFit.cover),
// ),
// label: '首页'),
// BottomNavigationBarItem(
// icon: SizedBox(
// width: 56.w,
// height: 56.w,
// child: Image.asset(
// _currentIndex == 1
// ? 'images/tabbar/icon_tab_my_select.png'
// : 'images/tabbar/icon_tab_my_unselect.png',
// fit: BoxFit.cover),
// ),
// label: '我的'),
// ],
// ),
);
}
}

View File

@ -389,12 +389,13 @@ class ApiProvider extends BaseProvider {
// //
Future<Response> getStarLockListInfo(int pageNo, int pageSize, Future<Response> getStarLockListInfo(int pageNo, int pageSize,
{bool isUnShowLoading = true}) => {bool isUnShowLoading = true, int? keyId,}) =>
post( post(
getStarLockInfoURL.toUrl, getStarLockInfoURL.toUrl,
jsonEncode({ jsonEncode(<String, dynamic>{
'pageNo': pageNo, 'pageNo': pageNo,
'pageSize': pageSize, 'pageSize': pageSize,
'keyId': keyId,
}), }),
isUnShowLoading: isUnShowLoading); isUnShowLoading: isUnShowLoading);

View File

@ -457,6 +457,13 @@ class ApiRepository {
return LockListInfoEntity.fromJson(res.body); return LockListInfoEntity.fromJson(res.body);
} }
//
Future<LockListInfoEntity> getStarLockInfo({required int keyId}) async {
final res = await apiProvider.getStarLockListInfo(1, 20,
isUnShowLoading: true, keyId: keyId);
return LockListInfoEntity.fromJson(res.body);
}
// //
Future<LockSetInfoEntity> getLockSettingInfoData( Future<LockSetInfoEntity> getLockSettingInfoData(
{required String lockId}) async { {required String lockId}) async {

View File

@ -19,7 +19,7 @@ import 'package:star_lock/tools/storage.dart';
import '../versionUndate/versionUndateTool.dart'; import '../versionUndate/versionUndateTool.dart';
import 'bugly/bugly_tool.dart'; import 'bugly/bugly_tool.dart';
import 'xs_jPhush.dart'; import 'push/xs_jPhush.dart';
class AppFirstEnterHandle { class AppFirstEnterHandle {
Future<void> getAppFirstEnter(String flagStr) async { Future<void> getAppFirstEnter(String flagStr) async {

View File

@ -1,4 +1,3 @@
// CommonDataManage的单例使 // CommonDataManage的单例使
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -6,9 +5,10 @@ import '../main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart';
import '../main/lockMian/entity/lockListInfo_entity.dart'; import '../main/lockMian/entity/lockListInfo_entity.dart';
class CommonDataManage { class CommonDataManage {
factory CommonDataManage() => shareManager()!; factory CommonDataManage() => shareManager()!;
CommonDataManage._init(); CommonDataManage._init();
static CommonDataManage? _manager; static CommonDataManage? _manager;
static CommonDataManage? shareManager() { static CommonDataManage? shareManager() {
@ -16,27 +16,29 @@ class CommonDataManage {
// _manager!._initBlue(); // _manager!._initBlue();
return _manager; return _manager;
} }
CommonDataManage? get manager => shareManager(); CommonDataManage? get manager => shareManager();
// //
final RxInt _mainLockCount = 0.obs; final RxInt _mainLockCount = 0.obs;
set setMainLockCount(int v) => _mainLockCount.value = v; set setMainLockCount(int v) => _mainLockCount.value = v;
get getMainLockCount => _mainLockCount;
RxInt get getMainLockCount => _mainLockCount;
// //
LockListInfoItemEntity currentKeyInfo = LockListInfoItemEntity(); LockListInfoItemEntity currentKeyInfo = LockListInfoItemEntity();
// //
int currentLockUserNo = 0; int currentLockUserNo = 0;
// set setCurrentLockUserNo(int v) => _currentLockUserNo = v; // set setCurrentLockUserNo(int v) => _currentLockUserNo = v;
// get getCurrentLockUserNo => _currentLockUserNo; // get getCurrentLockUserNo => _currentLockUserNo;
LockSetInfoData currentLockSetInfoData = LockSetInfoData(); LockSetInfoData currentLockSetInfoData = LockSetInfoData();
int dayLatestTime = (86400-1)*1000; int dayLatestTime = (86400 - 1) * 1000;
// 0-1-2-NFC无源锁3-4-5-6-7- 8- // 0-1-2-NFC无源锁3-4-5-6-7- 8-
int seletLockType = 0; int seletLockType = 0;
} }

View File

@ -7,20 +7,20 @@ EventBus eventBus = EventBus();
/// ///
class RefreshLockListInfoDataEvent { class RefreshLockListInfoDataEvent {
RefreshLockListInfoDataEvent(
{this.clearScanDevices = false, this.isUnShowLoading = false});
// //
bool clearScanDevices; bool clearScanDevices;
bool isUnShowLoading; bool isUnShowLoading;
RefreshLockListInfoDataEvent(
{this.clearScanDevices = false, this.isUnShowLoading = false});
} }
/// ///
class LockAddUserSucceedEvent { class LockAddUserSucceedEvent {
LockAddUserSucceedEvent(this.dataList, this.type);
int type; // 0 1token失效 int type; // 0 1token失效
List<int> dataList; List<int> dataList;
LockAddUserSucceedEvent(this.dataList, this.type);
} }
/// ///
@ -45,9 +45,9 @@ class RefreshCheckInListEvent {
/// ///
class PassCurrentLockInformationEvent { class PassCurrentLockInformationEvent {
LockSetInfoData lockSetInfoData;
PassCurrentLockInformationEvent(this.lockSetInfoData); PassCurrentLockInformationEvent(this.lockSetInfoData);
LockSetInfoData lockSetInfoData;
} }
/// ///
@ -57,16 +57,16 @@ class OtherTypeRefreshListEvent {
/// number /// number
class ChickInAddStaffCardAndFingerprintBlockNumberEvent { class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
String number;
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number); ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
String number;
} }
/// ///
class ChangeLanguageBlockLastLanguageEvent { class ChangeLanguageBlockLastLanguageEvent {
String languageTitle;
ChangeLanguageBlockLastLanguageEvent(this.languageTitle); ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
String languageTitle;
} }
/// ///
@ -76,45 +76,45 @@ class LockGroupEditGroupLockRefreshEvent {
/// ///
class LockSetChangeSetRefreshLockDetailWithType { class LockSetChangeSetRefreshLockDetailWithType {
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
int type; // 0 1 2 3 4 5 int type; // 0 1 2 3 4 5
dynamic setResult; dynamic setResult;
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
} }
/// ///
class GetTVDataRefreshUI { class GetTVDataRefreshUI {
List<int> tvList;
GetTVDataRefreshUI(this.tvList); GetTVDataRefreshUI(this.tvList);
List<int> tvList;
} }
/// UDP接收状态然后刷新界面 /// UDP接收状态然后刷新界面
class GetUDPStatusRefreshUI { class GetUDPStatusRefreshUI {
int udpStatus;
GetUDPStatusRefreshUI(this.udpStatus); GetUDPStatusRefreshUI(this.udpStatus);
int udpStatus;
} }
/// UDP接收状态然后刷新监控界面 /// UDP接收状态然后刷新监控界面
class GetUDPStatusMonitorUI { class GetUDPStatusMonitorUI {
int udpStatus;
GetUDPStatusMonitorUI(this.udpStatus); GetUDPStatusMonitorUI(this.udpStatus);
int udpStatus;
} }
/// ///
class GetFirstFrameGoPush { class GetFirstFrameGoPush {
bool isFirstFrame;
GetFirstFrameGoPush(this.isFirstFrame); GetFirstFrameGoPush(this.isFirstFrame);
bool isFirstFrame;
} }
/// typeIndex /// typeIndex
class GetPasswordTypeUpdateIndex { class GetPasswordTypeUpdateIndex {
int passwordType;
GetPasswordTypeUpdateIndex(this.passwordType); GetPasswordTypeUpdateIndex(this.passwordType);
int passwordType;
} }
/// ///
@ -144,9 +144,9 @@ class MineAuthorizedAdminPageRefreshUI {
/// ///
class DoorLockLogListRefreshUI { class DoorLockLogListRefreshUI {
DateTime getDoorLockLogTime;
DoorLockLogListRefreshUI(this.getDoorLockLogTime); DoorLockLogListRefreshUI(this.getDoorLockLogTime);
DateTime getDoorLockLogTime;
} }
/// ///
@ -163,3 +163,27 @@ class AuthorizedAdministratorListPageRefreshUI {
class MineInfoChangeRefreshUI { class MineInfoChangeRefreshUI {
MineInfoChangeRefreshUI(); MineInfoChangeRefreshUI();
} }
///
class RefreshLockInfoDataEvent {
RefreshLockInfoDataEvent({required this.keyId, required this.lockId});
int keyId;
int lockId;
}
///
class DeleteLockInfoDataEvent {
DeleteLockInfoDataEvent({required this.keyId, required this.lockId});
int keyId;
int lockId;
}
///
class RogerThatLockInfoDataEvent {
RogerThatLockInfoDataEvent({required this.keyId, required this.lockId});
int keyId;
int lockId;
}

View File

@ -0,0 +1,10 @@
class MessageConstant {
//
static const int keyStateChange = 10;
//
static const int keyDelete = 20;
//
static const int lockReceive = 30;
//+
static const int keyReceive = 40;
}

View File

@ -0,0 +1,67 @@
import 'dart:convert';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/push/message_constant.dart';
class MessageManagement {
//
static Future<void> shunting(Map<String, dynamic> message) async {
if (message.isEmpty) {
return;
}
Map<String, dynamic> extra = {};
if (GetPlatform.isAndroid) {
extra = _androidAnalysis(message);
AppLog.log('MessageManagement.shunting GetPlatform.isAndroid: $extra');
} else if (GetPlatform.isIOS) {
extra = _androidAnalysis(message);
AppLog.log('MessageManagement.shunting GetPlatform.isIos: $extra');
} else {
return;
}
if (extra.isEmpty) {
return;
}
_shuntingBus(extra);
}
//
static Map<String, dynamic> _androidAnalysis(Map<String, dynamic> data) {
// {alert: , extras: {cn.jpush.android.TYPE_PLATFORM: 0, cn.jpush.android.CONTENT_TYPE: , cn.jpush.android.MSG_ID: 18101501949885538, cn.jpush.android.EXTRA: {"eventNo":10,"keyId":530,"lockId":7}}, message: }
final Map<Object?, dynamic> extras = data['extras'];
final Map<String, dynamic> extra =
json.decode(extras['cn.jpush.android.EXTRA'] ?? '{}');
return extra;
}
//
static void _shuntingBus(Map<String, dynamic> data) {
final int eventNo = data['eventNo'] ?? -1;
switch (eventNo) {
case MessageConstant.keyStateChange:
final int keyId = data['keyId'];
final int lockId = data['lockId'];
eventBus.fire(RefreshLockInfoDataEvent(keyId: keyId, lockId: lockId));
break;
case MessageConstant.keyDelete:
final int keyId = data['keyId'];
final int lockId = data['lockId'];
eventBus.fire(DeleteLockInfoDataEvent(keyId: keyId, lockId: lockId));
break;
case MessageConstant.lockReceive:
final int keyId = data['keyId'];
final int lockId = data['lockId'];
eventBus.fire(RogerThatLockInfoDataEvent(keyId: keyId, lockId: lockId));
break;
case MessageConstant.keyReceive:
final int keyId = data['keyId'];
final int lockId = data['lockId'];
eventBus.fire(RogerThatLockInfoDataEvent(keyId: keyId, lockId: lockId));
break;
default:
throw Exception('无法识别eventNo 参数:$eventNo');
}
}
}

View File

@ -7,9 +7,10 @@ import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/push/message_management.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../app_settings/app_settings.dart'; import '../../app_settings/app_settings.dart';
class XSJPushProvider { class XSJPushProvider {
final JPush jpush = JPush(); final JPush jpush = JPush();
@ -54,6 +55,7 @@ class XSJPushProvider {
}, onReceiveMessage: (Map<String, dynamic> message) async { }, onReceiveMessage: (Map<String, dynamic> message) async {
AppLog.log('onReceiveMessage: $message'); AppLog.log('onReceiveMessage: $message');
// //
MessageManagement.shunting(message);
}, onReceiveNotificationAuthorization: }, onReceiveNotificationAuthorization:
(Map<String, dynamic> message) async { (Map<String, dynamic> message) async {
AppLog.log('onReceiveNotificationAuthorization: $message'); AppLog.log('onReceiveNotificationAuthorization: $message');