feat:接入自定义消息,完成锁列表状态改变和新增和删除
This commit is contained in:
parent
74393a3d64
commit
0c85af9d0f
@ -885,5 +885,6 @@
|
||||
"请输入时间(秒)": "Please enter the time (seconds)",
|
||||
"加载数据失败": "Failed to load data",
|
||||
"重试": "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/mine/mine/starLockMine_state.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 '../../network/api_repository.dart';
|
||||
@ -48,7 +48,7 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
password: state.pwd.value,
|
||||
countryCode: state.countryCode.value,
|
||||
username: state.emailOrPhone.value,
|
||||
deviceInfo: state.deviceInfoMap.value);
|
||||
deviceInfo: state.deviceInfoMap);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
Storage.saveLoginData(entity.data);
|
||||
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
|
||||
@ -61,12 +61,13 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
Future<void> checkIpAction() async {
|
||||
final CheckIPEntity entity = await ApiRepository.to.checkIpAction(
|
||||
ip: ''
|
||||
);
|
||||
final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
if(state.countryName.value == entity.data!.name){
|
||||
ShowTipView().showSureAlertDialog('国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续'.tr, tipTitle: '确认国家或地区'.tr, sureStr: '我知道了'.tr);
|
||||
if (state.countryName.value == entity.data!.name) {
|
||||
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) {
|
||||
state.deviceInfoMap.value = data;
|
||||
}).catchError((dynamic error) {
|
||||
@ -111,5 +112,4 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
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/tools/eventBusEventManage.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 '../../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/platform_info_services.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 '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/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.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/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() {
|
||||
resetOpenDoorState();
|
||||
@ -184,7 +245,7 @@ class LockDetailLogic extends BaseGetXController {
|
||||
//清除开锁动画以及状态
|
||||
void closeLuckStatus() {
|
||||
state.openLockBtnState.value = 0;
|
||||
state.openDoorBtnisUneable.value = true;
|
||||
// state.openDoorBtnisUneable.value = true;
|
||||
state.animationController!.stop(canceled: true);
|
||||
cancelBlueConnetctToastTimer();
|
||||
}
|
||||
@ -516,7 +577,7 @@ class LockDetailLogic extends BaseGetXController {
|
||||
|
||||
void resetOpenDoorState() {
|
||||
state.openLockBtnState.value = 0;
|
||||
state.openDoorBtnisUneable.value = false;
|
||||
// state.openDoorBtnisUneable.value = false;
|
||||
state.animationController?.reset();
|
||||
state.animationController?.forward();
|
||||
eventBus.fire(RefreshLockDetailInfoDataEvent());
|
||||
|
||||
@ -46,6 +46,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
// with RouteAware
|
||||
final LockDetailLogic logic = Get.put(LockDetailLogic());
|
||||
final LockDetailState state = Get.find<LockDetailLogic>().state;
|
||||
StreamSubscription<void>? _lockRefreshLockDetailInfoDataEvent;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@ -60,6 +61,16 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
_initRefreshLockDetailInfoDataEventAction();
|
||||
logic.initReplySubscription();
|
||||
logic.initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
|
||||
|
||||
logic.loadData(
|
||||
lockListInfoItemEntity: widget.lockListInfoItemEntity,
|
||||
isOnlyOneData: widget.isOnlyOneData);
|
||||
}
|
||||
|
||||
@override
|
||||
void deactivate() {
|
||||
Get.delete<LockDetailLogic>();
|
||||
super.deactivate();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -70,8 +81,6 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
StreamSubscription? _lockRefreshLockDetailInfoDataEvent;
|
||||
|
||||
void _initRefreshLockDetailInfoDataEventAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 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
|
||||
Widget build(BuildContext context) {
|
||||
loadData();
|
||||
return F.sw(skyCall: skWidget, xhjCall: xhjWidget);
|
||||
}
|
||||
|
||||
@ -175,10 +124,16 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
height: 35.h,
|
||||
),
|
||||
labelText('images/icon_slider_horizontal.png', '功能'.tr, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.to(LockDetailListPage(
|
||||
title: '功能'.tr, items: getBottomWidget()));
|
||||
}),
|
||||
labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.to(LockDetailListPage(
|
||||
title: '配件'.tr, items: getAttachmentWidget()));
|
||||
}),
|
||||
@ -365,7 +320,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
Icon(
|
||||
Icons.bluetooth_searching,
|
||||
size: 78.r,
|
||||
color: AppColors.mainColor.withOpacity(0.6),
|
||||
color: AppColors.wifiDisableColor.withOpacity(0.7),
|
||||
)
|
||||
else
|
||||
Image.asset(
|
||||
@ -388,7 +343,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
width: 168.r,
|
||||
height: 168.r,
|
||||
color: state.openDoorBtnisUneable.value == false
|
||||
? AppColors.mainColor.withOpacity(0.6)
|
||||
? AppColors.wifiDisableColor.withOpacity(0.7)
|
||||
: state.isOpenPassageMode.value == 1
|
||||
? Colors.red
|
||||
: AppColors.mainColor,
|
||||
@ -407,8 +362,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
TranslationLoader
|
||||
.lanKeys!.clickUnlockAndHoldDownClose!.tr,
|
||||
logic.getKeyStatusTextAndShow(),
|
||||
style: TextStyle(
|
||||
color: AppColors.darkGrayTextColor,
|
||||
fontSize: 20.sp,
|
||||
@ -677,6 +631,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
state.keyInfos.value.lockSetting!.remoteUnlock == 1,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
ShowCupertinoAlertView().isToRemoteUnLockAlert(
|
||||
remoteUnlockAction: () {
|
||||
if (state.keyInfos.value.hasGateway != 1) {
|
||||
@ -793,6 +750,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
const Spacer(),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.selectLockTypePage);
|
||||
},
|
||||
child: Padding(
|
||||
@ -926,6 +886,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
// 新增配件
|
||||
showWidgetArr.add(bottomItem('images/main/icon_main_addLock.png', '新增配件'.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Navigator.pushNamed(context, Routers.accessoriesListPage);
|
||||
}));
|
||||
|
||||
@ -965,6 +928,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_clockingIn.png',
|
||||
TranslationLoader.lanKeys!.checkingIn!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.checkingInListPage,
|
||||
arguments: state.keyInfos.value);
|
||||
}));
|
||||
@ -974,6 +940,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_operatingRecord.png',
|
||||
TranslationLoader.lanKeys!.operatingRecord!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.doorLockLogPage,
|
||||
arguments: <String, LockListInfoItemEntity>{
|
||||
'keyInfo': state.keyInfos.value
|
||||
@ -983,6 +952,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
// 设置
|
||||
showWidgetArr.add(bottomItem('images/main/icon_main_set.png',
|
||||
TranslationLoader.lanKeys!.set!.tr, true, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
'isOnlyOneData': state.isOnlyOneData
|
||||
@ -1001,6 +973,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_clockingIn.png',
|
||||
TranslationLoader.lanKeys!.checkingIn!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.checkingInListPage,
|
||||
arguments: state.keyInfos.value);
|
||||
}));
|
||||
@ -1011,6 +986,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_electronicKey.png',
|
||||
TranslationLoader.lanKeys!.electronicKey!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.electronicKeyListPage);
|
||||
}));
|
||||
|
||||
@ -1019,6 +997,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_password.png',
|
||||
TranslationLoader.lanKeys!.password!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.passwordKeyListPage,
|
||||
arguments: <String, LockListInfoItemEntity>{
|
||||
'keyInfo': state.keyInfos.value
|
||||
@ -1031,6 +1012,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_icCard.png',
|
||||
TranslationLoader.lanKeys!.card!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.cardListPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1043,6 +1027,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_fingerprint.png',
|
||||
TranslationLoader.lanKeys!.fingerprint!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.fingerprintListPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1055,6 +1042,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_remoteControl.png',
|
||||
TranslationLoader.lanKeys!.remoteControl!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.remoteControlListPage);
|
||||
}));
|
||||
}
|
||||
@ -1066,6 +1056,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_face.png',
|
||||
TranslationLoader.lanKeys!.humanFace!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.faceListPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1078,6 +1071,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
bottomItem(
|
||||
'images/main/icon_iris.png', '虹膜'.tr, state.bottomBtnisEable.value,
|
||||
() {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.irisListPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1090,6 +1086,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
bottomItem(
|
||||
'images/main/icon_palm.png', '手掌'.tr, state.bottomBtnisEable.value,
|
||||
() {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.palmListPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1104,6 +1103,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_catEyes.png',
|
||||
TranslationLoader.lanKeys!.monitoring!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.realTimePicturePage, arguments: <String, Object?>{
|
||||
'lockName': state.keyInfos.value.lockName,
|
||||
'isMonitoring': true
|
||||
@ -1118,6 +1120,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_authorizedAdmin.png',
|
||||
TranslationLoader.lanKeys!.authorizedAdmin!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.authorizedAdminListPage,
|
||||
arguments: <String, LockListInfoItemEntity>{
|
||||
'keyInfo': state.keyInfos.value
|
||||
@ -1132,6 +1137,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_main_operatingRecord.png',
|
||||
TranslationLoader.lanKeys!.operatingRecord!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
// Get.toNamed(Routers.lockOperatingRecordPage,
|
||||
// arguments: {"keyInfo": state.keyInfos.value});
|
||||
Get.toNamed(Routers.doorLockLogPage,
|
||||
@ -1147,6 +1155,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_lockDetail_videoLog.png',
|
||||
TranslationLoader.lanKeys!.videoLog!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.videoLogPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
});
|
||||
@ -1158,6 +1169,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
'images/main/icon_lockDetail_messageReminding.png',
|
||||
TranslationLoader.lanKeys!.messageReminding!.tr,
|
||||
state.bottomBtnisEable.value, () {
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.msgNotificationPage, arguments: <String, int?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
'isSupportCatEye': state.keyInfos.value.lockFeature!.isSupportCatEye,
|
||||
@ -1170,6 +1184,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
bottomItem('images/main/icon_main_set.png',
|
||||
TranslationLoader.lanKeys!.set!.tr, true, () {
|
||||
// logic.clickItemBtnAction(10);
|
||||
if (state.openDoorBtnisUneable.value == false) {
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.lockSetPage, arguments: <String, Object?>{
|
||||
'lockId': state.keyInfos.value.lockId,
|
||||
'isOnlyOneData': state.isOnlyOneData,
|
||||
|
||||
@ -143,6 +143,7 @@ class LockListInfoItemEntity {
|
||||
int? hasGateway;
|
||||
int? appUnlockOnline;
|
||||
String? mac;
|
||||
int? updateDate;
|
||||
|
||||
LockListInfoItemEntity({
|
||||
this.keyId,
|
||||
@ -180,6 +181,7 @@ class LockListInfoItemEntity {
|
||||
this.hasGateway,
|
||||
this.appUnlockOnline,
|
||||
this.mac,
|
||||
this.updateDate,
|
||||
});
|
||||
|
||||
LockListInfoItemEntity.fromJson(Map<String, dynamic> json) {
|
||||
@ -224,6 +226,7 @@ class LockListInfoItemEntity {
|
||||
hasGateway = json['hasGateway'];
|
||||
appUnlockOnline = json['appUnlockOnline'];
|
||||
mac = json['mac'];
|
||||
updateDate = json['updateDate'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
@ -269,6 +272,7 @@ class LockListInfoItemEntity {
|
||||
data['hasGateway'] = hasGateway;
|
||||
data['appUnlockOnline'] = appUnlockOnline;
|
||||
data['mac'] = mac;
|
||||
data['updateDate'] = updateDate;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@ -182,7 +182,7 @@ class _LockListXHJPageState extends State<LockListXHJPage> with RouteAware {
|
||||
isLast = true;
|
||||
}
|
||||
list.add(Slidable(
|
||||
key: ValueKey<int?>(keyInfo.keyId),
|
||||
key: ValueKey<String?>('${keyInfo.keyId}_${keyInfo.updateDate}'),
|
||||
endActionPane: ActionPane(
|
||||
extentRatio: 0.5,
|
||||
motion: const ScrollMotion(),
|
||||
|
||||
@ -1,10 +1,16 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
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:get/get.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/tools/eventBusEventManage.dart';
|
||||
import 'package:star_lock/tools/showTipView.dart';
|
||||
|
||||
import '../../../app_settings/app_settings.dart';
|
||||
@ -18,6 +24,8 @@ import 'lockMain_state.dart';
|
||||
|
||||
class LockMainLogic extends BaseGetXController {
|
||||
final LockMainState state = LockMainState();
|
||||
final List<StreamSubscription<void>> _subscriptions =
|
||||
<StreamSubscription<void>>[];
|
||||
|
||||
Future<LockListInfoEntity> getStarLockInfo(
|
||||
{bool isUnShowLoading = false}) async {
|
||||
@ -29,13 +37,14 @@ class LockMainLogic extends BaseGetXController {
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
loadMainDataLogic(entity.data!);
|
||||
Storage.saveMainListData(entity.data!);
|
||||
}
|
||||
return 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;
|
||||
} else if (entity.groupList!.length == 1) {
|
||||
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 =
|
||||
await (Connectivity().checkConnectivity());
|
||||
await Connectivity().checkConnectivity();
|
||||
if (connectResult == ConnectivityResult.mobile) {
|
||||
// _netType = "4G";
|
||||
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
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
@ -145,10 +258,14 @@ class LockMainLogic extends BaseGetXController {
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
checkWhetherPushIsEnabled();
|
||||
_initSubscription();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_subscriptions.forEach((StreamSubscription<void> subscription) {
|
||||
subscription.cancel();
|
||||
});
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,60 +75,62 @@ class _StarLockMainPageState extends State<StarLockMainPage>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget child = EasyRefreshTool(
|
||||
onRefresh: () {
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
// 更新状态的代码
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
});
|
||||
},
|
||||
// child: getDataReturnUI(state.dataLength.value));
|
||||
child: getDataReturnUI(state.dataLength.value));
|
||||
if (widget.showAppBar || widget.showDrawer) {
|
||||
child = Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: F.navTitle,
|
||||
haveBack: false,
|
||||
haveOtherLeftWidget: true,
|
||||
leftWidget: Builder(
|
||||
builder: (BuildContext context) => IconButton(
|
||||
icon: Image.asset(
|
||||
'images/main/mainLeft_menu_icon.png',
|
||||
color: Colors.white,
|
||||
width: 44.w,
|
||||
height: 44.w,
|
||||
),
|
||||
onPressed: () {
|
||||
Scaffold.of(context).openDrawer();
|
||||
},
|
||||
)),
|
||||
backgroundColor: AppColors.mainColor,
|
||||
)
|
||||
: null,
|
||||
drawer: widget.showDrawer
|
||||
? Drawer(
|
||||
width: 1.sw / 3 * 2,
|
||||
child: const StarLockMinePage(),
|
||||
)
|
||||
: null,
|
||||
body: child,
|
||||
);
|
||||
}
|
||||
child = F.sw(
|
||||
skyCall: () => child,
|
||||
xhjCall: () => Container(
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('images/xhj_main_bg.jpg'),
|
||||
fit: BoxFit.cover,
|
||||
return GetBuilder<LockMainLogic>(builder: (LockMainLogic logic) {
|
||||
Widget child = EasyRefreshTool(
|
||||
onRefresh: () {
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
// 更新状态的代码
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
});
|
||||
},
|
||||
// child: getDataReturnUI(state.dataLength.value));
|
||||
child: getDataReturnUI(state.dataLength.value));
|
||||
if (widget.showAppBar || widget.showDrawer) {
|
||||
child = Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: F.navTitle,
|
||||
haveBack: false,
|
||||
haveOtherLeftWidget: true,
|
||||
leftWidget: Builder(
|
||||
builder: (BuildContext context) => IconButton(
|
||||
icon: Image.asset(
|
||||
'images/main/mainLeft_menu_icon.png',
|
||||
color: Colors.white,
|
||||
width: 44.w,
|
||||
height: 44.w,
|
||||
),
|
||||
onPressed: () {
|
||||
Scaffold.of(context).openDrawer();
|
||||
},
|
||||
)),
|
||||
backgroundColor: AppColors.mainColor,
|
||||
)
|
||||
: null,
|
||||
drawer: widget.showDrawer
|
||||
? Drawer(
|
||||
width: 1.sw / 3 * 2,
|
||||
child: const StarLockMinePage(),
|
||||
)
|
||||
: null,
|
||||
body: child,
|
||||
);
|
||||
}
|
||||
child = F.sw(
|
||||
skyCall: () => child,
|
||||
xhjCall: () => Container(
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('images/xhj_main_bg.jpg'),
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: child,
|
||||
));
|
||||
return child;
|
||||
child: child,
|
||||
));
|
||||
return child;
|
||||
});
|
||||
}
|
||||
|
||||
Widget getDataReturnUI(int type) {
|
||||
@ -232,10 +234,6 @@ class _StarLockMainPageState extends State<StarLockMainPage>
|
||||
);
|
||||
}
|
||||
|
||||
void onShow() {}
|
||||
|
||||
void onHide() {}
|
||||
|
||||
late StreamSubscription _teamEvent;
|
||||
|
||||
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/tools/showCupertinoAlertView.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 '../../../../network/api_repository.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,
|
||||
{bool isUnShowLoading = true}) =>
|
||||
{bool isUnShowLoading = true, int? keyId,}) =>
|
||||
post(
|
||||
getStarLockInfoURL.toUrl,
|
||||
jsonEncode({
|
||||
jsonEncode(<String, dynamic>{
|
||||
'pageNo': pageNo,
|
||||
'pageSize': pageSize,
|
||||
'keyId': keyId,
|
||||
}),
|
||||
isUnShowLoading: isUnShowLoading);
|
||||
|
||||
|
||||
@ -457,6 +457,13 @@ class ApiRepository {
|
||||
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(
|
||||
{required String lockId}) async {
|
||||
|
||||
@ -19,7 +19,7 @@ import 'package:star_lock/tools/storage.dart';
|
||||
|
||||
import '../versionUndate/versionUndateTool.dart';
|
||||
import 'bugly/bugly_tool.dart';
|
||||
import 'xs_jPhush.dart';
|
||||
import 'push/xs_jPhush.dart';
|
||||
|
||||
class AppFirstEnterHandle {
|
||||
Future<void> getAppFirstEnter(String flagStr) async {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
// 实现一个CommonDataManage的单例,用来管理项目中使用的一些公共数据
|
||||
import 'package:get/get.dart';
|
||||
|
||||
@ -6,9 +5,10 @@ import '../main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart';
|
||||
import '../main/lockMian/entity/lockListInfo_entity.dart';
|
||||
|
||||
class CommonDataManage {
|
||||
|
||||
factory CommonDataManage() => shareManager()!;
|
||||
|
||||
CommonDataManage._init();
|
||||
|
||||
static CommonDataManage? _manager;
|
||||
|
||||
static CommonDataManage? shareManager() {
|
||||
@ -16,27 +16,29 @@ class CommonDataManage {
|
||||
// _manager!._initBlue();
|
||||
return _manager;
|
||||
}
|
||||
|
||||
CommonDataManage? get manager => shareManager();
|
||||
|
||||
// 首页列表锁长度
|
||||
final RxInt _mainLockCount = 0.obs;
|
||||
|
||||
set setMainLockCount(int v) => _mainLockCount.value = v;
|
||||
get getMainLockCount => _mainLockCount;
|
||||
|
||||
RxInt get getMainLockCount => _mainLockCount;
|
||||
|
||||
// 锁信息
|
||||
LockListInfoItemEntity currentKeyInfo = LockListInfoItemEntity();
|
||||
|
||||
// 当前锁的用户编号
|
||||
int currentLockUserNo = 0;
|
||||
|
||||
// set setCurrentLockUserNo(int v) => _currentLockUserNo = v;
|
||||
// get getCurrentLockUserNo => _currentLockUserNo;
|
||||
|
||||
LockSetInfoData currentLockSetInfoData = LockSetInfoData();
|
||||
|
||||
int dayLatestTime = (86400-1)*1000;
|
||||
int dayLatestTime = (86400 - 1) * 1000;
|
||||
|
||||
// 选择的锁类型 0-所有锁;1-门锁;2-NFC无源锁;3-挂锁;4-保险箱锁;5-车位锁;6-智能门禁;7-网关 8-智能门锁
|
||||
int seletLockType = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -7,20 +7,20 @@ EventBus eventBus = EventBus();
|
||||
|
||||
/// 刷新锁列表数据
|
||||
class RefreshLockListInfoDataEvent {
|
||||
RefreshLockListInfoDataEvent(
|
||||
{this.clearScanDevices = false, this.isUnShowLoading = false});
|
||||
|
||||
//是否清除蓝牙设备列表缓存
|
||||
bool clearScanDevices;
|
||||
bool isUnShowLoading;
|
||||
|
||||
RefreshLockListInfoDataEvent(
|
||||
{this.clearScanDevices = false, this.isUnShowLoading = false});
|
||||
}
|
||||
|
||||
/// 蓝牙添加用户成功
|
||||
class LockAddUserSucceedEvent {
|
||||
LockAddUserSucceedEvent(this.dataList, this.type);
|
||||
|
||||
int type; // 0用户号更新成功 1token失效
|
||||
List<int> dataList;
|
||||
|
||||
LockAddUserSucceedEvent(this.dataList, this.type);
|
||||
}
|
||||
|
||||
/// 刷新锁详情数据
|
||||
@ -45,9 +45,9 @@ class RefreshCheckInListEvent {
|
||||
|
||||
/// 传递当前锁信息
|
||||
class PassCurrentLockInformationEvent {
|
||||
LockSetInfoData lockSetInfoData;
|
||||
|
||||
PassCurrentLockInformationEvent(this.lockSetInfoData);
|
||||
|
||||
LockSetInfoData lockSetInfoData;
|
||||
}
|
||||
|
||||
/// 卡、密码、指纹修改之后刷新列表
|
||||
@ -57,16 +57,16 @@ class OtherTypeRefreshListEvent {
|
||||
|
||||
/// 考情添加员工卡、指纹之后回调卡、指纹number
|
||||
class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
|
||||
String number;
|
||||
|
||||
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
|
||||
|
||||
String number;
|
||||
}
|
||||
|
||||
/// 多语言 切换之后传值到上一级界面
|
||||
class ChangeLanguageBlockLastLanguageEvent {
|
||||
String languageTitle;
|
||||
|
||||
ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
|
||||
|
||||
String languageTitle;
|
||||
}
|
||||
|
||||
/// 锁分组添加或者删除锁之后刷新首页数据
|
||||
@ -76,45 +76,45 @@ class LockGroupEditGroupLockRefreshEvent {
|
||||
|
||||
/// 锁设置里面开启关闭刷新锁详情
|
||||
class LockSetChangeSetRefreshLockDetailWithType {
|
||||
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
|
||||
|
||||
int type; // 0 考勤 1开锁时是否需联网 2常开模式 3修改了锁名字 4修改了电量 5远程开锁
|
||||
dynamic setResult;
|
||||
|
||||
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
|
||||
}
|
||||
|
||||
/// 获取到视频流数据然后刷新界面
|
||||
class GetTVDataRefreshUI {
|
||||
List<int> tvList;
|
||||
|
||||
GetTVDataRefreshUI(this.tvList);
|
||||
|
||||
List<int> tvList;
|
||||
}
|
||||
|
||||
/// 获取到UDP接收状态然后刷新界面
|
||||
class GetUDPStatusRefreshUI {
|
||||
int udpStatus;
|
||||
|
||||
GetUDPStatusRefreshUI(this.udpStatus);
|
||||
|
||||
int udpStatus;
|
||||
}
|
||||
|
||||
/// 获取到UDP接收状态然后刷新监控界面
|
||||
class GetUDPStatusMonitorUI {
|
||||
int udpStatus;
|
||||
|
||||
GetUDPStatusMonitorUI(this.udpStatus);
|
||||
|
||||
int udpStatus;
|
||||
}
|
||||
|
||||
/// 获取到第一帧图片数据后跳转
|
||||
class GetFirstFrameGoPush {
|
||||
bool isFirstFrame;
|
||||
|
||||
GetFirstFrameGoPush(this.isFirstFrame);
|
||||
|
||||
bool isFirstFrame;
|
||||
}
|
||||
|
||||
/// 获取到实时点击的密码类型更新typeIndex
|
||||
class GetPasswordTypeUpdateIndex {
|
||||
int passwordType;
|
||||
|
||||
GetPasswordTypeUpdateIndex(this.passwordType);
|
||||
|
||||
int passwordType;
|
||||
}
|
||||
|
||||
/// 刷新密码列表
|
||||
@ -144,9 +144,9 @@ class MineAuthorizedAdminPageRefreshUI {
|
||||
|
||||
/// 刷新门锁日志列表
|
||||
class DoorLockLogListRefreshUI {
|
||||
DateTime getDoorLockLogTime;
|
||||
|
||||
DoorLockLogListRefreshUI(this.getDoorLockLogTime);
|
||||
|
||||
DateTime getDoorLockLogTime;
|
||||
}
|
||||
|
||||
/// 刷新更多设置锁用户管理列表
|
||||
@ -163,3 +163,27 @@ class AuthorizedAdministratorListPageRefreshUI {
|
||||
class 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/network/api_repository.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 '../app_settings/app_settings.dart';
|
||||
import '../../app_settings/app_settings.dart';
|
||||
|
||||
class XSJPushProvider {
|
||||
final JPush jpush = JPush();
|
||||
@ -54,6 +55,7 @@ class XSJPushProvider {
|
||||
}, onReceiveMessage: (Map<String, dynamic> message) async {
|
||||
AppLog.log('onReceiveMessage: $message');
|
||||
//这里接收自定义消息
|
||||
MessageManagement.shunting(message);
|
||||
}, onReceiveNotificationAuthorization:
|
||||
(Map<String, dynamic> message) async {
|
||||
AppLog.log('onReceiveNotificationAuthorization: $message');
|
||||
Loading…
x
Reference in New Issue
Block a user