Merge branch 'master' of gitee.com:starlock-cn/app-starlock

This commit is contained in:
Daisy 2024-03-13 13:49:46 +08:00
commit e078a67af5
30 changed files with 1175 additions and 802 deletions

View File

@ -27,6 +27,8 @@ PODS:
- AMapFoundation (1.8.2) - AMapFoundation (1.8.2)
- AMapLocation (2.10.0): - AMapLocation (2.10.0):
- AMapFoundation (>= 1.8.0) - AMapFoundation (>= 1.8.0)
- audio_service (0.0.1):
- Flutter
- audio_session (0.0.1): - audio_session (0.0.1):
- Flutter - Flutter
- audioplayers_darwin (0.0.1): - audioplayers_darwin (0.0.1):
@ -46,10 +48,6 @@ PODS:
- Flutter - Flutter
- flutter_pcm_sound (0.0.1): - flutter_pcm_sound (0.0.1):
- Flutter - Flutter
- flutter_sound (9.2.13):
- Flutter
- flutter_sound_core (= 9.2.13)
- flutter_sound_core (9.2.13)
- flutter_voice_processor (1.1.1): - flutter_voice_processor (1.1.1):
- Flutter - Flutter
- ios-voice-processor (~> 1.1.0) - ios-voice-processor (~> 1.1.0)
@ -111,6 +109,7 @@ DEPENDENCIES:
- aliyun_push (from `.symlinks/plugins/aliyun_push/ios`) - aliyun_push (from `.symlinks/plugins/aliyun_push/ios`)
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`) - amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`) - amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
- audio_service (from `.symlinks/plugins/audio_service/ios`)
- audio_session (from `.symlinks/plugins/audio_session/ios`) - audio_session (from `.symlinks/plugins/audio_session/ios`)
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`) - auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
@ -120,7 +119,6 @@ DEPENDENCIES:
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`) - flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`) - flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
- flutter_voice_processor (from `.symlinks/plugins/flutter_voice_processor/ios`) - flutter_voice_processor (from `.symlinks/plugins/flutter_voice_processor/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- g711_flutter (from `.symlinks/plugins/g711_flutter/ios`) - g711_flutter (from `.symlinks/plugins/g711_flutter/ios`)
@ -152,7 +150,6 @@ SPEC REPOS:
- AMap3DMap - AMap3DMap
- AMapFoundation - AMapFoundation
- AMapLocation - AMapLocation
- flutter_sound_core
- GoogleMaps - GoogleMaps
- ios-voice-processor - ios-voice-processor
- Protobuf - Protobuf
@ -169,6 +166,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/amap_flutter_location/ios" :path: ".symlinks/plugins/amap_flutter_location/ios"
amap_flutter_map: amap_flutter_map:
:path: ".symlinks/plugins/amap_flutter_map/ios" :path: ".symlinks/plugins/amap_flutter_map/ios"
audio_service:
:path: ".symlinks/plugins/audio_service/ios"
audio_session: audio_session:
:path: ".symlinks/plugins/audio_session/ios" :path: ".symlinks/plugins/audio_session/ios"
audioplayers_darwin: audioplayers_darwin:
@ -187,8 +186,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_native_contact_picker/ios" :path: ".symlinks/plugins/flutter_native_contact_picker/ios"
flutter_pcm_sound: flutter_pcm_sound:
:path: ".symlinks/plugins/flutter_pcm_sound/ios" :path: ".symlinks/plugins/flutter_pcm_sound/ios"
flutter_sound:
:path: ".symlinks/plugins/flutter_sound/ios"
flutter_voice_processor: flutter_voice_processor:
:path: ".symlinks/plugins/flutter_voice_processor/ios" :path: ".symlinks/plugins/flutter_voice_processor/ios"
fluttertoast: fluttertoast:
@ -239,6 +236,7 @@ SPEC CHECKSUMS:
amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033 AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
audio_session: 4f3e461722055d21515cf3261b64c973c062f345 audio_session: 4f3e461722055d21515cf3261b64c973c062f345
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
@ -249,8 +247,6 @@ SPEC CHECKSUMS:
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907 flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82 flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265 fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
g711_flutter: 8f2769052d2cf3549f83d11e1c42d81d94441123 g711_flutter: 8f2769052d2cf3549f83d11e1c42d81d94441123

View File

@ -16,6 +16,8 @@ import 'baseWidget.dart';
import 'tools/appRouteObserver.dart'; import 'tools/appRouteObserver.dart';
import 'dart:io'; import 'dart:io';
import 'versionUndate/versionUndateTool.dart';
class MyApp extends StatefulWidget { class MyApp extends StatefulWidget {
const MyApp({GlobalKey? key}) : super(key: key); const MyApp({GlobalKey? key}) : super(key: key);
@ -99,7 +101,6 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
// openBlueScan();
} }
@override @override
@ -127,10 +128,6 @@ void openBlueScan() {
} }
} }
// void startScanAction() {
// BlueManage().startScan();
// }
/// ///
Future<bool> getMicrophonePermission() async { Future<bool> getMicrophonePermission() async {
// You can request multiple permissions at once. // You can request multiple permissions at once.

View File

@ -106,7 +106,6 @@ class BlueManage {
Get.log("开始扫描 蓝牙未开启,不能进行蓝牙操作"); Get.log("开始扫描 蓝牙未开启,不能进行蓝牙操作");
} }
}); });
} }
/// ///

View File

@ -13,10 +13,6 @@ enum CommandType {
getLockPublicKey, // = 0x3090 getLockPublicKey, // = 0x3090
getLockPrivateKey, // = 0x3091 getLockPrivateKey, // = 0x3091
calibrationTime, // = 0x30f0 calibrationTime, // = 0x30f0
synchronizingLocationInformation, // = 0x30f1
opsUnlocks, // 0x30f2
writeHotelInfo, // = 0x3016
readHotelInfo, // 0x3017
readStarLockStatusInfo, // 0x3040 readStarLockStatusInfo, // 0x3040
} }
@ -85,31 +81,16 @@ extension ExtensionCommandType on CommandType {
type = CommandType.calibrationTime; type = CommandType.calibrationTime;
} }
break; break;
case 0x30f1:
{
type = CommandType.synchronizingLocationInformation;
}
break;
case 0x30f2:
{
type = CommandType.opsUnlocks;
}
break;
case 0x3016:
{
type = CommandType.writeHotelInfo;
}
break;
case 0x3017:
{
type = CommandType.readHotelInfo;
}
break;
case 0x3040: case 0x3040:
{ {
type = CommandType.readStarLockStatusInfo; type = CommandType.readStarLockStatusInfo;
} }
break; break;
default:
{
type = CommandType.readLockStatusInfo;
}
break;
} }
return type; return type;
} }
@ -153,21 +134,12 @@ extension ExtensionCommandType on CommandType {
case CommandType.calibrationTime: case CommandType.calibrationTime:
type = 0x30f0; type = 0x30f0;
break; break;
case CommandType.synchronizingLocationInformation:
type = 0x30f1;
break;
case CommandType.opsUnlocks:
type = 0x30f2;
break;
case CommandType.writeHotelInfo:
type = 0x3016;
break;
case CommandType.readHotelInfo:
type = 0x3017;
break;
case CommandType.readStarLockStatusInfo: case CommandType.readStarLockStatusInfo:
type = 0x3040; type = 0x3040;
break; break;
default:
type = 0x300A;
break;
} }
// AppLog.log('数组组装指令类型:$name commandIndex:${IoManager // AppLog.log('数组组装指令类型:$name commandIndex:${IoManager
// ().commandIndex}'); // ().commandIndex}');
@ -244,7 +216,9 @@ extension ExtensionCommandType on CommandType {
case 0x3040: case 0x3040:
t = '读星锁状态信息'; t = '读星锁状态信息';
break; break;
default:
t = '读星锁状态信息';
break;
} }
return t; return t;
} }

View File

@ -109,9 +109,12 @@ class CommandReciverManager {
print("SM4 oriDataList:$oriDataList"); print("SM4 oriDataList:$oriDataList");
break; break;
} }
parseData(oriDataList).then((value) { parseData(oriDataList).then((value) async {
print("parseData222 data:$value");
EasyLoading.dismiss(); EasyLoading.dismiss();
EventBusManager().eventBusFir(value); await EventBusManager().eventBusFir(value);
}).catchError((error) {
print("Error occurred while parsing data: $error");
}); });
} }
// print('✅ 执行结束 _buffer:${_buffer.length}'); // print('✅ 执行结束 _buffer:${_buffer.length}');
@ -123,7 +126,7 @@ class CommandReciverManager {
CommandType commandType = ExtensionCommandType.getCommandType(cmd); CommandType commandType = ExtensionCommandType.getCommandType(cmd);
await IoManager().increaseCommandIndex(); await IoManager().increaseCommandIndex();
// data.removeRange(0, 2); // data.removeRange(0, 2);
// print("111111data cmd:$cmd commandType:$commandType data:$data"); print("parseData cmd:$cmd commandType:$commandType data:$data");
var reply; var reply;
switch (commandType) { switch (commandType) {
case CommandType.getLockPublicKey: case CommandType.getLockPublicKey:
@ -148,6 +151,7 @@ class CommandReciverManager {
break; break;
case CommandType.openLock: case CommandType.openLock:
{ {
print("openLockReply data:$data");
reply = OpenDoorReply.parseData(commandType, data); reply = OpenDoorReply.parseData(commandType, data);
} }
break; break;
@ -381,6 +385,11 @@ class CommandReciverManager {
} }
} }
break; break;
default:
{
reply = GetStarLockStatuInfoReply.parseData(commandType, data);
}
break;
} }
return reply; return reply;
} }

View File

@ -10,6 +10,8 @@ import 'app_settings/app_settings.dart';
import 'tools/store_service.dart'; import 'tools/store_service.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'versionUndate/versionUndateTool.dart';
// flavorizr.yaml // flavorizr.yaml
FutureOr<void> main() async { FutureOr<void> main() async {
await _setCommonServices(); await _setCommonServices();

View File

@ -1,18 +1,14 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart';
import '../../../app_settings/app_colors.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_addUser.dart'; import '../../../blue/io_protocol/io_addUser.dart';
import '../../../blue/io_protocol/io_getStarLockStatusInfo.dart';
import '../../../blue/io_protocol/io_openLock.dart'; import '../../../blue/io_protocol/io_openLock.dart';
import '../../../blue/io_protocol/io_referEventRecordTime.dart'; import '../../../blue/io_protocol/io_referEventRecordTime.dart';
import '../../../blue/io_reply.dart'; import '../../../blue/io_reply.dart';
@ -46,9 +42,9 @@ class LockDetailLogic extends BaseGetXController {
// } // }
// //
if (reply is GetStarLockStatuInfoReply && state.ifCurrentScreen.value == true) { // if (reply is GetStarLockStatuInfoReply && state.ifCurrentScreen.value == true) {
_replyGetStarLockStatusInfo(reply); // _replyGetStarLockStatusInfo(reply);
} // }
// //
if (reply is SenderReferEventRecordTimeReply && state.ifCurrentScreen.value == true) { if (reply is SenderReferEventRecordTimeReply && state.ifCurrentScreen.value == true) {
@ -65,7 +61,7 @@ class LockDetailLogic extends BaseGetXController {
// //
Future<void> _replyOpenLock(Reply reply) async { Future<void> _replyOpenLock(Reply reply) async {
int status = reply.data[6]; int status = reply.data[6];
print("status:$status"); print("replyOpenLock status:$status");
switch (status) { switch (status) {
case 0x00: case 0x00:
@ -74,7 +70,7 @@ class LockDetailLogic extends BaseGetXController {
// _showFullScreenOverlay(Get.context!); // _showFullScreenOverlay(Get.context!);
state.iSClosedUnlockSuccessfulPopup.value = true; state.iSClosedUnlockSuccessfulPopup.value = true;
if (state.closedUnlockSuccessfulTimer != null) { if (state.closedUnlockSuccessfulTimer != null ) {
state.closedUnlockSuccessfulTimer!.cancel(); state.closedUnlockSuccessfulTimer!.cancel();
state.closedUnlockSuccessfulTimer = null; state.closedUnlockSuccessfulTimer = null;
} }
@ -82,6 +78,7 @@ class LockDetailLogic extends BaseGetXController {
state.closedUnlockSuccessfulTimer = Timer.periodic(3.seconds, (timer) { state.closedUnlockSuccessfulTimer = Timer.periodic(3.seconds, (timer) {
state.iSClosedUnlockSuccessfulPopup.value = false; state.iSClosedUnlockSuccessfulPopup.value = false;
timer.cancel(); timer.cancel();
eventBus.fire(RefreshLockDetailInfoDataEvent());
}); });
// Future.delayed(const Duration(seconds: 3), () { // Future.delayed(const Duration(seconds: 3), () {
// state.iSClosedUnlockSuccessfulPopup.value = false; // state.iSClosedUnlockSuccessfulPopup.value = false;
@ -94,8 +91,8 @@ class LockDetailLogic extends BaseGetXController {
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
getLockRecordLastUploadDataTime(); getLockRecordLastUploadDataTime();
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset();
// state.animationController.forward(); eventBus.fire(RefreshLockDetailInfoDataEvent());
break; break;
case 0x06: case 0x06:
// //
@ -139,6 +136,7 @@ class LockDetailLogic extends BaseGetXController {
// ... // ...
print("${reply.commandType}正在开锁中..."); print("${reply.commandType}正在开锁中...");
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
eventBus.fire(RefreshLockDetailInfoDataEvent());
showToast("正在开锁中...", something: () { showToast("正在开锁中...", something: () {
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
}); });
@ -152,90 +150,90 @@ class LockDetailLogic extends BaseGetXController {
} }
// //
Future<void> _replyGetStarLockStatusInfo(Reply reply) async { // Future<void> _replyGetStarLockStatusInfo(Reply reply) async {
int status = reply.data[2]; // int status = reply.data[2];
switch (status) { // switch (status) {
case 0x00: // case 0x00:
// // //
print("${reply.commandType}数据解析成功"); // print("${reply.commandType}数据解析成功");
dismissEasyLoading(); // dismissEasyLoading();
cancelBlueConnetctToastTimer(); // cancelBlueConnetctToastTimer();
//
// // //
var vendor = reply.data.sublist(3, 23); // var vendor = reply.data.sublist(3, 23);
// print("vendor:$vendor"); // // print("vendor:$vendor");
//
// // //
var product = reply.data[23]; // var product = reply.data[23];
// print("product:$product"); // // print("product:$product");
//
// // //
var model = reply.data.sublist(24, 44); // var model = reply.data.sublist(24, 44);
// print("model:$model"); // // print("model:$model");
//
// // //
var fwVersion = reply.data.sublist(44, 64); // var fwVersion = reply.data.sublist(44, 64);
// print("fwVersion:$fwVersion"); // // print("fwVersion:$fwVersion");
//
// // //
var hwVersion = reply.data.sublist(64, 84); // var hwVersion = reply.data.sublist(64, 84);
// print("hwVersion:$hwVersion"); // // print("hwVersion:$hwVersion");
//
// // //
var serialNum0 = reply.data.sublist(84, 100); // var serialNum0 = reply.data.sublist(84, 100);
// print("serialNum0:$serialNum0"); // // print("serialNum0:$serialNum0");
//
// // //
var serialNum1 = reply.data.sublist(100, 116); // var serialNum1 = reply.data.sublist(100, 116);
// print("serialNum1:$serialNum1"); // // print("serialNum1:$serialNum1");
//
// // //
var btDeviceName = reply.data.sublist(116, 132); // var btDeviceName = reply.data.sublist(116, 132);
// print("btDeviceName:$btDeviceName"); // // print("btDeviceName:$btDeviceName");
//
// // //
var battRemCap = reply.data[132]; // var battRemCap = reply.data[132];
// print("battRemCap:$battRemCap"); // // print("battRemCap:$battRemCap");
uploadElectricQuantityRequest(battRemCap.toString()); // // uploadElectricQuantityRequest(battRemCap.toString());
// // //
var restoreCounter = reply.data.sublist(133, 135); // var restoreCounter = reply.data.sublist(133, 135);
// print("restoreCounter:$restoreCounter"); // // print("restoreCounter:$restoreCounter");
//
// // //
var restoreDate = reply.data.sublist(135, 139); // var restoreDate = reply.data.sublist(135, 139);
// print("restoreDate:$restoreDate"); // // print("restoreDate:$restoreDate");
//
// // //
var icPartNo = reply.data.sublist(139, 149); // var icPartNo = reply.data.sublist(139, 149);
// print("icPartNo:$icPartNo"); // // print("icPartNo:$icPartNo");
//
// // //
var indate = reply.data.sublist(149, 153); // var indate = reply.data.sublist(149, 153);
// print("indate:$indate"); // // print("indate:$indate");
//
break; // break;
case 0x06: // case 0x06:
// // //
print("${reply.commandType}需要鉴权"); // print("${reply.commandType}需要鉴权");
//
break; // break;
case 0x07: // case 0x07:
// // //
print("${reply.commandType}用户无权限"); // print("${reply.commandType}用户无权限");
//
break; // break;
case 0x09: // case 0x09:
// // //
print("${reply.commandType}权限校验错误"); // print("${reply.commandType}权限校验错误");
//
break; // break;
default: // default:
// // //
print("${reply.commandType}失败"); // print("${reply.commandType}失败");
//
break; // break;
} // }
} // }
// //
Future<void> _replyReferEventRecordTime(Reply reply) async { Future<void> _replyReferEventRecordTime(Reply reply) async {
@ -324,6 +322,7 @@ class LockDetailLogic extends BaseGetXController {
} else { } else {
getLockNetToken(); getLockNetToken();
} }
eventBus.fire(RefreshLockDetailInfoDataEvent());
// clickPushBtnAction(); // clickPushBtnAction();
break; break;
case 0x06: case 0x06:
@ -373,8 +372,7 @@ class LockDetailLogic extends BaseGetXController {
Future<void> addUserConnectBlue() async { Future<void> addUserConnectBlue() async {
showBlueConnetctToastTimer(action: () { showBlueConnetctToastTimer(action: () {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset(); eventBus.fire(RefreshLockDetailInfoDataEvent());
// state.animationController.forward();
}); });
BlueManage() BlueManage()
@ -417,8 +415,7 @@ class LockDetailLogic extends BaseGetXController {
} }
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset(); eventBus.fire(RefreshLockDetailInfoDataEvent());
// state.animationController.forward();
} }
}); });
} }
@ -428,9 +425,7 @@ class LockDetailLogic extends BaseGetXController {
showBlueConnetctToastTimer(action: () { showBlueConnetctToastTimer(action: () {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
BlueManage().stopScan(); BlueManage().stopScan();
eventBus.fire(RefreshLockDetailInfoDataEvent());
// state.animationController.reset();
// state.animationController.forward();
}); });
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -441,8 +436,7 @@ class LockDetailLogic extends BaseGetXController {
var token = await Storage.getStringList(saveBlueToken); var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!); List<int> getTokenList = changeStringListToIntList(token!);
print( print("调用了开锁事件 openDoorTokenPubToken:$getTokenList getPrivateKeyList:$getPrivateKeyList");
"openDoorTokenPubToken:$getTokenList getPrivateKeyList:$getPrivateKeyList");
// List<int>listData = await IoSenderManage.senderOpenLock( // List<int>listData = await IoSenderManage.senderOpenLock(
// keyID: BlueManage().connectDeviceName, // keyID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(), // userID: await Storage.getUid(),
@ -476,8 +470,7 @@ class LockDetailLogic extends BaseGetXController {
} }
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset(); eventBus.fire(RefreshLockDetailInfoDataEvent());
// state.animationController.forward();
} }
}); });
} }
@ -542,31 +535,31 @@ class LockDetailLogic extends BaseGetXController {
// } // }
// //
Future<void> getStarLockStatus() async { // Future<void> getStarLockStatus() async {
showEasyLoading(); // showEasyLoading();
showBlueConnetctToastTimer(action: () { // showBlueConnetctToastTimer(action: () {
dismissEasyLoading(); // dismissEasyLoading();
}); // });
BlueManage().bludSendData(BlueManage().connectDeviceName, // BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState deviceConnectionState) async { // (DeviceConnectionState deviceConnectionState) async {
if (deviceConnectionState == DeviceConnectionState.connected) { // if (deviceConnectionState == DeviceConnectionState.connected) {
dismissEasyLoading(); // dismissEasyLoading();
var privateKey = await Storage.getStringList(saveBluePrivateKey); // var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); // List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
IoSenderManage.senderGetStarLockStatuInfo( // IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, // lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), // userID: await Storage.getUid(),
privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
); // );
} else if (deviceConnectionState == DeviceConnectionState.disconnected) { // } else if (deviceConnectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading(); // dismissEasyLoading();
cancelBlueConnetctToastTimer(); // cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) { // if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast(); // showBlueConnetctToast();
} // }
} // }
}); // });
} // }
// () // ()
Future<void> senderReferEventRecordTime(int time) async { Future<void> senderReferEventRecordTime(int time) async {
@ -597,52 +590,6 @@ class LockDetailLogic extends BaseGetXController {
}); });
} }
//
startOpenLock() {
print("11111111");
// checkBlueIsOpen((){
print("33333333");
if (state.openLockBtnState.value == 1) {
return;
}
state.iSOpenLock.value = true;
state.iSClosedUnlockSuccessfulPopup.value = false;
state.openLockBtnState.value = 1;
state.animationController.forward();
if (state.lockUserNo == 0) {
// lockUserNo为0
addUserConnectBlue();
} else {
print("state.isOpenLockNeedOnline.value:${state.isOpenLockNeedOnline.value}");
if (state.isOpenLockNeedOnline.value == 0) {
//
openDoorAction(1);
} else {
//
getLockNetToken();
}
}
// });
}
startUnLock() {
if (state.openLockBtnState.value == 1) {
return;
}
state.iSOpenLock.value = false;
state.iSClosedUnlockSuccessfulPopup.value = false;
state.openLockBtnState.value = 1;
state.animationController.forward();
if (state.lockUserNo == 0) {
// lockUserNo为0
addUserConnectBlue();
} else {
openDoorAction(32);
}
}
// // 0 1 2 3 4 5 6 7 8 9 10 // // 0 1 2 3 4 5 6 7 8 9 10
// clickItemBtnAction(int type){ // clickItemBtnAction(int type){
// state.clickNextType = type; // state.clickNextType = type;
@ -731,16 +678,16 @@ class LockDetailLogic extends BaseGetXController {
} }
// //
Future<void> uploadElectricQuantityRequest(String electricQuantity) async { // Future<void> uploadElectricQuantityRequest(String electricQuantity) async {
KeyOperationRecordEntity entity = await ApiRepository.to // KeyOperationRecordEntity entity = await ApiRepository.to
.uploadElectricQuantity( // .uploadElectricQuantity(
electricQuantity, state.keyInfos.value.lockId.toString()); // electricQuantity, state.keyInfos.value.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) { // if (entity.errorCode!.codeIsSuccessful) {
showToast("电量更新成功", something: () { // showToast("电量更新成功", something: () {
eventBus.fire(RefreshLockListInfoDataEvent()); // eventBus.fire(RefreshLockListInfoDataEvent());
}); // });
} // }
} // }
/// ///
StreamSubscription? StreamSubscription?
@ -771,91 +718,84 @@ class LockDetailLogic extends BaseGetXController {
state.electricQuantity.value = int.parse(event.setResult); state.electricQuantity.value = int.parse(event.setResult);
state.keyInfos.value.electricQuantity = int.parse(event.setResult); state.keyInfos.value.electricQuantity = int.parse(event.setResult);
} }
eventBus.fire(RefreshLockDetailInfoDataEvent());
}); });
} }
late StreamSubscription<List<DiscoveredDevice>> // late StreamSubscription<List<DiscoveredDevice>>
_scanListDiscoveredDeviceSubscription; // _scanListDiscoveredDeviceSubscription;
void _scanListDiscoveredDeviceSubscriptionAction() { // void _scanListDiscoveredDeviceSubscriptionAction() {
_scanListDiscoveredDeviceSubscription = EventBusManager() // _scanListDiscoveredDeviceSubscription = EventBusManager().eventBus!.on<List<DiscoveredDevice>>().listen((List<DiscoveredDevice> list) {
.eventBus! // final knownDeviceIndex = list.indexWhere((d) => d.name == state.keyInfos.value.bluetooth!.bluetoothDeviceName!);
.on<List<DiscoveredDevice>>() // if (knownDeviceIndex >= 0) {
.listen((List<DiscoveredDevice> list) { // //
final knownDeviceIndex = list.indexWhere((d) => // state.currentDeviceUUid.value = (list[knownDeviceIndex].serviceUuids.isNotEmpty ? list[knownDeviceIndex].serviceUuids[0] : "").toString();
d.name == state.keyInfos.value.bluetooth!.bluetoothDeviceName!); // }
if (knownDeviceIndex >= 0) { // });
// // }
state.currentDeviceUUid.value =
(list[knownDeviceIndex].serviceUuids.isNotEmpty
? list[knownDeviceIndex].serviceUuids[0]
: "")
.toString();
}
});
}
// //
void _showFullScreenOverlay(BuildContext context) { // void _showFullScreenOverlay(BuildContext context) {
Future.delayed(const Duration(seconds: 3), () { // Future.delayed(const Duration(seconds: 3), () {
if (state.iSClosedUnlockSuccessfulPopup.value != true) { // if (state.iSClosedUnlockSuccessfulPopup.value != true) {
state.iSClosedUnlockSuccessfulPopup.value = true; // state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back(); // Get.back();
} // }
}); // });
showModalBottomSheet( // showModalBottomSheet(
context: context, // context: context,
isScrollControlled: true, // isScrollControlled: true,
backgroundColor: Colors.transparent, // backgroundColor: Colors.transparent,
builder: (BuildContext context) { // builder: (BuildContext context) {
return GestureDetector( // return GestureDetector(
onTap: () { // onTap: () {
if (state.iSClosedUnlockSuccessfulPopup.value != true) { // if (state.iSClosedUnlockSuccessfulPopup.value != true) {
state.iSClosedUnlockSuccessfulPopup.value = true; // state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back(); // Get.back();
} // }
}, // },
child: Container( // child: Container(
height: MediaQuery.of(context).size.height, // height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width, // width: MediaQuery.of(context).size.width,
color: Colors.black.withOpacity(0.2), // color: Colors.black.withOpacity(0.2),
child: _unlockSuccessWidget(), // child: _unlockSuccessWidget(),
), // ),
); // );
}, // },
); // );
} // }
Widget _unlockSuccessWidget() { // Widget _unlockSuccessWidget() {
return Stack( // return Stack(
alignment: Alignment.center, // alignment: Alignment.center,
children: [ // children: [
Image.asset( // Image.asset(
'images/main/unlocked_bg.png', // 'images/main/unlocked_bg.png',
width: 358.w, // width: 358.w,
height: 348.h, // height: 348.h,
), // ),
Positioned( // Positioned(
top: ScreenUtil().screenHeight / 2, // top: ScreenUtil().screenHeight / 2,
child: Column( // child: Column(
children: [ // children: [
Text( // Text(
state.keyInfos.value.lockAlias!, // state.keyInfos.value.lockAlias!,
style: TextStyle( // style: TextStyle(
color: AppColors.placeholderTextColor, fontSize: 24.sp), // color: AppColors.placeholderTextColor, fontSize: 24.sp),
), // ),
SizedBox( // SizedBox(
height: 10.h, // height: 10.h,
), // ),
Text( // Text(
getCurrentFormattedTime(), // getCurrentFormattedTime(),
style: TextStyle( // style: TextStyle(
color: AppColors.darkGrayTextColor, fontSize: 24.sp), // color: AppColors.darkGrayTextColor, fontSize: 24.sp),
) // )
], // ],
)) // ))
], // ],
); // );
} // }
String getCurrentFormattedTime() { String getCurrentFormattedTime() {
// //
@ -905,10 +845,7 @@ class LockDetailLogic extends BaseGetXController {
_initReplySubscription(); _initReplySubscription();
_initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction(); _initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
_scanListDiscoveredDeviceSubscriptionAction(); // _scanListDiscoveredDeviceSubscriptionAction();
// Future.delayed(const Duration(seconds: 1)).then((value) {
//
// });
} }
@override @override
@ -926,6 +863,7 @@ class LockDetailLogic extends BaseGetXController {
_replySubscription.cancel(); _replySubscription.cancel();
_lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!.cancel(); _lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!.cancel();
_scanListDiscoveredDeviceSubscription.cancel(); // _scanListDiscoveredDeviceSubscription.cancel();
} }
} }

View File

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -11,6 +13,7 @@ import '../../../blue/blue_manage.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';
import '../../../tools/appRouteObserver.dart'; import '../../../tools/appRouteObserver.dart';
import '../../../tools/dateTool.dart'; import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart';
import '../../../tools/jh_pop_menus.dart'; import '../../../tools/jh_pop_menus.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import '../../../translations/trans_lib.dart'; import '../../../translations/trans_lib.dart';
@ -31,8 +34,7 @@ class LockDetailPage extends StatefulWidget {
State<LockDetailPage> createState() => _LockDetailPageState(); State<LockDetailPage> createState() => _LockDetailPageState();
} }
class _LockDetailPageState extends State<LockDetailPage> class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStateMixin, RouteAware {
with TickerProviderStateMixin, RouteAware {
// with RouteAware // with RouteAware
final logic = Get.put(LockDetailLogic()); final logic = Get.put(LockDetailLogic());
final state = Get.find<LockDetailLogic>().state; final state = Get.find<LockDetailLogic>().state;
@ -87,6 +89,16 @@ class _LockDetailPageState extends State<LockDetailPage>
state.pageController.addListener(() { state.pageController.addListener(() {
state.currentPage.value = state.pageController.page!.round(); state.currentPage.value = state.pageController.page!.round();
}); });
_initRefreshLockDetailInfoDataEventAction();
}
StreamSubscription? _lockRefreshLockDetailInfoDataEvent;
void _initRefreshLockDetailInfoDataEventAction() {
// eventBus
_lockRefreshLockDetailInfoDataEvent = eventBus.on<RefreshLockDetailInfoDataEvent>().listen((event) {
setState(() {});
});
} }
@override @override
@ -120,7 +132,7 @@ class _LockDetailPageState extends State<LockDetailPage>
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
Obx(() => buildPageIndicator()), buildPageIndicator(),
Expanded( Expanded(
child: Container( child: Container(
margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 30.h), margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 30.h),
@ -129,8 +141,8 @@ class _LockDetailPageState extends State<LockDetailPage>
controller: state.pageController, controller: state.pageController,
// child: Row( // child: Row(
children: [ children: [
Obx(() => bottomWidget()), bottomWidget(),
Obx(() => attachmentWidget()), attachmentWidget(),
], ],
// ), // ),
), ),
@ -138,12 +150,14 @@ class _LockDetailPageState extends State<LockDetailPage>
], ],
), ),
), ),
Obx(() => Visibility( Visibility(
visible: state.iSClosedUnlockSuccessfulPopup.value, visible: state.iSClosedUnlockSuccessfulPopup.value,
// visible: true, // visible: true,
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
state.iSClosedUnlockSuccessfulPopup.value = false; setState(() {
state.iSClosedUnlockSuccessfulPopup.value = false;
});
}, },
child: Container( child: Container(
width: 1.sw, width: 1.sw,
@ -151,7 +165,7 @@ class _LockDetailPageState extends State<LockDetailPage>
color: Colors.black.withOpacity(0.3), color: Colors.black.withOpacity(0.3),
child: _unlockSuccessWidget()), child: _unlockSuccessWidget()),
), ),
)) )
]), ]),
], ],
); );
@ -166,7 +180,7 @@ class _LockDetailPageState extends State<LockDetailPage>
children: [ children: [
SizedBox( SizedBox(
width: 1.sw - 120.w * 2, width: 1.sw - 120.w * 2,
child: Obx(() => Center( child: Center(
child: Text( child: Text(
state.lockAlias.value, state.lockAlias.value,
style: TextStyle( style: TextStyle(
@ -175,9 +189,9 @@ class _LockDetailPageState extends State<LockDetailPage>
color: state.isOpenPassageMode.value == 1 color: state.isOpenPassageMode.value == 1
? AppColors.openPassageModeColor ? AppColors.openPassageModeColor
: AppColors.darkGrayTextColor), : AppColors.darkGrayTextColor),
)))), ))),
Positioned( Positioned(
child: Obx(() => Column( child: Column(
children: [ children: [
GestureDetector( GestureDetector(
onTap: () { onTap: () {
@ -233,7 +247,7 @@ class _LockDetailPageState extends State<LockDetailPage>
], ],
), ),
], ],
))) ))
], ],
), ),
SizedBox(height: 30.h), SizedBox(height: 30.h),
@ -245,7 +259,7 @@ class _LockDetailPageState extends State<LockDetailPage>
children: [ children: [
Center( Center(
child: GestureDetector( child: GestureDetector(
child: Obx(() => Stack( child: Stack(
children: [ children: [
Image.asset( Image.asset(
// state.connectState.value == 0 ? 'images/main/icon_main_openLockBtn_grey.png' : 'images/main/icon_main_openLockBtn_center.png', // state.connectState.value == 0 ? 'images/main/icon_main_openLockBtn_grey.png' : 'images/main/icon_main_openLockBtn_center.png',
@ -267,14 +281,19 @@ class _LockDetailPageState extends State<LockDetailPage>
height: 330.w, height: 330.w,
)), )),
], ],
)), ),
onTap: () { onTap: () {
// Get.log("点击开锁"); // Get.log("点击开锁");
logic.startOpenLock(); setState(() {
startOpenLock();
});
}, },
onLongPressStart: (details) { onLongPressStart: (details) {
Get.log("长按闭锁"); Get.log("长按闭锁");
logic.startUnLock(); setState(() {
startUnLock();
});
// startUnLock();
}, },
)), )),
], ],
@ -301,7 +320,7 @@ class _LockDetailPageState extends State<LockDetailPage>
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Obx(() => Text( Text(
state.isOpenPassageMode.value == 1 state.isOpenPassageMode.value == 1
? "常开模式启动!长按闭锁" ? "常开模式启动!长按闭锁"
: TranslationLoader : TranslationLoader
@ -310,7 +329,7 @@ class _LockDetailPageState extends State<LockDetailPage>
fontSize: 22.sp, fontSize: 22.sp,
color: AppColors.btnDisableColor, color: AppColors.btnDisableColor,
fontWeight: FontWeight.w500), fontWeight: FontWeight.w500),
)), ),
], ],
), ),
SizedBox( SizedBox(
@ -377,7 +396,7 @@ class _LockDetailPageState extends State<LockDetailPage>
// //
alignment: Alignment.center, alignment: Alignment.center,
// //
turns: state.animationController, turns: state.animationController!,
//view //view
child: Image.asset( child: Image.asset(
state.isOpenPassageMode.value == 1 state.isOpenPassageMode.value == 1
@ -714,18 +733,17 @@ class _LockDetailPageState extends State<LockDetailPage>
listeningAnimations() async { listeningAnimations() async {
await Future.delayed(Duration.zero, () { await Future.delayed(Duration.zero, () {
state.animationController = AnimationController( state.animationController = AnimationController(duration: const Duration(seconds: 1), vsync: this);
duration: const Duration(seconds: 1), vsync: this); state.animationController!.repeat();
state.animationController.repeat();
//StatusListener //StatusListener
state.animationController.addStatusListener((status) { state.animationController!.addStatusListener((status) {
// print("AnimationStatus:$status"); // print("AnimationStatus:$status");
if (status == AnimationStatus.completed) { if (status == AnimationStatus.completed) {
state.animationController.reset(); state.animationController!.reset();
state.animationController.forward(); state.animationController!.forward();
} else if (status == AnimationStatus.dismissed) { } else if (status == AnimationStatus.dismissed) {
state.animationController.reset(); state.animationController!.reset();
state.animationController.forward(); state.animationController!.forward();
} }
}); });
}); });
@ -831,6 +849,51 @@ class _LockDetailPageState extends State<LockDetailPage>
); );
} }
startOpenLock() {
print("11111111");
// checkBlueIsOpen((){
print("33333333");
if (state.openLockBtnState.value == 1) {
return;
}
state.iSOpenLock.value = true;
state.iSClosedUnlockSuccessfulPopup.value = false;
state.openLockBtnState.value = 1;
// state.animationController!.forward();
if (state.lockUserNo == 0) {
// lockUserNo为0
logic.addUserConnectBlue();
} else {
print("state.isOpenLockNeedOnline.value:${state.isOpenLockNeedOnline.value}");
if (state.isOpenLockNeedOnline.value == 0) {
//
logic.openDoorAction(1);
} else {
//
logic.getLockNetToken();
}
}
// });
}
startUnLock() {
if (state.openLockBtnState.value == 1) {
return;
}
state.iSOpenLock.value = false;
state.iSClosedUnlockSuccessfulPopup.value = false;
state.openLockBtnState.value = 1;
state.animationController!.forward();
if (state.lockUserNo == 0) {
// lockUserNo为0
logic.addUserConnectBlue();
} else {
logic.openDoorAction(32);
}
}
@override @override
void didChangeDependencies() { void didChangeDependencies() {
// TODO: implement didChangeDependencies // TODO: implement didChangeDependencies
@ -844,13 +907,13 @@ class _LockDetailPageState extends State<LockDetailPage>
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
/// ///
// print("LockDetailPage===dispose"); print("LockDetailPage===dispose");
AppRouteObserver().routeObserver.unsubscribe(this); AppRouteObserver().routeObserver.unsubscribe(this);
state.closedUnlockSuccessfulTimer?.cancel(); state.closedUnlockSuccessfulTimer?.cancel();
_lockRefreshLockDetailInfoDataEvent?.cancel();
if (state.animationController != null) { if (state.animationController != null) {
state.animationController.reset(); state.animationController!.dispose();
state.animationController.forward(); // state.animationController = null;
state.animationController.dispose();
} }
super.dispose(); super.dispose();
} }
@ -886,20 +949,22 @@ class _LockDetailPageState extends State<LockDetailPage>
void didPopNext() { void didPopNext() {
super.didPopNext(); super.didPopNext();
state.ifCurrentScreen.value = true; state.ifCurrentScreen.value = true;
// print("LockDetailPage===didPopNext"); print("LockDetailPage===didPopNext");
} }
/// ///
@override @override
void didPushNext() { void didPushNext() {
super.didPushNext(); super.didPushNext();
// print("LockDetailPage===didPushNext"); print("LockDetailPage===didPushNext");
state.ifCurrentScreen.value = false; state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
BlueManage().stopScan(); BlueManage().stopScan();
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
state.animationController.reset(); if (state.animationController!.isAnimating) {
state.animationController.forward(); state.animationController!.stop();
}
} }
} }

View File

@ -28,7 +28,7 @@ class LockDetailState {
var isOpenPassageMode = 0.obs; // var isOpenPassageMode = 0.obs; //
var lockAlias = "".obs; // var lockAlias = "".obs; //
var currentDeviceUUid = "".obs; // uuid // var currentDeviceUUid = "".obs; // uuid
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var iSClosedUnlockSuccessfulPopup = false.obs; // var iSClosedUnlockSuccessfulPopup = false.obs; //
@ -38,7 +38,7 @@ class LockDetailState {
var bottomBtnisUneable = false.obs; // var bottomBtnisUneable = false.obs; //
// //
late AnimationController animationController; AnimationController? animationController;
// var lockState = 0.obs;// 0 1() 2 3 4 5 // var lockState = 0.obs;// 0 1() 2 3 4 5
var openLockBtnState = 0.obs; // 0() 1() var openLockBtnState = 0.obs; // 0() 1()
// var connectState = 0.obs;// 0 1 // var connectState = 0.obs;// 0 1

View File

@ -59,7 +59,7 @@ class _UploadElectricQuantityPageState extends State<UploadElectricQuantityPage>
)), )),
], ],
)), )),
Obx(() => Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
@ -68,7 +68,7 @@ class _UploadElectricQuantityPageState extends State<UploadElectricQuantityPage>
style: TextStyle(fontSize: 20.sp), style: TextStyle(fontSize: 20.sp),
)), )),
], ],
)), ),
SizedBox(height: 10.h), SizedBox(height: 10.h),
Obx(() => Row( Obx(() => Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,

View File

@ -1,7 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsNoParameters.dart'; import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
@ -145,7 +147,7 @@ class BurglarAlarmLogic extends BaseGetXController{
} }
state.sureBtnState.value = 1; state.sureBtnState.value = 1;
showEasyLoading(); EasyLoading.show();
showBlueConnetctToastTimer(action: (){ showBlueConnetctToastTimer(action: (){
dismissEasyLoading(); dismissEasyLoading();
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
@ -181,6 +183,32 @@ class BurglarAlarmLogic extends BaseGetXController{
}); });
} }
Timer? _timer;
// CancelableOperation? _operation;
void showBlueConnetctToastTimer({bool isShowBlueConnetctToast = true, Function? action}) {
if (_timer != null && _timer!.isActive) {
_timer!.cancel();
_timer = null;
}
_timer = Timer.periodic(15.seconds, (timer) {
if (action != null) {
action();
}
cancelBlueConnetctToastTimer();
if (isShowBlueConnetctToast == true) {
showBlueConnetctToast();
}
});
}
void cancelBlueConnetctToastTimer() {
Get.log('cancelBlueConnetctToastTimer');
if (_timer != null && _timer!.isActive) {
_timer!.cancel();
_timer = null;
}
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady

View File

@ -2,11 +2,14 @@ import 'dart:async';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_deletUser.dart'; import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
import 'package:star_lock/blue/io_type.dart'; import 'package:star_lock/blue/io_type.dart';
import '../../../../appRouters.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_factoryDataReset.dart'; import '../../../../blue/io_protocol/io_factoryDataReset.dart';
import '../../../../blue/io_protocol/io_setSupportFunctionsNoParameters.dart'; import '../../../../blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
@ -14,6 +17,7 @@ import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart'; import '../../../../blue/sender_manage.dart';
import '../../../../mine/mineSet/authorizedAdministrator/authorizedAdminListEntity.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/eventBusEventManage.dart';
@ -36,9 +40,9 @@ class LockSetLogic extends BaseGetXController {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
if (reply is DeletUserReply) { // if (reply is DeletUserReply) {
_replyDeletUserKey(reply); // _replyDeletUserKey(reply);
} // }
// //
if (reply is FactoryDataResetReply) { if (reply is FactoryDataResetReply) {
@ -58,62 +62,62 @@ class LockSetLogic extends BaseGetXController {
} }
// //
Future<void> _replyDeletUserKey(Reply reply) async { // Future<void> _replyDeletUserKey(Reply reply) async {
var tokenData = reply.data.sublist(2, 6); // var tokenData = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(tokenData); // var saveStrList = changeIntListToStringList(tokenData);
print("openDoorToken:$tokenData"); // print("openDoorToken:$tokenData");
Storage.setStringList(saveBlueToken, saveStrList); // Storage.setStringList(saveBlueToken, saveStrList);
//
int status = reply.data[6]; // int status = reply.data[6];
print("status:$status"); // print("status:$status");
switch (status) { // switch (status) {
case 0x00: // case 0x00:
// // //
print("${reply.commandType}解析成功"); // print("${reply.commandType}解析成功");
dismissEasyLoading(); // dismissEasyLoading();
cancelBlueConnetctToastTimer(); // cancelBlueConnetctToastTimer();
deletKeyData(); // deletKeyData();
break; // break;
case 0x06: // case 0x06:
// // //
print("${reply.commandType}需要鉴权"); // print("${reply.commandType}需要鉴权");
//
var privateKey = await Storage.getStringList(saveBluePrivateKey); // var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); // List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
var publicKey = await Storage.getStringList(saveBluePublicKey); // var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); // List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
//
IoSenderManage.deletUser( // IoSenderManage.deletUser(
lockID: BlueManage().connectDeviceName, // lockID: BlueManage().connectDeviceName,
authUserID: await Storage.getUid(), // authUserID: await Storage.getUid(),
keyID: "1", // keyID: "1",
delUserID: await Storage.getUid(), // delUserID: await Storage.getUid(),
needAuthor: 1, // needAuthor: 1,
publicKey: publicKeyDataList, // publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
token: tokenData); // token: tokenData);
break; // break;
case 0x07: // case 0x07:
// // //
print("${reply.commandType!.typeValue} 用户无权限"); // print("${reply.commandType!.typeValue} 用户无权限");
dismissEasyLoading(); // dismissEasyLoading();
showToast("用户无权限"); // showToast("用户无权限");
break; // break;
case 0x09: // case 0x09:
// // //
print("${reply.commandType!.typeValue} "); // print("${reply.commandType!.typeValue} ");
dismissEasyLoading(); // dismissEasyLoading();
showToast("权限校验错误"); // showToast("权限校验错误");
break; // break;
default: // default:
// // //
print("${reply.commandType!.typeValue} 失败"); // print("${reply.commandType!.typeValue} 失败");
dismissEasyLoading(); // dismissEasyLoading();
showToast("删除失败"); // showToast("删除失败");
break; // break;
} // }
} // }
// //
Future<void> _replyFactoryDataResetKey(Reply reply) async { Future<void> _replyFactoryDataResetKey(Reply reply) async {
@ -264,46 +268,46 @@ class LockSetLogic extends BaseGetXController {
} }
// //
Future<void> deletUserAction() async { // Future<void> deletUserAction() async {
showEasyLoading(); // showEasyLoading();
showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: (){ // showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: (){
dismissEasyLoading(); // dismissEasyLoading();
// print("1111111"); // // print("1111111");
showDeletAlertTipDialog(); // showDeletAlertTipDialog();
}); // });
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async { // BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async {
if (connectionState == DeviceConnectionState.connected) { // if (connectionState == DeviceConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey); // var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); // List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
var publicKey = await Storage.getStringList(saveBluePublicKey); // var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); // List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
//
var token = await Storage.getStringList(saveBlueToken); // var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!); // List<int> getTokenList = changeStringListToIntList(token!);
//
IoSenderManage.deletUser( // IoSenderManage.deletUser(
lockID: BlueManage().connectDeviceName, // lockID: BlueManage().connectDeviceName,
authUserID: state.lockBasicInfo.value.senderUserId.toString(), // authUserID: state.lockBasicInfo.value.senderUserId.toString(),
keyID: state.lockBasicInfo.value.keyId.toString(), // keyID: state.lockBasicInfo.value.keyId.toString(),
delUserID: await Storage.getUid(), // delUserID: await Storage.getUid(),
// authUserID: "100001", // // authUserID: "100001",
// keyID: "1", // // keyID: "1",
// delUserID: "100001", // // delUserID: "100001",
needAuthor: 1, // needAuthor: 1,
publicKey: publicKeyDataList, // publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
token: getTokenList); // token: getTokenList);
} else if (connectionState == DeviceConnectionState.disconnected) { // } else if (connectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading(); // dismissEasyLoading();
cancelBlueConnetctToastTimer(); // cancelBlueConnetctToastTimer();
print("222222"); // print("222222");
if(state.ifCurrentScreen.value == true){ // if(state.ifCurrentScreen.value == true){
showDeletAlertTipDialog(); // showDeletAlertTipDialog();
} // }
} // }
}); // });
} // }
// //
Future<void> factoryDataResetAction() async { Future<void> factoryDataResetAction() async {
@ -445,177 +449,6 @@ class LockSetLogic extends BaseGetXController {
return entity; return entity;
} }
//
void deletLockInfoData() async {
var entity = await ApiRepository.to.deletOwnerLockData(
lockId: state.lockSetInfoData.value.lockId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = "";
eventBus.fire(RefreshLockListInfoDataEvent());
if(state.isOnlyOneData.value == true){
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(1);
});
}else{
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(2);
});
}
}
}
//
void deletKeyData() async {
var entity = await ApiRepository.to.deletOwnerKeyData(
lockId: state.lockSetInfoData.value.lockId.toString(),
keyId: state.lockSetInfoData.value.lockBasicInfo!.keyId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = "";
eventBus.fire(RefreshLockListInfoDataEvent());
if(state.isOnlyOneData.value == true){
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(1);
});
}else{
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(2);
});
}
// Get.offAllNamed(Routers.starLockMain);
}
}
void showDeletPasswordAlertDialog(BuildContext context) {
//
BlueManage().startScan();
showDialog(
context: context,
builder: (BuildContext context) {
return ShowTFView(
title: "请输入登录密码",
tipTitle: "",
controller: state.passwordTF,
sureClick: () {
//
if (state.passwordTF.text.isEmpty) {
showToast("请输入登录密码");
return;
}
checkLoginPassword();
},
cancelClick: () {
//
BlueManage().stopScan();
Get.back();
},
);
},
);
}
//
void checkLoginPassword() async {
var entity = await ApiRepository.to.checkLoginPassword(
password: state.passwordTF.text,
);
if (entity.errorCode!.codeIsSuccessful) {
Get.back();
if(BlueManage().deviceConnectionState == DeviceConnectionState.connected){
//
//
if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) {
//
factoryDataResetAction();
} else {
//
if(state.lockSetInfoData.value.lockBasicInfo!.lockUserNo != 0){
//
deletUserAction();
}else{
//
deletKeyData();
}
}
return;
}
if (state.currentDeviceUUid.value.isNotEmpty) {
//
BlueManage().stopScan();
deletLockLogic();
} else {
// 5
var index = 0;
showEasyLoading();
state.deletWaitScanCompleter = Completer();
state.deletWaitScanTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
//
if(index >= 7){
// 10,
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
BlueManage().stopScan();
dismissEasyLoading();
print("555555");
showDeletAlertTipDialog();
}else{
//
if (state.currentDeviceUUid.isNotEmpty) {
BlueManage().stopScan();
//
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
dismissEasyLoading();
deletLockLogic();
} else {
// -1 5
index++;
// print("index:$index");
}
}
});
// Completer完成
await state.deletWaitScanCompleter!.future;
}
}
}
void deletLockLogic() {
//
if(state.currentDeviceUUid.value[31] == "1"){
//
if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) {
//
factoryDataResetAction();
} else {
//
if(state.lockSetInfoData.value.lockBasicInfo!.lockUserNo != 0){
//
deletUserAction();
}else{
//
deletKeyData();
}
}
}else if(state.currentDeviceUUid.value[31] == "0"){
//
print("666666");
showDeletAlertTipDialog(showContent:"当前锁已被强制初始化,可直接添加。");
}
}
// //
void openCheckingInData(BlockSetCheckInCallback blockSetCheckInCallback) async { void openCheckingInData(BlockSetCheckInCallback blockSetCheckInCallback) async {
var entity = await ApiRepository.to.openCheckingInData( var entity = await ApiRepository.to.openCheckingInData(
@ -701,8 +534,8 @@ class LockSetLogic extends BaseGetXController {
} }
void showDeletAlertTipDialog({String? showContent = ""}) { void showDeletAlertTipDialog({String? showContent = ""}) {
bool isContains = BlueManage().connectDeviceName!.contains("T9A"); // bool isContains = BlueManage().connectDeviceName!.contains("T9A");
var content = showContent!.isEmpty ? "删除设备失败,请确保在设备附近,设备未被连接,设备已打开${isContains == true ? "。如果是全自动锁,请使屏幕变亮" : ""}" : showContent; var content = showContent!.isEmpty ? "删除设备失败,请确保在设备附近,设备未被连接,设备已打开${BlueManage().connectDeviceName!.contains("T9A") == true ? "。如果是全自动锁,请使屏幕变亮" : ""}" : showContent;
showCupertinoDialog( showCupertinoDialog(
context: Get.context!, context: Get.context!,
builder: (context) { builder: (context) {
@ -736,6 +569,305 @@ class LockSetLogic extends BaseGetXController {
); );
} }
//
void showCupertinoAlertDialog(widgetContext) {
showCupertinoDialog(
context: widgetContext,
builder: (context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: const Text('创建公司后,考勤功能才能使用'),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () {
Navigator.pop(context);
Get.toNamed(Routers.checkInCreatCompanyPage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
},
),
],
);
},
);
}
///
deleyLockLogicOfRoles(){
if (state.lockBasicInfo.value.isLockOwner == 1) {
//
showDeletAlertDialog();
} else if (state.lockBasicInfo.value.keyRight == 1){
//
showDeleteAdministratorIsHaveAllDataDialog();
} else{
//
deletKeyData();
}
}
//
void showDeletAlertDialog() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: const Text('删除锁后,所有信息都会一起删除,确定删除锁吗?'),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () {
Get.back();
showDeletPasswordAlertDialog(context);
},
),
],
);
},
);
}
void showDeletPasswordAlertDialog(BuildContext context) {
//
BlueManage().startScan();
showDialog(
context: context,
builder: (BuildContext context) {
return ShowTFView(
title: "请输入登录密码",
tipTitle: "",
controller: state.passwordTF,
sureClick: () {
//
if (state.passwordTF.text.isEmpty) {
showToast("请输入登录密码");
return;
}
checkLoginPassword();
},
cancelClick: () {
//
BlueManage().stopScan();
Get.back();
},
);
},
);
}
//
void showDeleteAdministratorIsHaveAllDataDialog() {
showDialog(
context: Get.context!,
builder: (BuildContext context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: Container(
height: 100.h,
child: Row(
children: [
GestureDetector(
onTap: () {
state.deleteAdministratorIsHaveAllData.value = !state.deleteAdministratorIsHaveAllData.value;
},
child: Obx(() => Image.asset(
state.deleteAdministratorIsHaveAllData.value
? 'images/icon_round_select.png'
: 'images/icon_round_unSelect.png',
width: 30.w,
height: 30.w,
))),
SizedBox(width: 15.w,),
Expanded(child: Text('同时删除其发送的所有钥匙,钥匙删除后不能恢复', maxLines: 2, textAlign: TextAlign.start, style: TextStyle(fontSize: 24.sp))),
],
),
),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.delete!.tr),
onPressed: () {
Get.back();
deletKeyData();
},
),
],
);
},
);
}
//
void checkLoginPassword() async {
var entity = await ApiRepository.to.checkLoginPassword(
password: state.passwordTF.text,
);
if (entity.errorCode!.codeIsSuccessful) {
Get.back();
if(BlueManage().deviceConnectionState == DeviceConnectionState.connected){
//
//
// if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) {
//
factoryDataResetAction();
// } else {
// //
// if(state.lockSetInfoData.value.lockBasicInfo!.lockUserNo != 0){
// //
// deletUserAction();
// }else{
// //
// deletKeyData();
// }
// }
return;
}
if (state.currentDeviceUUid.value.isNotEmpty) {
//
BlueManage().stopScan();
deletLockLogic();
} else {
// 5
var index = 0;
showEasyLoading();
state.deletWaitScanCompleter = Completer();
state.deletWaitScanTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
//
if(index >= 7){
// 10,
if (state.deletWaitScanTimer != null && state.deletWaitScanTimer!.isActive) {
state.deletWaitScanTimer!.cancel();
state.deletWaitScanTimer = null;
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
BlueManage().stopScan();
dismissEasyLoading();
print("555555");
showDeletAlertTipDialog();
}else{
//
if (state.currentDeviceUUid.isNotEmpty) {
BlueManage().stopScan();
//
if (state.deletWaitScanTimer != null && state.deletWaitScanTimer!.isActive) {
state.deletWaitScanTimer!.cancel();
state.deletWaitScanTimer = null;
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
dismissEasyLoading();
deletLockLogic();
} else {
// -1 5
index++;
// print("index:$index");
}
}
});
// Completer完成
await state.deletWaitScanCompleter!.future;
}
}
}
//
void deletLockLogic() {
//
if(state.currentDeviceUUid.value[31] == "1"){
//
// if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) {
//
factoryDataResetAction();
// } else {
// //
// if(state.lockSetInfoData.value.lockBasicInfo!.lockUserNo != 0){
// //
// deletUserAction();
// }else{
// //
// deletKeyData();
// }
// }
}else if(state.currentDeviceUUid.value[31] == "0"){
//
print("666666");
// showDeletAlertTipDialog(showContent:"当前锁已被强制初始化,可直接添加。");
deletLockInfoData();
}
}
//
void deletLockInfoData() async {
var entity = await ApiRepository.to.deletOwnerLockData(
lockId: state.lockSetInfoData.value.lockId.toString(),
);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = "";
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());
});
if(state.isOnlyOneData.value == true){
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(1);
});
}else{
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(2);
});
}
}
}
//
void deletKeyData() async {
var entity = await ApiRepository.to.deletOwnerKeyData(
lockId: state.lockSetInfoData.value.lockId.toString(),
keyId: state.lockSetInfoData.value.lockBasicInfo!.keyId.toString(),
includeUnderlings: state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0
);
if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = "";
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());
});
if(state.isOnlyOneData.value == true){
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(1);
});
}else{
Future.delayed(const Duration(milliseconds: 200)).then((e) {
Get.close(2);
});
}
// Get.offAllNamed(Routers.starLockMain);
}
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady

View File

@ -11,6 +11,7 @@ import '../../../../tools/EasyRefreshTool.dart';
import '../../../../tools/appRouteObserver.dart'; import '../../../../tools/appRouteObserver.dart';
import '../../../../tools/commonItem.dart'; import '../../../../tools/commonItem.dart';
import '../../../../tools/showIosTipView.dart';
import '../../../../tools/submitBtn.dart'; import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart'; import '../../../../tools/titleAppBar.dart';
import '../../../../translations/trans_lib.dart'; import '../../../../translations/trans_lib.dart';
@ -119,8 +120,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
}))), }))),
// //
Obx(() => Visibility( Obx(() => Visibility(
// visible: state.lockFeature.value.passageMode == 1 ? true : false, visible: state.lockFeature.value.passageMode == 1 ? true : false,
visible: true,
child: CommonItem( child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr, leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr,
rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1 rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1
@ -156,8 +156,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
// logic.deletUserAction(); // logic.deletUserAction();
// logic.deletLockInfoData(); // logic.deletLockInfoData();
showDeletAlertDialog(context); // showDeletAlertDialog(context);
// showDeletPasswordAlertDialog(context); // showDeletPasswordAlertDialog(context);
logic.deleyLockLogicOfRoles();
}), }),
), ),
]; ];
@ -301,6 +302,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
// //
Obx(() => Visibility( Obx(() => Visibility(
visible: state.lockFeature.value.passageMode == 1 ? true : false, visible: state.lockFeature.value.passageMode == 1 ? true : false,
// visible: true,
child: CommonItem( child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr, leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr,
rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1 rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1
@ -613,8 +615,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
// logic.deletUserAction(); // logic.deletUserAction();
// logic.deletLockInfoData(); // logic.deletLockInfoData();
showDeletAlertDialog(context); // showDeletAlertDialog(context);
// showDeletPasswordAlertDialog(context); // showDeleteAdministratorIsHaveAllDataDialog(context);
logic.deleyLockLogicOfRoles();
}), }),
), ),
]; ];
@ -639,7 +642,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
onChanged: (value) { onChanged: (value) {
logic.openCheckingInData((checkingInInfoDataEntity) { logic.openCheckingInData((checkingInInfoDataEntity) {
if (checkingInInfoDataEntity.data!.companyId == 0) { if (checkingInInfoDataEntity.data!.companyId == 0) {
showCupertinoAlertDialog(context); logic.showCupertinoAlertDialog(context);
} else { } else {
logic.setLockSetGeneralSetting(); logic.setLockSetGeneralSetting();
} }
@ -736,86 +739,6 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
); );
} }
//
void showCupertinoAlertDialog(widgetContext) {
showCupertinoDialog(
context: widgetContext,
builder: (context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: const Text('创建公司后,考勤功能才能使用'),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () {
Navigator.pop(context);
Get.toNamed(Routers.checkInCreatCompanyPage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
},
),
],
);
},
);
}
void showDeletAlertDialog(BuildContext context) {
showCupertinoDialog(
context: context,
builder: (context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: const Text('删除锁后,所有信息都会一起删除,确定删除锁吗?'),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Navigator.pop(context);
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () {
Get.back();
logic.showDeletPasswordAlertDialog(context);
},
),
],
);
},
);
}
// void showCupertinoAlertDialog(
// BuildContext context,
// ) {
// showDialog(
// context: context,
// builder: (BuildContext context) {
// return ShowIosTipView(
// title: "提示",
// tipTitle: "创建公司号,考勤功能才能使用",
// sureClick: () {
// //
// Navigator.pop(context);
// Get.toNamed(Routers.checkInCreatCompanyPage,
// arguments: state.getKeyInfosData.value);
// },
// cancelClick: () {
// Navigator.pop(context);
// },
// );
// },
// );
// }
@override @override
void didChangeDependencies() { void didChangeDependencies() {
// TODO: implement didChangeDependencies // TODO: implement didChangeDependencies

View File

@ -29,6 +29,7 @@ class LockSetState {
var settingUpSupportFeatures = 0; var settingUpSupportFeatures = 0;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var deleteAdministratorIsHaveAllData = false.obs; //
Completer? deletWaitScanCompleter; Completer? deletWaitScanCompleter;
Timer? deletWaitScanTimer; Timer? deletWaitScanTimer;

View File

@ -6,6 +6,7 @@ import '../../../network/api_repository.dart';
import '../../../talk/udp/udp_help.dart'; import '../../../talk/udp/udp_help.dart';
import '../../../tools/baseGetXController.dart'; import '../../../tools/baseGetXController.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../versionUndate/versionUndateTool.dart';
import '../entity/lockListInfo_entity.dart'; import '../entity/lockListInfo_entity.dart';
import 'lockMain_state.dart'; import 'lockMain_state.dart';
@ -39,15 +40,6 @@ class LockMainLogic extends BaseGetXController {
return entity; return entity;
} }
late StreamSubscription _teamEvent;
void _initLoadDataAction() {
_teamEvent = eventBus.on<RefreshLockListInfoDataEvent>().listen((event) {
// getLockInfo();
getStarLockInfo();
print("收到消息");
});
}
/// ///
void getConnectType() async { void getConnectType() async {
var connectResult = await (Connectivity().checkConnectivity()); var connectResult = await (Connectivity().checkConnectivity());
@ -91,8 +83,6 @@ class LockMainLogic extends BaseGetXController {
super.onReady(); super.onReady();
print("onReady()"); print("onReady()");
_initLoadDataAction();
// UDP // UDP
UdpHelp().openUDP(); UdpHelp().openUDP();
} }
@ -116,7 +106,7 @@ class LockMainLogic extends BaseGetXController {
super.onClose(); super.onClose();
// refreshController.dispose(); // refreshController.dispose();
_teamEvent.cancel(); // _teamEvent.cancel();
// state.timer.cancel(); // state.timer.cancel();
} }

View File

@ -1,7 +1,9 @@
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:aliyun_push/aliyun_push.dart'; import 'package:aliyun_push/aliyun_push.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
@ -14,6 +16,7 @@ import '../../../baseWidget.dart';
import '../../../flavors.dart'; import '../../../flavors.dart';
import '../../../mine/mine/starLockMine_page.dart'; import '../../../mine/mine/starLockMine_page.dart';
import '../../../tools/EasyRefreshTool.dart'; import '../../../tools/EasyRefreshTool.dart';
import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import '../../../tools/titleAppBar.dart'; import '../../../tools/titleAppBar.dart';
import '../../../translations/trans_lib.dart'; import '../../../translations/trans_lib.dart';
@ -34,7 +37,9 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
final logic = Get.put(LockMainLogic()); final logic = Get.put(LockMainLogic());
final state = Get.find<LockMainLogic>().state; final state = Get.find<LockMainLogic>().state;
void getHttpData() { Future<void> getHttpData() async {
// await logic.getStarLockInfo();
// setState(() {});
logic.getStarLockInfo().then((LockListInfoEntity value) { logic.getStarLockInfo().then((LockListInfoEntity value) {
setState(() {}); setState(() {});
}); });
@ -43,18 +48,20 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// WidgetsBinding.instance!.addPostFrameCallback((_) { WidgetsBinding.instance!.addPostFrameCallback((_) {
// getHttpData(); getHttpData();
// }); });
initAliyunPush(); initAliyunPush();
_initLoadDataAction();
} }
@override @override
void didChangeDependencies() { void didChangeDependencies() {
super.didChangeDependencies(); super.didChangeDependencies();
WidgetsBinding.instance!.addPostFrameCallback((_) { // WidgetsBinding.instance!.addPostFrameCallback((_) {
getHttpData(); // getHttpData();
}); // });
} }
@override @override
@ -108,10 +115,13 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
// ), // ),
body: EasyRefreshTool( body: EasyRefreshTool(
onRefresh: () { onRefresh: () {
logic.pageNo = 1; SchedulerBinding.instance.addPostFrameCallback((_) {
getHttpData(); //
logic.pageNo = 1;
getHttpData();
});
}, },
child: Obx(() => getDataReturnUI(state.dataLength.value))), child: getDataReturnUI(state.dataLength.value)),
// body:smartRefresher( // body:smartRefresher(
// logic.refreshController, // logic.refreshController,
// onRefresh:logic.onRefresh, // onRefresh:logic.onRefresh,
@ -244,4 +254,20 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
} }
}); });
} }
late StreamSubscription _teamEvent;
void _initLoadDataAction() {
_teamEvent = eventBus.on<RefreshLockListInfoDataEvent>().listen((event) {
// getLockInfo();
getHttpData();
print("收到刷新首页数据消息");
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_teamEvent.cancel();
}
} }

View File

@ -38,6 +38,7 @@ class _AboutPageState extends State<AboutPage> {
packageName = packageInfo.packageName; packageName = packageInfo.packageName;
version = packageInfo.version; version = packageInfo.version;
buildNumber = packageInfo.buildNumber; buildNumber = packageInfo.buildNumber;
print("aboutGetversion:${version}");
}); });
} }

View File

@ -139,7 +139,7 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 1, pwdNo: 254,
pwd: "123456", pwd: "123456",
useCountLimit: 0xff, useCountLimit: 0xff,
startTime: 0x11223344, startTime: 0x11223344,
@ -197,7 +197,7 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.changeAdministratorPasswordCommand( IoSenderManage.changeAdministratorPasswordCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 0, pwdNo: 254,
pwd:state.adminPasswordTF.text, pwd:state.adminPasswordTF.text,
useCountLimit: 0xff, useCountLimit: 0xff,
startTime: 0x11223344, startTime: 0x11223344,
@ -300,7 +300,7 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 1, pwdNo: 254,
pwd:state.adminPasswordTF.text, pwd:state.adminPasswordTF.text,
useCountLimit: 0xff, useCountLimit: 0xff,
startTime: 0x11223344, startTime: 0x11223344,
@ -334,7 +334,7 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.changeAdministratorPasswordCommand( IoSenderManage.changeAdministratorPasswordCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 0, pwdNo: 254,
pwd:state.adminPasswordTF.text, pwd:state.adminPasswordTF.text,
useCountLimit: 0xff, useCountLimit: 0xff,
startTime: 0x11223344, startTime: 0x11223344,

View File

@ -1,7 +1,10 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../translations/trans_lib.dart';
import 'recipientInformation_entity.dart'; import 'recipientInformation_entity.dart';
import 'recipientInformation_state.dart'; import 'recipientInformation_state.dart';
@ -32,6 +35,17 @@ class RecipientInformationLogic extends BaseGetXController{
} }
} }
//
Future<void> removeBrokenLockData() async{
var entity = await ApiRepository.to.removeBrokenLockData(
lockIdList: state.idList.value,
);
if(entity.errorCode!.codeIsSuccessful){
eventBus.fire(RefreshLockListInfoDataEvent());
Get.back(result: "scuess");
}
}
// //
Future<void> transferGateWayConfirmInfoData(void Function(RecipientInformationData recipientInformationData) action) async{ Future<void> transferGateWayConfirmInfoData(void Function(RecipientInformationData recipientInformationData) action) async{
var entity = await ApiRepository.to.transferGatewayConfirmInfoData( var entity = await ApiRepository.to.transferGatewayConfirmInfoData(
@ -56,6 +70,34 @@ class RecipientInformationLogic extends BaseGetXController{
} }
} }
//
void showDeletAlertDialog() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: const Text("提示"),
content: const Text('确定要移除所选中的坏锁吗?'),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () {
Get.back();
removeBrokenLockData();
},
),
],
);
},
);
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady

View File

@ -42,7 +42,7 @@ class _RecipientInformationPageState extends State<RecipientInformationPage> {
_buildNextBtn(context), _buildNextBtn(context),
SizedBox(height: 64.h), SizedBox(height: 64.h),
Visibility( Visibility(
visible: state.isFromType.value == 2 ? true : false, visible: state.isFromType.value == 1 ? true : false,
child: _buildRemoveBadLockBtn()), child: _buildRemoveBadLockBtn()),
SizedBox( SizedBox(
height: 64.h, height: 64.h,
@ -245,7 +245,9 @@ class _RecipientInformationPageState extends State<RecipientInformationPage> {
children: [ children: [
const Expanded(child: SizedBox()), const Expanded(child: SizedBox()),
TextButton( TextButton(
onPressed: () {}, onPressed: () {
logic.showDeletAlertDialog();
},
child: Text( child: Text(
'移除坏锁', '移除坏锁',
style: TextStyle( style: TextStyle(

View File

@ -123,6 +123,7 @@ abstract class Api {
final String transferLockListURL = '/room/listForTransfer'; // final String transferLockListURL = '/room/listForTransfer'; //
final String transferLockConfirmURL = '/room/transferLockConfirm'; // final String transferLockConfirmURL = '/room/transferLockConfirm'; //
final String transferLockURL = '/room/transfer'; // final String transferLockURL = '/room/transfer'; //
final String removeBadLockURL = '/lock/removeBadLock'; //
final String gatewaykListURL = '/plug/list'; // final String gatewaykListURL = '/plug/list'; //
final String transferGatewayConfirmURL = final String transferGatewayConfirmURL =
@ -173,4 +174,6 @@ abstract class Api {
final String messageListURL = '/notifications/list'; // final String messageListURL = '/notifications/list'; //
final String readMessageURL = '/notifications/markAsRead'; // final String readMessageURL = '/notifications/markAsRead'; //
final String deletMessageURL = '/notifications/delete'; // final String deletMessageURL = '/notifications/delete'; //
final String getVersionURL = '/app/getVersion'; //
} }

View File

@ -356,9 +356,9 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> deletOwnerKeyInfo(String lockId, String keyId) => post( Future<Response> deletOwnerKeyInfo(String lockId, String keyId, int includeUnderlings) => post(
deleteElectronicKeyURL.toUrl, deleteElectronicKeyURL.toUrl,
jsonEncode({'lockId': lockId, 'keyId': keyId})); jsonEncode({'lockId': lockId, 'keyId': keyId, 'includeUnderlings': includeUnderlings}));
// //
Future<Response> checkLoginPassword(String password) => post( Future<Response> checkLoginPassword(String password) => post(
@ -1265,6 +1265,14 @@ class ApiProvider extends BaseProvider {
'countryCode': countryCode 'countryCode': countryCode
})); }));
//
Future<Response> removeBrokenLockData(List lockIdList) =>
post(
removeBadLockURL.toUrl,
jsonEncode({
'lockIds': lockIdList
}));
Future<Response> listLockByGroup(String type, String keyGroupId) => post( Future<Response> listLockByGroup(String type, String keyGroupId) => post(
listLockByGroupURL.toUrl, listLockByGroupURL.toUrl,
jsonEncode({'type': type, 'keyGroupId': keyGroupId})); jsonEncode({'type': type, 'keyGroupId': keyGroupId}));
@ -1534,6 +1542,14 @@ class ApiProvider extends BaseProvider {
jsonEncode({ jsonEncode({
'id': messageId, 'id': messageId,
})); }));
//
Future<Response> getVersionData(String brandName, String currentVersion) => post(
getVersionURL.toUrl,
jsonEncode({
'brandName': brandName,
'currentVersion': currentVersion,
}));
} }
extension ExtensionString on String { extension ExtensionString on String {

View File

@ -48,6 +48,7 @@ import '../mine/minePersonInfo/minePersonInfoPage/minePersonGetUploadFileInfo_en
import '../mine/mineSet/transferGateway/selectGetewayList_entity.dart'; import '../mine/mineSet/transferGateway/selectGetewayList_entity.dart';
import '../mine/mineSet/transferSmartLock/recipientInformation/recipientInformation_entity.dart'; import '../mine/mineSet/transferSmartLock/recipientInformation/recipientInformation_entity.dart';
import '../mine/mineSet/transferSmartLock/transferSmartLockList/transferSmartLock_entity.dart'; import '../mine/mineSet/transferSmartLock/transferSmartLockList/transferSmartLock_entity.dart';
import '../versionUndate/versionUndate_entity.dart';
import 'api_provider.dart'; import 'api_provider.dart';
class ApiRepository { class ApiRepository {
@ -381,8 +382,8 @@ class ApiRepository {
// //
Future<LockListInfoEntity> deletOwnerKeyData( Future<LockListInfoEntity> deletOwnerKeyData(
{required String lockId, required String keyId}) async { {required String lockId, required String keyId, required int includeUnderlings}) async {
final res = await apiProvider.deletOwnerKeyInfo(lockId, keyId); final res = await apiProvider.deletOwnerKeyInfo(lockId, keyId, includeUnderlings);
return LockListInfoEntity.fromJson(res.body); return LockListInfoEntity.fromJson(res.body);
} }
@ -1398,6 +1399,13 @@ class ApiRepository {
return RecipientInformationEntity.fromJson(res.body); return RecipientInformationEntity.fromJson(res.body);
} }
//
Future<RecipientInformationEntity> removeBrokenLockData(
{required List lockIdList}) async {
final res = await apiProvider.removeBrokenLockData(lockIdList);
return RecipientInformationEntity.fromJson(res.body);
}
// //
Future<LoginEntity> deleteAccount( Future<LoginEntity> deleteAccount(
String channel, String verificationCode) async { String channel, String verificationCode) async {
@ -1549,4 +1557,13 @@ class ApiRepository {
final res = await apiProvider.deletMessageLoadData(messageId); final res = await apiProvider.deletMessageLoadData(messageId);
return MessageListEntity.fromJson(res.body); return MessageListEntity.fromJson(res.body);
} }
//
Future<VersionUndateEntity> getVersionData({
required String brandName,
required String currentVersion
}) async {
final res = await apiProvider.getVersionData(brandName, currentVersion);
return VersionUndateEntity.fromJson(res.body);
}
} }

View File

@ -4,6 +4,7 @@ import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../main/lockMian/lockMain/lockMain_page.dart'; import '../main/lockMian/lockMain/lockMain_page.dart';
import '../versionUndate/versionUndateTool.dart';
class StarLockApplication extends StatefulWidget { class StarLockApplication extends StatefulWidget {
const StarLockApplication({Key? key}) : super(key: key); const StarLockApplication({Key? key}) : super(key: key);
@ -13,10 +14,20 @@ class StarLockApplication extends StatefulWidget {
} }
class _StarLockApplicationState extends State<StarLockApplication> { class _StarLockApplicationState extends State<StarLockApplication> {
@override
void initState() {
// TODO: implement initState
super.initState();
print("StarLockApplication initState");
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
print("StarLockApplication build");
AppFirstEnterHandle().getAppFirstEnter(context, isAgreePrivacy); AppFirstEnterHandle().getAppFirstEnter(context, isAgreePrivacy);
AppFirstEnterHandle().getAppFirstEnter(context, isShowUpdateVersion);
return FutureBuilder<bool>( return FutureBuilder<bool>(
future: getLoginStatus(), future: getLoginStatus(),
builder: (context, snapshot) { builder: (context, snapshot) {

View File

@ -1,13 +1,21 @@
import 'dart:io'; import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../network/api_repository.dart';
import '../translations/trans_lib.dart';
import '../versionUndate/versionUndateTool.dart';
import '../versionUndate/versionUndate_entity.dart';
class AppFirstEnterHandle { class AppFirstEnterHandle {
Future getAppFirstEnter(BuildContext widgetContext, String flagStr) async { Future getAppFirstEnter(BuildContext widgetContext, String flagStr) async {
var getFlag = await Storage.getString(flagStr); var getFlag = await Storage.getString(flagStr);
@ -28,6 +36,11 @@ class AppFirstEnterHandle {
if (getFlag != isAgreeCamera) showCameraAlert(widgetContext); if (getFlag != isAgreeCamera) showCameraAlert(widgetContext);
} }
break; break;
case isShowUpdateVersion: //
{
if (getFlag != isShowUpdateVersion) VersionUndateTool();
}
break;
default: default:
{ {
print('没有匹配的flagStr'); print('没有匹配的flagStr');

View File

@ -1,4 +1,3 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
@ -15,7 +14,7 @@ import 'NativeInteractionTool.dart';
import 'manager/client_manager.dart'; import 'manager/client_manager.dart';
import 'showIosTipView.dart'; import 'showIosTipView.dart';
class BaseGetXController extends GetxController{ class BaseGetXController extends GetxController {
int currentTimeSeconds = 0; int currentTimeSeconds = 0;
bool currentPage = true; bool currentPage = true;
@ -52,7 +51,8 @@ class BaseGetXController extends GetxController{
Get.log('onClose -----> $runtimeType'); Get.log('onClose -----> $runtimeType');
} }
Future delay({Duration? duration,Function? something}) => Future.delayed(duration ?? 500. milliseconds,something as FutureOr Function()?); Future delay({Duration? duration, Function? something}) => Future.delayed(
duration ?? 500.milliseconds, something as FutureOr Function()?);
void showEasyLoading() => EasyLoading.show(); void showEasyLoading() => EasyLoading.show();
@ -60,65 +60,61 @@ class BaseGetXController extends GetxController{
Timer? _timer; Timer? _timer;
// CancelableOperation? _operation; // CancelableOperation? _operation;
void showBlueConnetctToastTimer({bool isShowBlueConnetctToast = true,Function? action}) { void showBlueConnetctToastTimer({bool isShowBlueConnetctToast = true, Function? action}) {
if(_timer != null){ if (_timer != null && _timer!.isActive) {
_timer!.cancel(); _timer!.cancel();
_timer = null; _timer = null;
} }
_timer = Timer.periodic(15.seconds, (timer) { _timer = Timer.periodic(15.seconds, (timer) {
if(action != null) { if (action != null) {
action(); action();
} }
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
if(isShowBlueConnetctToast == true){ if (isShowBlueConnetctToast == true) {
showBlueConnetctToast(); showBlueConnetctToast();
} }
}); });
// _operation = CancelableOperation.fromFuture(
// Future.delayed(const Duration(seconds: 15), () {
// print('Operation completed');
// showBlueConnetctToast();
// }),
// );
} }
void cancelBlueConnetctToastTimer() { void cancelBlueConnetctToastTimer() {
Get.log('cancelBlueConnetctToastTimer'); Get.log('cancelBlueConnetctToastTimer');
if(_timer != null){ if (_timer != null && _timer!.isActive) {
_timer!.cancel(); _timer!.cancel();
_timer = null; _timer = null;
} }
// _operation?.cancel();
} }
void showBlueConnetctToast() { void showBlueConnetctToast() {
bool isContains = BlueManage().connectDeviceName!.contains("T9A"); bool isContains = BlueManage().connectDeviceName!.contains("T9A");
showToast("连接设备失败,请确保在设备附近,设备未被连接,设备已打开${isContains == true ? "。如果是全自动锁,请使屏幕变亮" : ""}"); showToast(
"连接设备失败,请确保在设备附近,设备未被连接,设备已打开${isContains == true ? "。如果是全自动锁,请使屏幕变亮" : ""}");
} }
void showToast(String status,{Function? something}) { void showToast(String status, {Function? something}) {
EasyLoading.showToast(status,duration: 2000.milliseconds); EasyLoading.showToast(status, duration: 2000.milliseconds);
if(something != null) { if (something != null) {
delay(duration: 2100.milliseconds,something: something); delay(duration: 2100.milliseconds, something: something);
} }
} }
void showError(String status,{Function? something}) { void showError(String status, {Function? something}) {
EasyLoading.showError(status,duration: 2000.milliseconds); EasyLoading.showError(status, duration: 2000.milliseconds);
if(something != null) { if (something != null) {
delay(duration: 2100.milliseconds,something: something); delay(duration: 2100.milliseconds, something: something);
} }
} }
void showSuccess(String status,{Function? something}) { void showSuccess(String status, {Function? something}) {
EasyLoading.showSuccess(status,duration: 1500.milliseconds); EasyLoading.showSuccess(status, duration: 1500.milliseconds);
if(something != null) { if (something != null) {
delay(duration: 2000.milliseconds,something: something); delay(duration: 2000.milliseconds, something: something);
} }
} }
void showOperationSuccessful({String? status,Function? something}) => showSuccess( status ?? "成功",something: something); void showOperationSuccessful({String? status, Function? something}) =>
void showOperationFailed({String? status, Function? something}) => showError( status ?? "失败",something: something); showSuccess(status ?? "成功", something: something);
void showOperationFailed({String? status, Function? something}) =>
showError(status ?? "失败", something: something);
void logOff() async { void logOff() async {
await ClientManager().logOff(); await ClientManager().logOff();
@ -129,16 +125,16 @@ class BaseGetXController extends GetxController{
NativeInteractionTool().sendGetBlueStatus(); NativeInteractionTool().sendGetBlueStatus();
NativeInteractionTool().receiveChannelBlueIsOnEvent((String status) { NativeInteractionTool().receiveChannelBlueIsOnEvent((String status) {
print("22222222"); print("22222222");
if(status == "1"){ if (status == "1") {
// //
Get.log('蓝牙已打开'); Get.log('蓝牙已打开');
action(); action();
}else if(status == "0"){ } else if (status == "0") {
// //
Get.log('蓝牙未打开'); Get.log('蓝牙未打开');
showIosTipViewDialog(); showIosTipViewDialog();
return; return;
}else{ } else {
// //
Get.log('设备不支持蓝牙'); Get.log('设备不支持蓝牙');
showToast("设备不支持蓝牙"); showToast("设备不支持蓝牙");
@ -158,7 +154,7 @@ class BaseGetXController extends GetxController{
Get.back(); Get.back();
if (Platform.isIOS) { if (Platform.isIOS) {
launch('App-Prefs:'); launch('App-Prefs:');
}else{ } else {
SystemSettings.system(); SystemSettings.system();
} }
}, },
@ -166,20 +162,17 @@ class BaseGetXController extends GetxController{
Get.back(); Get.back();
}, },
); );
} });
);
} }
String getUseKeyTypeStr(int? startDate, int? endDate,int? keyType) { String getUseKeyTypeStr(int? startDate, int? endDate, int? keyType) {
String useDateStr = ''; String useDateStr = '';
if (keyType == XSConstantMacro.keyTypeTime) { if (keyType == XSConstantMacro.keyTypeTime) {
// //
DateTime startDateStr = DateTime startDateStr = DateTime.fromMillisecondsSinceEpoch(startDate!);
DateTime.fromMillisecondsSinceEpoch(startDate!); DateTime endDateStr = DateTime.fromMillisecondsSinceEpoch(endDate!);
DateTime endDateStr =
DateTime.fromMillisecondsSinceEpoch(endDate!);
useDateStr = useDateStr =
'${startDateStr.toLocal().toString().substring(0, 16)} - ${endDateStr.toLocal().toString().substring(0, 16)}'; '${startDateStr.toLocal().toString().substring(0, 16)} - ${endDateStr.toLocal().toString().substring(0, 16)}';
} else if (keyType == XSConstantMacro.keyTypeLong) { } else if (keyType == XSConstantMacro.keyTypeLong) {
// //
// DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!); // DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!);
@ -217,11 +210,10 @@ class BaseGetXController extends GetxController{
} }
return result; return result;
} }
} }
///Extension_Int ///Extension_Int
extension Extension_Int on int { extension Extension_Int on int {
bool get codeIsSuccessful => this == 0; bool get codeIsSuccessful => this == 0;
bool get msgCodeIsSuccessful => this == 1; bool get msgCodeIsSuccessful => this == 1;
} }

View File

@ -10,6 +10,11 @@ class RefreshLockListInfoDataEvent {
RefreshLockListInfoDataEvent(); RefreshLockListInfoDataEvent();
} }
///
class RefreshLockDetailInfoDataEvent {
RefreshLockDetailInfoDataEvent();
}
/// ///
class RefreshCheckInStaffListDataEvent { class RefreshCheckInStaffListDataEvent {
RefreshCheckInStaffListDataEvent(); RefreshCheckInStaffListDataEvent();

View File

@ -19,6 +19,8 @@ const isAgreePrivacy = "isAgreePrivacy"; //是否同意隐私协议弹窗
const isAgreePosition = "isAgreePosition"; // const isAgreePosition = "isAgreePosition"; //
const isAgreeCamera = "isAgreeCamera"; /// const isAgreeCamera = "isAgreeCamera"; ///
const isShowUpdateVersion = "isShowUpdateVersion"; //
const saveUserLoginData = "userLoginData"; const saveUserLoginData = "userLoginData";
class Storage { class Storage {

View File

@ -0,0 +1,133 @@
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart';
import '../network/api_repository.dart';
import '../tools/storage.dart';
import '../translations/trans_lib.dart';
import 'versionUndate_entity.dart';
class VersionUndateTool {
static VersionUndateTool? _manager;
VersionUndateTool._init(){
// _initLoadUpdateVersionData();
}
static VersionUndateTool? shareManager() {
_manager ??= VersionUndateTool._init();
_manager!._initLoadUpdateVersionData();
return _manager;
}
factory VersionUndateTool() => shareManager()!;
VersionUndateTool? get manager => shareManager();
void _initLoadUpdateVersionData() {
getVersionData();
}
//
void getVersionData() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
String brandName = '';
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
Get.log('androidInfo.manufacturer:${androidInfo.manufacturer}'
'androidInfo.device:${androidInfo.device}'
'androidInfo.model:${androidInfo.model}'
'androidInfo.product:${androidInfo.product}'
'androidInfo.version.release:${androidInfo.version.release}'
'androidInfo.version.sdkInt:${androidInfo.version.sdkInt}'
'androidInfo.version.securityPatch:${androidInfo.version.securityPatch}'
'androidInfo.version.incremental:${androidInfo.version.incremental}'
'androidInfo.version.codename:${androidInfo.version.codename}'
'androidInfo.version.baseOS:${androidInfo.version.baseOS}'
'androidInfo.board:${androidInfo.board}'
'androidInfo.bootloader:${androidInfo.bootloader}');
brandName = androidInfo.manufacturer;
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
brandName = iosInfo.systemName!;
}
PackageInfo packageInfo = await PackageInfo.fromPlatform();
var version = packageInfo.version;
Get.log("updateGetversion:${version}");
var entity = await ApiRepository.to.getVersionData(
brandName: brandName,
currentVersion: version,
);
if (entity.errorCode! == 0) {
if(entity.data!.isUpdate! == 1){
showUpdateAlertDialog(entity);
}
}
}
void showUpdateAlertDialog(VersionUndateEntity versionUndateEntity) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
content: Column(
children: [
Container(
// color: AppColors.mainColor,
alignment: Alignment.topCenter,
height: 50.h,
child: Text('版本更新', style: TextStyle(fontSize: 28.sp, color: Colors.blue),)
),
Container(
padding: EdgeInsets.only(left:20.w, right: 20.w, top: 10.h),
alignment: Alignment.centerLeft,
child: Text(versionUndateEntity.data!.description!, textAlign:TextAlign.start, style: TextStyle(fontSize: 20.sp))
),
],
),
actions: versionUndateEntity.data!.isForceUpdate == 0 ?
[
CupertinoDialogAction(
child: Text("下次再说"),
onPressed: () {
Navigator.pop(context);
Storage.setString(isShowUpdateVersion, isShowUpdateVersion);
},
),
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () async {
if (await canLaunch(versionUndateEntity.data!.appDownloadUrl!)) {
await launch(versionUndateEntity.data!.appDownloadUrl!);
} else {
throw 'Could not launch ${versionUndateEntity.data!.appDownloadUrl}';
}
},
),
]:
[
CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () async {
if (await canLaunch(versionUndateEntity.data!.appDownloadUrl!)) {
await launch(versionUndateEntity.data!.appDownloadUrl!);
} else {
throw 'Could not launch ${versionUndateEntity.data!.appDownloadUrl}';
}
},
),
],
);
},
);
}
}

View File

@ -0,0 +1,56 @@
class VersionUndateEntity {
int? errorCode;
String? description;
String? errorMsg;
Data? data;
VersionUndateEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
VersionUndateEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
int? isUpdate;
String? appDownloadUrl;
String? description;
int? isForceUpdate;
Data(
{this.isUpdate,
this.appDownloadUrl,
this.description,
this.isForceUpdate});
Data.fromJson(Map<String, dynamic> json) {
isUpdate = json['isUpdate'];
appDownloadUrl = json['appDownloadUrl'];
description = json['description'];
isForceUpdate = json['isForceUpdate'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['isUpdate'] = isUpdate;
data['appDownloadUrl'] = appDownloadUrl;
data['description'] = description;
data['isForceUpdate'] = isForceUpdate;
return data;
}
}