优化蓝牙协议,先扫描再连接然后才是发送

This commit is contained in:
魏少阳 2024-01-06 16:26:13 +08:00
parent 8f519adede
commit 11aeca1f31
18 changed files with 446 additions and 131 deletions

View File

@ -67,13 +67,15 @@ class BlueManage {
/// ///
void startScan({List<Uuid>? idList}) { void startScan({List<Uuid>? idList}) {
// List<Service>? list = _flutterReactiveBle!.getDiscoveredServices("deviceId").then((value));
scanDevices.clear(); scanDevices.clear();
_scanSubscription = _flutterReactiveBle!.scanForDevices(withServices: idList ?? []).listen((device) { _scanSubscription = _flutterReactiveBle!.scanForDevices(withServices:[]).listen((device) {
// //
if (device.name.isEmpty) { if (device.name.isEmpty) {
return; return;
} }
// print("startScanDevice:$device"); print("startScanDevice:$device");
if (((device.serviceUuids.isNotEmpty ? device.serviceUuids[0] : "").toString().contains("758824")) && (device.rssi >= -100)) { if (((device.serviceUuids.isNotEmpty ? device.serviceUuids[0] : "").toString().contains("758824")) && (device.rssi >= -100)) {
// id相同的元素 // id相同的元素
final knownDeviceIndex = scanDevices.indexWhere((d) => d.id == device.id); final knownDeviceIndex = scanDevices.indexWhere((d) => d.id == device.id);
@ -91,8 +93,12 @@ class BlueManage {
} }
/// ///
Future<void> bludSendData(String deviceName, ConnectStateCallBack stateCallBack) async { Future<void> bludSendData(String deviceName, ConnectStateCallBack stateCallBack, {bool isAddEquipment = false}) async {
if(deviceConnectionState != DeviceConnectionState.connected){ if(deviceConnectionState != DeviceConnectionState.connected){
if(isAddEquipment == false){
startScan();
}
_connect(deviceName, (state){ _connect(deviceName, (state){
stateCallBack(deviceConnectionState!); stateCallBack(deviceConnectionState!);
}); });
@ -109,6 +115,7 @@ class BlueManage {
if (knownDeviceIndex >= 0) { if (knownDeviceIndex >= 0) {
// //
connectDeviceMacAddress = scanDevices[knownDeviceIndex].id; connectDeviceMacAddress = scanDevices[knownDeviceIndex].id;
stopScan();
} else { } else {
// -1 5 // -1 5
var index = 0; var index = 0;
@ -116,9 +123,10 @@ class BlueManage {
Timer.periodic(const Duration(milliseconds: 1000), (timer) { Timer.periodic(const Duration(milliseconds: 1000), (timer) {
/// ///
// print("timer index0:$index"); // print("timer index0:$index");
if(index >= 4){ if(index >= 9){
// 5 // 5
completer.complete(); completer.complete();
stopScan();
timer.cancel(); timer.cancel();
connectDeviceMacAddress = ""; connectDeviceMacAddress = "";
// deviceConnectionState = DeviceConnectionState.disconnected; // deviceConnectionState = DeviceConnectionState.disconnected;
@ -130,6 +138,7 @@ class BlueManage {
if (knownDeviceIndex >= 0) { if (knownDeviceIndex >= 0) {
// //
completer.complete(); completer.complete();
stopScan();
timer.cancel(); timer.cancel();
// print("timer index2:$index"); // print("timer index2:$index");
connectDeviceMacAddress = scanDevices[knownDeviceIndex].id; connectDeviceMacAddress = scanDevices[knownDeviceIndex].id;
@ -149,7 +158,7 @@ class BlueManage {
return; return;
} }
_currentConnectionStream = _flutterReactiveBle!.connectToDevice(id: connectDeviceMacAddress, connectionTimeout: const Duration(seconds: 10)).listen((connectionStateUpdate) async { _currentConnectionStream = _flutterReactiveBle!.connectToDevice(id: connectDeviceMacAddress, connectionTimeout: const Duration(seconds: 5)).listen((connectionStateUpdate) async {
// //
deviceConnectionState = connectionStateUpdate.connectionState; deviceConnectionState = connectionStateUpdate.connectionState;
print('deviceConnectionState:$deviceConnectionState connectionStateUpdate.connectionState:${connectionStateUpdate.connectionState}'); print('deviceConnectionState:$deviceConnectionState connectionStateUpdate.connectionState:${connectionStateUpdate.connectionState}');
@ -181,9 +190,16 @@ class BlueManage {
// , // ,
var allData = <int>[]; var allData = <int>[];
//
var lastTimeData = <int>[];
int? dataLen; int? dataLen;
_subScribeToCharacteristic(QualifiedCharacteristic characteristic) { _subScribeToCharacteristic(QualifiedCharacteristic characteristic) {
_flutterReactiveBle!.subscribeToCharacteristic(characteristic).listen((data) { _flutterReactiveBle!.subscribeToCharacteristic(characteristic).listen((data) {
if(data == lastTimeData){
return;
}else{
lastTimeData = data;
}
// code to handle incoming data // code to handle incoming data
// print("subscribeToCharacteristic: deviceId = ${characteristic.deviceId} characteristicId =${characteristic.characteristicId}---上报来的数据data = $data"); // print("subscribeToCharacteristic: deviceId = ${characteristic.deviceId} characteristicId =${characteristic.characteristicId}---上报来的数据data = $data");
if ((data[0] == 0xEF) && (data[1] == 0x01) && (data[2] == 0xEE) && (data[3] == 0x02)) { if ((data[0] == 0xEF) && (data[1] == 0x01) && (data[2] == 0xEE) && (data[3] == 0x02)) {
@ -277,15 +293,21 @@ class BlueManage {
} }
// //
// Future<void> stopScan() async { Future<void> stopScan() async {
// await _scanSubscription?.cancel(); if(_scanSubscription != null){
// _scanSubscription = null; _scanSubscription?.cancel();
// } _scanSubscription = null;
}
}
// //
Future<void> disconnect(String deviceMAC) async { Future<void> disconnect(String deviceMAC) async {
try { try {
_currentConnectionStream?.cancel(); if(_currentConnectionStream != null){
_currentConnectionStream?.cancel();
_currentConnectionStream = null;
}
print('disconnecting to device: $deviceMAC'); print('disconnecting to device: $deviceMAC');
} on Exception catch (e, _) { } on Exception catch (e, _) {
print("Error disconnecting from a device: $e"); print("Error disconnecting from a device: $e");

View File

@ -197,13 +197,13 @@ Future _setCommonServices() async {
void openBlueScan() { void openBlueScan() {
if (Platform.isIOS) { if (Platform.isIOS) {
print("有蓝牙权限开始扫描"); print("有蓝牙权限开始扫描");
startScanAction(); // startScanAction();
} else { } else {
getMicrophonePermission().then((value) { getMicrophonePermission().then((value) {
if (value) { if (value) {
// //
print("有蓝牙权限开始扫描"); print("有蓝牙权限开始扫描");
startScanAction(); // startScanAction();
} else { } else {
// //
openAppSettings(); //app系统设置 openAppSettings(); //app系统设置

View File

@ -2,6 +2,7 @@ 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_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:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_deletUser.dart'; import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
@ -73,6 +74,8 @@ class LockSetLogic extends BaseGetXController {
case 0x00: case 0x00:
// //
print("${reply.commandType}解析成功"); print("${reply.commandType}解析成功");
dismissEasyLoading();
cancelBlueConnetctToastTimer();
deletKeyData(); deletKeyData();
break; break;
case 0x06: case 0x06:
@ -96,19 +99,22 @@ class LockSetLogic extends BaseGetXController {
token: tokenData); token: tokenData);
break; break;
case 0x07: case 0x07:
// //
print("${reply.commandType}用户无权限"); print("${reply.commandType!.typeValue} 用户无权限");
dismissEasyLoading();
showToast("用户无权限");
break; break;
case 0x09: case 0x09:
// //
print("${reply.commandType}权限校验错误"); print("${reply.commandType!.typeValue} ");
dismissEasyLoading();
showToast("权限校验错误");
break; break;
default: default:
// //
print("${reply.commandType}失败"); print("${reply.commandType!.typeValue} 失败");
dismissEasyLoading();
showToast("删除失败");
break; break;
} }
} }
@ -127,6 +133,8 @@ class LockSetLogic extends BaseGetXController {
case 0x00: case 0x00:
// //
print("${reply.commandType!.typeValue} 数据解析成功"); print("${reply.commandType!.typeValue} 数据解析成功");
dismissEasyLoading();
cancelBlueConnetctToastTimer();
deletLockInfoData(); deletLockInfoData();
break; break;
case 0x06: case 0x06:
@ -153,17 +161,20 @@ class LockSetLogic extends BaseGetXController {
case 0x07: case 0x07:
// //
print("${reply.commandType!.typeValue} 用户无权限"); print("${reply.commandType!.typeValue} 用户无权限");
dismissEasyLoading();
showToast("用户无权限");
break; break;
case 0x09: case 0x09:
// //
print("${reply.commandType!.typeValue} 权限校验错误"); print("${reply.commandType!.typeValue} ");
dismissEasyLoading();
showToast("权限校验错误");
break; break;
default: default:
// //
print("${reply.commandType!.typeValue} 失败"); print("${reply.commandType!.typeValue} 失败");
dismissEasyLoading();
showToast("权限校验错误");
break; break;
} }
} }
@ -257,13 +268,12 @@ class LockSetLogic extends BaseGetXController {
// //
Future<void> deletUserAction() async { Future<void> deletUserAction() async {
showEasyLoading(); showEasyLoading();
showBlueConnetctToastTimer((){ showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: (){
dismissEasyLoading();
showDeletAlertTipDialog(Get.context!);
}); });
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async { BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async {
cancelBlueConnetctToastTimer();
if (connectionState == DeviceConnectionState.connected) { if (connectionState == DeviceConnectionState.connected) {
dismissEasyLoading();
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -287,6 +297,7 @@ class LockSetLogic extends BaseGetXController {
token: getTokenList); token: getTokenList);
} else if (connectionState == DeviceConnectionState.disconnected) { } else if (connectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading(); dismissEasyLoading();
cancelBlueConnetctToastTimer();
showDeletAlertTipDialog(Get.context!); showDeletAlertTipDialog(Get.context!);
} }
}); });
@ -295,13 +306,12 @@ class LockSetLogic extends BaseGetXController {
// //
Future<void> factoryDataResetAction() async { Future<void> factoryDataResetAction() async {
showEasyLoading(); showEasyLoading();
showBlueConnetctToastTimer((){ showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: (){
dismissEasyLoading();
showDeletAlertTipDialog(Get.context!);
}); });
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async { BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async {
cancelBlueConnetctToastTimer();
if (connectionState == DeviceConnectionState.connected) { if (connectionState == DeviceConnectionState.connected) {
dismissEasyLoading();
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -321,6 +331,7 @@ class LockSetLogic extends BaseGetXController {
token: getTokenList); token: getTokenList);
} else if (connectionState == DeviceConnectionState.disconnected) { } else if (connectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading(); dismissEasyLoading();
cancelBlueConnetctToastTimer();
showDeletAlertTipDialog(Get.context!); showDeletAlertTipDialog(Get.context!);
} }
}); });
@ -355,9 +366,7 @@ class LockSetLogic extends BaseGetXController {
// () // ()
Future<void> sendBurglarAlarm(int type) async { Future<void> sendBurglarAlarm(int type) async {
showEasyLoading(); showEasyLoading();
showBlueConnetctToastTimer((){ showBlueConnetctToastTimer();
});
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async { BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState connectionState) async {
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
if (connectionState == DeviceConnectionState.connected) { if (connectionState == DeviceConnectionState.connected) {
@ -437,7 +446,8 @@ class LockSetLogic extends BaseGetXController {
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = ""; BlueManage().connectDeviceMacAddress = "";
Get.offAllNamed(Routers.starLockMain); eventBus.fire(RefreshLockListInfoDataEvent());
Get.close(2);
} }
} }
@ -449,11 +459,15 @@ class LockSetLogic extends BaseGetXController {
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
BlueManage().connectDeviceMacAddress = ""; BlueManage().connectDeviceMacAddress = "";
Get.offAllNamed(Routers.starLockMain); eventBus.fire(RefreshLockListInfoDataEvent());
Get.close(2);
// Get.offAllNamed(Routers.starLockMain);
} }
} }
void showDeletPasswordAlertDialog(BuildContext context) { void showDeletPasswordAlertDialog(BuildContext context) {
//
BlueManage().startScan();
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -470,6 +484,8 @@ class LockSetLogic extends BaseGetXController {
checkLoginPassword(); checkLoginPassword();
}, },
cancelClick: () { cancelClick: () {
//
BlueManage().stopScan();
Get.back(); Get.back();
}, },
); );
@ -485,25 +501,83 @@ class LockSetLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
Get.back(); Get.back();
if(state.currentDeviceUUid.value.isEmpty){ if(BlueManage().deviceConnectionState == DeviceConnectionState.connected){
// //
showDeletAlertTipDialog(Get.context!); //
}else{ if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) {
// //
if(state.currentDeviceUUid.value[31] == "1"){ factoryDataResetAction();
// } else {
if (state.lockSetInfoData.value.lockBasicInfo!.isLockOwner == 1) { //
// deletUserAction();
factoryDataResetAction();
} else {
//
deletUserAction();
}
}else if(state.currentDeviceUUid.value[31] == "0"){
//
showDeletAlertTipDialog(Get.context!);
} }
return;
} }
//
if (state.currentDeviceUUid.value.isNotEmpty) {
//
BlueManage().stopScan();
deletLockLogic();
} else {
// 5
var index = 0;
showEasyLoading();
state.deletWaitScanCompleter = Completer();
state.deletWaitScanTimer = Timer.periodic(const Duration(milliseconds: 1000), (timer) {
///
// print("timer index0:$index");
if(index >= 5){
// 10,
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
BlueManage().stopScan();
dismissEasyLoading();
showDeletAlertTipDialog(Get.context!);
}else{
//
if (state.currentDeviceUUid.isNotEmpty) {
//
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null){
state.deletWaitScanCompleter!.complete();
}
BlueManage().stopScan();
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 {
//
deletUserAction();
}
}else if(state.currentDeviceUUid.value[31] == "0"){
//
showDeletAlertTipDialog(Get.context!);
} }
} }

View File

@ -1,7 +1,9 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.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/blue/blue_manage.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
@ -814,6 +816,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
super.didPop(); super.didPop();
print("lockSet===didPop"); print("lockSet===didPop");
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null && !state.deletWaitScanCompleter!.isCompleted){
state.deletWaitScanCompleter!.complete();
}
BlueManage().stopScan();
} }
/// ///
@ -821,6 +831,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
void didPopNext() { void didPopNext() {
super.didPopNext(); super.didPopNext();
print("lockSet===didPopNext"); print("lockSet===didPopNext");
} }
/// ///
@ -829,5 +840,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
super.didPushNext(); super.didPushNext();
print("lockSet===didPushNext"); print("lockSet===didPushNext");
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if(state.deletWaitScanTimer != null){
state.deletWaitScanTimer!.cancel();
}
if(state.deletWaitScanCompleter != null && !state.deletWaitScanCompleter!.isCompleted){
state.deletWaitScanCompleter!.complete();
}
// BlueManage().stopScan();
} }
} }

View File

@ -1,4 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'lockSetInfo_entity.dart'; import 'lockSetInfo_entity.dart';
@ -25,6 +27,9 @@ class LockSetState {
var settingUpSupportFeatures = 0; var settingUpSupportFeatures = 0;
Completer? deletWaitScanCompleter;
Timer? deletWaitScanTimer;
LockSetState() { LockSetState() {
Map map = Get.arguments; Map map = Get.arguments;
lockId.value = map["lockId"]; lockId.value = map["lockId"];

View File

@ -1,17 +1,10 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
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:flutter_screenutil/flutter_screenutil.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:star_lock/blue/io_protocol/io_editUser.dart';
import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/tools/toast.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
@ -76,7 +69,21 @@ class LockDetailLogic extends BaseGetXController {
case 0x00: case 0x00:
// //
print("${reply.commandType}数据解析成功"); print("${reply.commandType}数据解析成功");
_showFullScreenOverlay(Get.context!); // _showFullScreenOverlay(Get.context!);
state.iSClosedUnlockSuccessfulPopup.value = true;
if(state.closedUnlockSuccessfulTimer != null){
state.closedUnlockSuccessfulTimer!.cancel();
state.closedUnlockSuccessfulTimer = null;
}
// 3
state.closedUnlockSuccessfulTimer = Timer.periodic(3.seconds, (timer) {
state.iSClosedUnlockSuccessfulPopup.value = false;
timer.cancel();
});
// Future.delayed(const Duration(seconds: 3), () {
// state.iSClosedUnlockSuccessfulPopup.value = false;
// });
// //
int power = reply.data[7]; int power = reply.data[7];
@ -350,7 +357,7 @@ class LockDetailLogic extends BaseGetXController {
// () // ()
Future<void> addUserConnectBlue() async { Future<void> addUserConnectBlue() async {
showBlueConnetctToastTimer(() { showBlueConnetctToastTimer(action:() {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset(); // state.animationController.reset();
// state.animationController.forward(); // state.animationController.forward();
@ -401,7 +408,7 @@ class LockDetailLogic extends BaseGetXController {
// //
Future<void> openDoorAction() async { Future<void> openDoorAction() async {
showBlueConnetctToastTimer(() { showBlueConnetctToastTimer(action:() {
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
// state.animationController.reset(); // state.animationController.reset();
// state.animationController.forward(); // state.animationController.forward();
@ -584,9 +591,7 @@ class LockDetailLogic extends BaseGetXController {
// //
void getLockRecordLastUploadDataTime() async { void getLockRecordLastUploadDataTime() async {
LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to.getLockRecordLastUploadDataTime(lockId: state.keyInfos.value.lockId.toString());
.getLockRecordLastUploadDataTime(
lockId: state.keyInfos.value.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
senderReferEventRecordTime(entity.data!.operateDate! ~/ 1000); senderReferEventRecordTime(entity.data!.operateDate! ~/ 1000);
} }
@ -650,11 +655,10 @@ class LockDetailLogic extends BaseGetXController {
// //
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){
return; state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back();
} }
state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back();
}); });
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
@ -663,11 +667,10 @@ class LockDetailLogic extends BaseGetXController {
builder: (BuildContext context) { builder: (BuildContext context) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
if(state.iSClosedUnlockSuccessfulPopup.value == true){ if(state.iSClosedUnlockSuccessfulPopup.value != true){
return; state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back();
} }
state.iSClosedUnlockSuccessfulPopup.value = true;
Get.back();
}, },
child: Container( child: Container(
height: MediaQuery.of(context).size.height, height: MediaQuery.of(context).size.height,
@ -724,14 +727,13 @@ class LockDetailLogic extends BaseGetXController {
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady
super.onReady(); super.onReady();
print("onReady()");
_initReplySubscription(); _initReplySubscription();
_initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction(); _initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
_scanListDiscoveredDeviceSubscriptionAction(); _scanListDiscoveredDeviceSubscriptionAction();
Future.delayed(const Duration(seconds: 1)).then((value) { // Future.delayed(const Duration(seconds: 1)).then((value) {
//
}); // });
} }
@override @override
@ -739,8 +741,6 @@ class LockDetailLogic extends BaseGetXController {
// TODO: implement onInit // TODO: implement onInit
super.onInit(); super.onInit();
print("lockDetail_onInit()");
// //
// connectBlue(); // connectBlue();
} }
@ -748,7 +748,6 @@ class LockDetailLogic extends BaseGetXController {
@override @override
void onClose() { void onClose() {
// TODO: implement onClose // TODO: implement onClose
print("锁详情界面销毁了");
_replySubscription.cancel(); _replySubscription.cancel();
_lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!.cancel(); _lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!.cancel();

View File

@ -3,6 +3,7 @@ import 'package:flutter/services.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:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:uuid/uuid.dart';
import '../../../appRouters.dart'; import '../../../appRouters.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
@ -69,16 +70,33 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Stack(
width: 1.sw, children: [
height: 1.sh - ScreenUtil().statusBarHeight * 2, Container(
color: Colors.white, width: 1.sw,
child: Column( height: 1.sh - ScreenUtil().statusBarHeight * 2,
children: [ color: Colors.white,
topWidget(), child: Column(
Expanded(child: Obx(() => bottomWidget())) children: [
], topWidget(),
), Expanded(child: Obx(() => bottomWidget())),
],
),
),
Obx(() => Visibility(
visible: state.iSClosedUnlockSuccessfulPopup.value,
child: GestureDetector(
onTap: (){
state.iSClosedUnlockSuccessfulPopup.value = false;
},
child: Container(
width: 1.sw,
height: 1.sh,
color: Colors.black.withOpacity(0.3),
child: _unlockSuccessWidget()),
),
))
]
); );
} }
@ -522,13 +540,13 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
height: 348.h, height: 348.h,
), ),
Positioned( Positioned(
top: ScreenUtil().screenHeight / 2 - 10.h, top: 1.sh / 2 - 70.h,
child: Column( child: Column(
children: [ children: [
Text( Text(
widget.lockListInfoItemEntity.lockAlias!, widget.lockListInfoItemEntity.lockAlias!,
style: TextStyle( style: TextStyle(
color: AppColors.placeholderTextColor, fontSize: 26.sp), color: AppColors.placeholderTextColor, fontSize: 24.sp),
), ),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
@ -536,7 +554,7 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
Text( Text(
getCurrentFormattedTime(), getCurrentFormattedTime(),
style: TextStyle( style: TextStyle(
color: AppColors.darkGrayTextColor, fontSize: 26.sp), color: AppColors.darkGrayTextColor, fontSize: 24.sp),
) )
], ],
)) ))
@ -565,8 +583,9 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
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.animationController.reset(); // state.animationController.reset();
// state.animationController.forward(); // state.animationController.forward();
// state.animationController.dispose(); // state.animationController.dispose();
@ -578,7 +597,7 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
@override @override
void didPush() { void didPush() {
super.didPush(); super.didPush();
print("LockDetailPage===didPush"); // print("LockDetailPage===didPush");
state.ifCurrentScreen.value = true; state.ifCurrentScreen.value = true;
} }
@ -586,7 +605,7 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
@override @override
void didPop() { void didPop() {
super.didPop(); super.didPop();
print("LockDetailPage===didPop"); // print("LockDetailPage===didPop");
state.ifCurrentScreen.value = false; state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
state.animationController.reset(); state.animationController.reset();
@ -599,14 +618,14 @@ class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStat
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();
state.animationController.reset(); state.animationController.reset();

View File

@ -1,4 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -28,6 +30,7 @@ class LockDetailState {
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var iSClosedUnlockSuccessfulPopup = false.obs; // var iSClosedUnlockSuccessfulPopup = false.obs; //
Timer? closedUnlockSuccessfulTimer;
// //
late AnimationController animationController; late AnimationController animationController;

View File

@ -16,6 +16,7 @@ import 'package:amap_flutter_base/amap_flutter_base.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../tools/appRouteObserver.dart';
import '../../../../tools/titleAppBar.dart'; import '../../../../tools/titleAppBar.dart';
import '../../../../tools/toast.dart'; import '../../../../tools/toast.dart';
import '../../../../translations/trans_lib.dart'; import '../../../../translations/trans_lib.dart';
@ -28,7 +29,7 @@ class LockAddressGaoDePage extends StatefulWidget {
State<LockAddressGaoDePage> createState() => _LockAddressGaoDePageState(); State<LockAddressGaoDePage> createState() => _LockAddressGaoDePageState();
} }
class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteAware{
final logic = Get.put(LockAddressGaoDeLogic()); final logic = Get.put(LockAddressGaoDeLogic());
final state = Get.find<LockAddressGaoDeLogic>().state; final state = Get.find<LockAddressGaoDeLogic>().state;
@ -361,14 +362,55 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
location.setLocationOption(locationOption); location.setLocationOption(locationOption);
} }
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override @override
void dispose() { void dispose() {
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose(); super.dispose();
BlueManage().disconnect(BlueManage().connectDeviceMacAddress); BlueManage().disconnect(BlueManage().connectDeviceMacAddress);
location.stopLocation(); location.stopLocation();
location.destroy(); location.destroy();
print("地图界面销毁了"); Get.log("地图界面销毁了");
} }
///
@override
void didPush() {
super.didPush();
}
///
@override
void didPop() {
super.didPop();
}
///
@override
void didPopNext() {
super.didPopNext();
}
///
@override
void didPushNext() {
super.didPushNext();
location.stopLocation();
location.destroy();
}
} }

View File

@ -35,7 +35,7 @@ class NearbyLockLogic extends BaseGetXController {
dismissEasyLoading(); dismissEasyLoading();
// showBlueConnetctToast(); // showBlueConnetctToast();
} }
}); }, isAddEquipment: true);
} }
// //
@ -69,6 +69,7 @@ class NearbyLockLogic extends BaseGetXController {
var saveStrList = changeIntListToStringList(publicKey); var saveStrList = changeIntListToStringList(publicKey);
Storage.setStringList(saveBluePublicKey, saveStrList); Storage.setStringList(saveBluePublicKey, saveStrList);
//
IoSenderManage.getPrivateKey( IoSenderManage.getPrivateKey(
lockId: BlueManage().connectDeviceName, lockId: BlueManage().connectDeviceName,
keyID: "1", keyID: "1",
@ -322,8 +323,7 @@ class NearbyLockLogic extends BaseGetXController {
Future<void> _getStarLockStatus() async { Future<void> _getStarLockStatus() async {
// print("connectDeviceMacAddress:${BlueManage().connectDeviceMacAddress} connectDeviceName:${BlueManage().connectDeviceName}"); // print("connectDeviceMacAddress:${BlueManage().connectDeviceMacAddress} connectDeviceName:${BlueManage().connectDeviceName}");
// //
BlueManage().bludSendData(BlueManage().connectDeviceName, BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState state) async {
(DeviceConnectionState state) async {
if (state == DeviceConnectionState.connected) { if (state == DeviceConnectionState.connected) {
dismissEasyLoading(); dismissEasyLoading();
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
@ -341,7 +341,7 @@ class NearbyLockLogic extends BaseGetXController {
} else if (state == DeviceConnectionState.disconnected) { } else if (state == DeviceConnectionState.disconnected) {
dismissEasyLoading(); dismissEasyLoading();
} }
}); }, isAddEquipment: true);
} }
late StreamSubscription<List<DiscoveredDevice>>_scanListDiscoveredDeviceSubscription; late StreamSubscription<List<DiscoveredDevice>>_scanListDiscoveredDeviceSubscription;
@ -357,6 +357,14 @@ class NearbyLockLogic extends BaseGetXController {
}); });
} }
void startScanBlueList(){
BlueManage().startScan();
}
void stopScanBlueList(){
BlueManage().stopScan();
}
@override @override
void onReady() { void onReady() {
// TODO: implement onReady // TODO: implement onReady
@ -380,6 +388,5 @@ class NearbyLockLogic extends BaseGetXController {
super.onClose(); super.onClose();
_replySubscription.cancel(); _replySubscription.cancel();
_scanListDiscoveredDeviceSubscription.cancel(); _scanListDiscoveredDeviceSubscription.cancel();
// BlueManage().stopScan();
} }
} }

View File

@ -9,6 +9,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../appRouters.dart'; import '../../../appRouters.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
import '../../../tools/appRouteObserver.dart';
import '../../../tools/titleAppBar.dart'; import '../../../tools/titleAppBar.dart';
import '../../../translations/trans_lib.dart'; import '../../../translations/trans_lib.dart';
import 'nearbyLock_logic.dart'; import 'nearbyLock_logic.dart';
@ -20,7 +21,7 @@ class NearbyLockPage extends StatefulWidget {
State<NearbyLockPage> createState() => _NearbyLockPageState(); State<NearbyLockPage> createState() => _NearbyLockPageState();
} }
class _NearbyLockPageState extends State<NearbyLockPage> { class _NearbyLockPageState extends State<NearbyLockPage> with RouteAware {
final logic = Get.put(NearbyLockLogic()); final logic = Get.put(NearbyLockLogic());
final state = Get.find<NearbyLockLogic>().state; final state = Get.find<NearbyLockLogic>().state;
@ -122,10 +123,59 @@ class _NearbyLockPageState extends State<NearbyLockPage> {
); );
} }
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override @override
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose(); super.dispose();
Get.log("NearbyLockLogic dispose()");
}
///
@override
void didPush() {
super.didPush();
state.ifCurrentScreen.value = true;
logic.startScanBlueList();
}
///
@override
void didPop() {
super.didPop();
state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer();
logic.stopScanBlueList();
}
///
@override
void didPopNext() {
super.didPopNext();
state.ifCurrentScreen.value = true;
logic.startScanBlueList();
}
///
@override
void didPushNext() {
super.didPushNext();
state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer();
logic.stopScanBlueList();
} }
} }

View File

@ -7,6 +7,7 @@ import 'package:get/get.dart';
class NearbyLockState { class NearbyLockState {
RxList<DiscoveredDevice> devices = <DiscoveredDevice>[].obs; RxList<DiscoveredDevice> devices = <DiscoveredDevice>[].obs;
var ifCurrentScreen = true.obs; // ,
var seletLockName = "".obs; var seletLockName = "".obs;
var timestampValue = 0; var timestampValue = 0;

View File

@ -51,6 +51,9 @@ class SaveLockLogic extends BaseGetXController {
print("添加用户数据解析成功"); print("添加用户数据解析成功");
state.lockUserNo = reply.data[47] + 1; state.lockUserNo = reply.data[47] + 1;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
bindBlueAdmin(); bindBlueAdmin();
break; break;
case 0x06: case 0x06:
@ -81,17 +84,17 @@ class SaveLockLogic extends BaseGetXController {
case 0x07: case 0x07:
// //
print("用户无权限"); print("用户无权限");
dismissEasyLoading();
break; break;
case 0x09: case 0x09:
// //
print("添加用户权限校验错误"); print("添加用户权限校验错误");
dismissEasyLoading();
break; break;
default: default:
// //
print("领锁失败"); print("领锁失败");
dismissEasyLoading();
break; break;
} }
} }
@ -106,11 +109,14 @@ class SaveLockLogic extends BaseGetXController {
// print("111111"); // print("111111");
// //
showEasyLoading(); showEasyLoading();
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState state) async { showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.saveBtnIsUsable.value = true;
});
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
// print("222222"); // print("222222");
if (state == DeviceConnectionState.connected){ if (deviceConnectionState == DeviceConnectionState.connected){
// print("333333"); // print("333333");
dismissEasyLoading();
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -140,10 +146,14 @@ class SaveLockLogic extends BaseGetXController {
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList token: getTokenList
); );
} else if (state == DeviceConnectionState.disconnected) { } else if (deviceConnectionState == DeviceConnectionState.disconnected) {
print("444444"); print("444444");
dismissEasyLoading(); dismissEasyLoading();
showBlueConnetctToast(); cancelBlueConnetctToastTimer();
state.saveBtnIsUsable.value = true;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
} }
}); });
} }
@ -192,10 +202,12 @@ class SaveLockLogic extends BaseGetXController {
featureSettingParams: state.featureSettingParams, featureSettingParams: state.featureSettingParams,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
BlueManage().disconnect(BlueManage().connectDeviceMacAddress);
eventBus.fire(RefreshLockListInfoDataEvent()); eventBus.fire(RefreshLockListInfoDataEvent());
Future.delayed(const Duration(milliseconds: 200), () { Get.close(5);
Get.offAllNamed(Routers.starLockMain); // Future.delayed(const Duration(milliseconds: 200), () {
}); // Get.offAllNamed(Routers.starLockMain);
// });
} }
} }

View File

@ -5,6 +5,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
import '../../../tools/appRouteObserver.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';
@ -17,7 +18,7 @@ class SaveLockPage extends StatefulWidget {
State<SaveLockPage> createState() => _SaveLockPageState(); State<SaveLockPage> createState() => _SaveLockPageState();
} }
class _SaveLockPageState extends State<SaveLockPage> { class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
final logic = Get.put(SaveLockLogic()); final logic = Get.put(SaveLockLogic());
final state = Get.find<SaveLockLogic>().state; final state = Get.find<SaveLockLogic>().state;
@ -101,7 +102,9 @@ class _SaveLockPageState extends State<SaveLockPage> {
bottom: 25.w bottom: 25.w
), ),
onClick: (){ onClick: (){
// Navigator.pop(context); if(state.saveBtnIsUsable.value == false){
return;
}
logic.addUserConnectBlue(); logic.addUserConnectBlue();
} }
), ),
@ -110,5 +113,54 @@ class _SaveLockPageState extends State<SaveLockPage> {
); );
} }
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
}
///
@override
void didPush() {
super.didPush();
state.ifCurrentScreen.value = true;
}
///
@override
void didPop() {
super.didPop();
state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer();
}
///
@override
void didPopNext() {
super.didPopNext();
state.ifCurrentScreen.value = true;
}
///
@override
void didPushNext() {
super.didPushNext();
state.ifCurrentScreen.value = false;
logic.cancelBlueConnetctToastTimer();
}
} }

View File

@ -17,6 +17,9 @@ class SaveLockState {
var featureSettingValue = ''; var featureSettingValue = '';
var featureSettingParams = []; var featureSettingParams = [];
var ifCurrentScreen = true.obs; // ,
var saveBtnIsUsable = true.obs; //
SaveLockState() { SaveLockState() {
aliName.value = BlueManage().connectDeviceName; aliName.value = BlueManage().connectDeviceName;
aliNameController.text = aliName.value; aliNameController.text = aliName.value;

View File

@ -63,8 +63,8 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
GestureDetector( GestureDetector(
onTap: () { onTap: () {
// Navigator.pushNamed(context, Routers.starLockLoginPage); // Navigator.pushNamed(context, Routers.starLockLoginPage);
Navigator.pushNamed( Get.back();
context, Routers.minePersonInfoPage); Get.toNamed(Routers.minePersonInfoPage);
}, },
child: Container( child: Container(
width: 105.w, width: 105.w,
@ -119,6 +119,7 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
// }), // }),
mineItem('images/mine/icon_mine_main_addLock.png', mineItem('images/mine/icon_mine_main_addLock.png',
TranslationLoader.lanKeys!.addDevice!.tr, () { TranslationLoader.lanKeys!.addDevice!.tr, () {
Get.back();
Get.toNamed(Routers.seletLockTypePage); Get.toNamed(Routers.seletLockTypePage);
}), }),
// mineItem('images/mine/icon_mine_main_gateway.png', // mineItem('images/mine/icon_mine_main_gateway.png',
@ -127,6 +128,7 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
// }), // }),
mineItem('images/mine/icon_mine_main_message.png', mineItem('images/mine/icon_mine_main_message.png',
TranslationLoader.lanKeys!.message!.tr, () { TranslationLoader.lanKeys!.message!.tr, () {
Get.back();
Get.toNamed(Routers.messageListPage); Get.toNamed(Routers.messageListPage);
// Toast.show(msg: "功能暂未开放"); // Toast.show(msg: "功能暂未开放");
}), }),
@ -137,14 +139,17 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
// }), // }),
mineItem('images/mine/icon_mine_main_set.png', mineItem('images/mine/icon_mine_main_set.png',
TranslationLoader.lanKeys!.set!.tr, () { TranslationLoader.lanKeys!.set!.tr, () {
Get.back();
Get.toNamed(Routers.mineSetPage); Get.toNamed(Routers.mineSetPage);
}), }),
mineItem('images/mine/icon_mine_main_vip.png', mineItem('images/mine/icon_mine_main_vip.png',
TranslationLoader.lanKeys!.valueAddedServices!.tr, () { TranslationLoader.lanKeys!.valueAddedServices!.tr, () {
Get.back();
Get.toNamed(Routers.valueAddedServicesPage); Get.toNamed(Routers.valueAddedServicesPage);
}), }),
mineItem('images/mine/icon_mine_main_about.png', mineItem('images/mine/icon_mine_main_about.png',
TranslationLoader.lanKeys!.about!.tr, () { TranslationLoader.lanKeys!.about!.tr, () {
Get.back();
Get.toNamed(Routers.abountPage); Get.toNamed(Routers.abountPage);
}), }),
], ],

View File

@ -373,8 +373,7 @@ class ApiRepository {
} }
// //
Future<LockListInfoEntity> checkLoginPassword( Future<LockListInfoEntity> checkLoginPassword({required String password}) async {
{required String password}) async {
final res = await apiProvider.checkLoginPassword(password); final res = await apiProvider.checkLoginPassword(password);
return LockListInfoEntity.fromJson(res.body); return LockListInfoEntity.fromJson(res.body);
} }

View File

@ -53,16 +53,18 @@ class BaseGetXController extends GetxController{
Timer? _timer; Timer? _timer;
// CancelableOperation? _operation; // CancelableOperation? _operation;
void showBlueConnetctToastTimer(Function? something) { void showBlueConnetctToastTimer({bool isShowBlueConnetctToast = true,Function? action}) {
if(_timer != null){ if(_timer != null){
_timer!.cancel(); _timer!.cancel();
_timer = null; _timer = null;
} }
_timer = Timer.periodic(15.seconds, (timer) { _timer = Timer.periodic(10.seconds, (timer) {
if(action != null) {
action();
}
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
showBlueConnetctToast(); if(isShowBlueConnetctToast == false){
if(something != null) { showBlueConnetctToast();
something();
} }
}); });
// _operation = CancelableOperation.fromFuture( // _operation = CancelableOperation.fromFuture(