feat:接入自定义消息,完成锁列表状态改变和新增和删除
This commit is contained in:
parent
74393a3d64
commit
0c85af9d0f
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -917,5 +917,6 @@
|
|||||||
"请输入时间(秒)": "请输入时间(秒)",
|
"请输入时间(秒)": "请输入时间(秒)",
|
||||||
"加载数据失败": "加载数据失败",
|
"加载数据失败": "加载数据失败",
|
||||||
"重试": "重试",
|
"重试": "重试",
|
||||||
"升级中,是否退出": "升级中,是否退出"
|
"升级中,是否退出": "升级中,是否退出",
|
||||||
|
"该已锁被删除": "该已锁被删除"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -883,5 +883,6 @@
|
|||||||
"请输入时间(秒)": "请输入时间(秒)",
|
"请输入时间(秒)": "请输入时间(秒)",
|
||||||
"加载数据失败": "加载数据失败",
|
"加载数据失败": "加载数据失败",
|
||||||
"重试": "重试",
|
"重试": "重试",
|
||||||
"升级中,是否退出": "升级中,是否退出"
|
"升级中,是否退出": "升级中,是否退出",
|
||||||
|
"该已锁被删除": "该已锁被删除"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
import 'navLogic.dart';
|
|
||||||
|
|
||||||
class NavBinding extends Bindings {
|
|
||||||
@override
|
|
||||||
void dependencies() {
|
|
||||||
Get.lazyPut(() => NavLogic());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
import '../tools/baseGetXController.dart';
|
|
||||||
|
|
||||||
class NavLogic extends BaseGetXController {
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -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: '我的'),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|||||||
10
lib/tools/push/message_constant.dart
Normal file
10
lib/tools/push/message_constant.dart
Normal 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;
|
||||||
|
}
|
||||||
67
lib/tools/push/message_management.dart
Normal file
67
lib/tools/push/message_management.dart
Normal 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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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');
|
||||||
Loading…
x
Reference in New Issue
Block a user