Merge branch 'master_hyx'
This commit is contained in:
commit
4b6ae01e9a
@ -833,5 +833,12 @@
|
|||||||
"姓名":"Name",
|
"姓名":"Name",
|
||||||
"发送":"Send",
|
"发送":"Send",
|
||||||
"请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct",
|
"请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct",
|
||||||
"传输期间请勿离开当前页面":"Do not leave the current page during transfer"
|
"传输期间请勿离开当前页面":"Do not leave the current page during transfer",
|
||||||
|
"机型": "models",
|
||||||
|
"硬件版本": "Hardware version",
|
||||||
|
"固件版本": "Firmware version",
|
||||||
|
"手动升级": "Manual upgrade",
|
||||||
|
"设备连接中...": "Device Connecting...",
|
||||||
|
"升级过程中无法开锁,请先开锁后再升级": "The lock cannot be unlocked during the upgrade, please unlock the lock before upgrading",
|
||||||
|
"钥匙无效": "The key is invalid"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -861,5 +861,12 @@
|
|||||||
"姓名":"姓名",
|
"姓名":"姓名",
|
||||||
"发送":"发送",
|
"发送":"发送",
|
||||||
"请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确",
|
"请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确",
|
||||||
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面"
|
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面",
|
||||||
|
"机型": "机型",
|
||||||
|
"硬件版本": "硬件版本",
|
||||||
|
"固件版本": "固件版本",
|
||||||
|
"手动升级": "手动升级",
|
||||||
|
"设备连接中...": "设备连接中...",
|
||||||
|
"升级过程中无法开锁,请先开锁后再升级": "升级过程中无法开锁,请先开锁后再升级",
|
||||||
|
"钥匙无效": "钥匙无效"
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -280,6 +280,17 @@ class BlueManage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String listStr = scanDevices
|
||||||
|
// // .where((element) =>
|
||||||
|
// // element.advertisementData.advName == 'TMH_dc8f928369ed')
|
||||||
|
// .map((e) => 'advName:${e.advertisementData.advName} '
|
||||||
|
// 'serviceUuids:${e.advertisementData.serviceUuids} '
|
||||||
|
// '是否被重置:${e.advertisementData.serviceUuids[0].toString()[31]}')
|
||||||
|
// .join(',')
|
||||||
|
// .toString();
|
||||||
|
// AppLog.log('--->扫描到的设备 ${listStr} ');
|
||||||
|
|
||||||
scanDevicesCallBack(scanDevices);
|
scanDevicesCallBack(scanDevices);
|
||||||
// EventBusManager().eventBusFir(scanDevices);
|
// EventBusManager().eventBusFir(scanDevices);
|
||||||
// FlutterBluePlus.stopScan();
|
// FlutterBluePlus.stopScan();
|
||||||
@ -364,7 +375,7 @@ class BlueManage {
|
|||||||
(d.device.platformName == deviceName) ||
|
(d.device.platformName == deviceName) ||
|
||||||
(d.advertisementData.advName == deviceName));
|
(d.advertisementData.advName == deviceName));
|
||||||
|
|
||||||
ScanResult? scanResult;//使用局部变量防止出现缓存
|
ScanResult? scanResult; //使用局部变量防止出现缓存
|
||||||
if (knownDeviceIndex >= 0) {
|
if (knownDeviceIndex >= 0) {
|
||||||
// 存在的时候赋值
|
// 存在的时候赋值
|
||||||
connectDeviceMacAddress =
|
connectDeviceMacAddress =
|
||||||
@ -381,7 +392,7 @@ class BlueManage {
|
|||||||
}
|
}
|
||||||
// AppLog.log("1 connectDeviceId:$connectDeviceMacAddress connectDeviceName:$connectDeviceName");
|
// AppLog.log("1 connectDeviceId:$connectDeviceMacAddress connectDeviceName:$connectDeviceName");
|
||||||
// stopScan();
|
// stopScan();
|
||||||
if (scanResult == null ||connectDeviceMacAddress.isEmpty) {
|
if (scanResult == null || connectDeviceMacAddress.isEmpty) {
|
||||||
// connectStateCallBack(BluetoothConnectionState.disconnected!);
|
// connectStateCallBack(BluetoothConnectionState.disconnected!);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -90,7 +90,7 @@ abstract class Reply{
|
|||||||
case 0x0e:
|
case 0x0e:
|
||||||
// 钥匙已存在
|
// 钥匙已存在
|
||||||
showErrorMessage("钥匙已存在");
|
showErrorMessage("钥匙已存在");
|
||||||
AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙无效");
|
AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙已存在");
|
||||||
break;
|
break;
|
||||||
case 0x0f:
|
case 0x0f:
|
||||||
// 用户已存在
|
// 用户已存在
|
||||||
@ -124,7 +124,7 @@ abstract class Reply{
|
|||||||
break;
|
break;
|
||||||
case 0xff:
|
case 0xff:
|
||||||
// 异常,未知错误
|
// 异常,未知错误
|
||||||
AppLog.log("$logTag ${commandType!.typeName} 0xff");
|
AppLog.log("$logTag ${commandType!.typeName} 0xff 异常,未知错误");
|
||||||
showErrorMessage("异常,未知错误");
|
showErrorMessage("异常,未知错误");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -47,6 +47,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
|||||||
logic.checkNext(state.emailOrPhoneController);
|
logic.checkNext(state.emailOrPhoneController);
|
||||||
state.pwdController.text = data['pwd'];
|
state.pwdController.text = data['pwd'];
|
||||||
logic.checkNext(state.pwdController);
|
logic.checkNext(state.pwdController);
|
||||||
|
setState(() {});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@ -223,6 +223,7 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
|
|||||||
logic.checkNext(state.emailOrPhoneController);
|
logic.checkNext(state.emailOrPhoneController);
|
||||||
state.pwdController.text = data['pwd'];
|
state.pwdController.text = data['pwd'];
|
||||||
logic.checkNext(state.pwdController);
|
logic.checkNext(state.pwdController);
|
||||||
|
setState(() {});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
|
|||||||
@ -32,7 +32,8 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
|
|
||||||
// 监听设备返回的数据
|
// 监听设备返回的数据
|
||||||
void initReplySubscription() {
|
void initReplySubscription() {
|
||||||
state.replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
state.replySubscription =
|
||||||
|
EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||||
// 开门
|
// 开门
|
||||||
if (reply is OpenDoorReply && state.ifCurrentScreen.value == true) {
|
if (reply is OpenDoorReply && state.ifCurrentScreen.value == true) {
|
||||||
_replyOpenLock(reply);
|
_replyOpenLock(reply);
|
||||||
@ -88,7 +89,7 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
state.electricQuantity.value = power;
|
state.electricQuantity.value = power;
|
||||||
|
|
||||||
// 备用电量
|
// 备用电量
|
||||||
if(state.keyInfos.value.lockFeature!.isSupportBackupBattery == 1){
|
if (state.keyInfos.value.lockFeature!.isSupportBackupBattery == 1) {
|
||||||
int powerStandby = reply.data[9];
|
int powerStandby = reply.data[9];
|
||||||
state.electricQuantityStandby.value = powerStandby;
|
state.electricQuantityStandby.value = powerStandby;
|
||||||
}
|
}
|
||||||
@ -123,10 +124,6 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
signKey: signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey: getPrivateKeyList,
|
privateKey: getPrivateKeyList,
|
||||||
);
|
);
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
//无权限
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 0x16:
|
case 0x16:
|
||||||
// 正在开锁中...
|
// 正在开锁中...
|
||||||
@ -136,8 +133,20 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case 0x0d:
|
||||||
|
// 正在开锁中...
|
||||||
|
showToast('钥匙无效'.tr);
|
||||||
|
state.openLockBtnState.value = 0;
|
||||||
|
state.openDoorBtnisUneable.value = false;
|
||||||
|
state.animationController!.stop();
|
||||||
|
cancelBlueConnetctToastTimer();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
//失败
|
//失败
|
||||||
|
state.openLockBtnState.value = 0;
|
||||||
|
state.openDoorBtnisUneable.value = false;
|
||||||
|
state.animationController!.stop();
|
||||||
|
cancelBlueConnetctToastTimer();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,7 +182,7 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
if (dataLength > 0) {
|
if (dataLength > 0) {
|
||||||
reply.data.removeRange(0, 7);
|
reply.data.removeRange(0, 7);
|
||||||
// 把得到的数据按8位分割成数组 然后塞进一个新的数组里面
|
// 把得到的数据按8位分割成数组 然后塞进一个新的数组里面
|
||||||
if(reply.data.length < 17){
|
if (reply.data.length < 17) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var getList = splitList(reply.data, 17);
|
var getList = splitList(reply.data, 17);
|
||||||
@ -185,29 +194,29 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
var indexMap = {};
|
var indexMap = {};
|
||||||
indexMap["type"] = indexList[0].toString();
|
indexMap["type"] = indexList[0].toString();
|
||||||
|
|
||||||
if(indexList[0] == 2){
|
if (indexList[0] == 2) {
|
||||||
var passwordData = reply.data.sublist(7, 17);
|
var passwordData = reply.data.sublist(7, 17);
|
||||||
var password = utf8String(passwordData);
|
var password = utf8String(passwordData);
|
||||||
indexMap["user"] = password.toString();
|
indexMap["user"] = password.toString();
|
||||||
}else{
|
} else {
|
||||||
int userNo = (indexList[1]*255) + indexList[2];
|
int userNo = (indexList[1] * 255) + indexList[2];
|
||||||
indexMap["user"] = userNo.toString();
|
indexMap["user"] = userNo.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
indexMap["success"] = "1";
|
indexMap["success"] = "1";
|
||||||
|
|
||||||
int time = ((0xff & indexList[(3)]) << 24 |
|
int time = ((0xff & indexList[(3)]) << 24 |
|
||||||
(0xff & indexList[4]) << 16 |
|
(0xff & indexList[4]) << 16 |
|
||||||
(0xff & indexList[5]) << 8 |
|
(0xff & indexList[5]) << 8 |
|
||||||
(0xFF & indexList[6]));
|
(0xFF & indexList[6]));
|
||||||
indexMap["date"] = "${time * 1000}";
|
indexMap["date"] = "${time * 1000}";
|
||||||
uploadList.add(indexMap);
|
uploadList.add(indexMap);
|
||||||
}
|
}
|
||||||
lockRecordUploadData(uploadList);
|
lockRecordUploadData(uploadList);
|
||||||
|
|
||||||
if(dataLength == state.logCountPage){
|
if (dataLength == state.logCountPage) {
|
||||||
senderReferEventRecordTime();
|
senderReferEventRecordTime();
|
||||||
}else{
|
} else {
|
||||||
await BlueManage().disconnect();
|
await BlueManage().disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -351,7 +360,9 @@ 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!);
|
||||||
|
|
||||||
BlueManage().bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
|
BlueManage()
|
||||||
|
.bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!,
|
||||||
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
IoSenderManage.senderOpenLock(
|
IoSenderManage.senderOpenLock(
|
||||||
keyID: BlueManage().connectDeviceName,
|
keyID: BlueManage().connectDeviceName,
|
||||||
@ -377,13 +388,15 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 查询事件记录(时间查询)
|
// 查询事件记录(时间查询)
|
||||||
Future<void> senderReferEventRecordTime() async {
|
Future<void> senderReferEventRecordTime() async {
|
||||||
showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: () {
|
showBlueConnetctToastTimer(
|
||||||
BlueManage().disconnect();
|
isShowBlueConnetctToast: false,
|
||||||
});
|
action: () {
|
||||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
|
BlueManage().disconnect();
|
||||||
|
});
|
||||||
|
BlueManage().bludSendData(BlueManage().connectDeviceName,
|
||||||
|
(BluetoothConnectionState connectionState) async {
|
||||||
if (connectionState == BluetoothConnectionState.connected) {
|
if (connectionState == BluetoothConnectionState.connected) {
|
||||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||||
@ -410,27 +423,30 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 从服务器获取锁的时间 开锁时传入
|
// 从服务器获取锁的时间 开锁时传入
|
||||||
void getServerDatetime() async{
|
void getServerDatetime() async {
|
||||||
var entity = await ApiRepository.to.getServerDatetimeData();
|
var entity = await ApiRepository.to.getServerDatetimeData();
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
state.differentialTime = entity.data!.date! ~/ 1000 -
|
||||||
|
DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
||||||
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
|
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int getUTCNetTime(){
|
int getUTCNetTime() {
|
||||||
return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime;
|
return DateTime.now().millisecondsSinceEpoch ~/ 1000 +
|
||||||
|
state.differentialTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口
|
// 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口
|
||||||
void getLockNetToken() async {
|
void getLockNetToken() async {
|
||||||
LockNetTokenEntity entity = await ApiRepository.to.getLockNetToken(lockId: state.keyInfos.value.lockId.toString());
|
LockNetTokenEntity entity = await ApiRepository.to
|
||||||
|
.getLockNetToken(lockId: state.keyInfos.value.lockId.toString());
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
state.lockNetToken = entity.data!.token!.toString();
|
state.lockNetToken = entity.data!.token!.toString();
|
||||||
AppLog.log("从服务器获取联网token:${state.lockNetToken}");
|
AppLog.log("从服务器获取联网token:${state.lockNetToken}");
|
||||||
openDoorAction();
|
openDoorAction();
|
||||||
}else{
|
} else {
|
||||||
showToast("网络访问失败,请检查网络是否正常".tr, something: (){
|
showToast("网络访问失败,请检查网络是否正常".tr, something: () {
|
||||||
state.openLockBtnState.value = 0;
|
state.openLockBtnState.value = 0;
|
||||||
state.animationController!.forward();
|
state.animationController!.forward();
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
@ -442,11 +458,12 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
|
|
||||||
//电量更新请求
|
//电量更新请求
|
||||||
Future<void> uploadElectricQuantityRequest() async {
|
Future<void> uploadElectricQuantityRequest() async {
|
||||||
KeyOperationRecordEntity entity = await ApiRepository.to.uploadElectricQuantity(
|
KeyOperationRecordEntity entity = await ApiRepository.to
|
||||||
electricQuantity:state.electricQuantity.value.toString(),
|
.uploadElectricQuantity(
|
||||||
electricQuantityStandby: state.electricQuantityStandby.value.toString(),
|
electricQuantity: state.electricQuantity.value.toString(),
|
||||||
lockId: state.keyInfos.value.lockId.toString()
|
electricQuantityStandby:
|
||||||
);
|
state.electricQuantityStandby.value.toString(),
|
||||||
|
lockId: state.keyInfos.value.lockId.toString());
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
eventBus.fire(RefreshLockListInfoDataEvent());
|
eventBus.fire(RefreshLockListInfoDataEvent());
|
||||||
@ -491,8 +508,9 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
lockId: state.keyInfos.value.lockId.toString(), records: list);
|
lockId: state.keyInfos.value.lockId.toString(), records: list);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
// mockNetworkDataRequest();
|
// mockNetworkDataRequest();
|
||||||
AppLog.log("state.keyInfos.value.keyType:${state.keyInfos.value.keyType}");
|
AppLog.log(
|
||||||
if(state.keyInfos.value.keyType == XSConstantMacro.keyTypeOnce){
|
"state.keyInfos.value.keyType:${state.keyInfos.value.keyType}");
|
||||||
|
if (state.keyInfos.value.keyType == XSConstantMacro.keyTypeOnce) {
|
||||||
// 单次删除
|
// 单次删除
|
||||||
deletKeyData();
|
deletKeyData();
|
||||||
}
|
}
|
||||||
@ -502,9 +520,7 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
// 普通用户或者授权管理员删除钥匙
|
// 普通用户或者授权管理员删除钥匙
|
||||||
void deletKeyData() async {
|
void deletKeyData() async {
|
||||||
var entity = await ApiRepository.to.deleteElectronicKey(
|
var entity = await ApiRepository.to.deleteElectronicKey(
|
||||||
keyId:state.keyInfos.value.keyId.toString(),
|
keyId: state.keyInfos.value.keyId.toString(), includeUnderlings: 0);
|
||||||
includeUnderlings: 0
|
|
||||||
);
|
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
BlueManage().connectDeviceMacAddress = "";
|
BlueManage().connectDeviceMacAddress = "";
|
||||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
@ -514,21 +530,24 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// 锁设置里面开启关闭考勤刷新锁详情
|
/// 锁设置里面开启关闭考勤刷新锁详情
|
||||||
void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() {
|
void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() {
|
||||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||||
state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent =
|
state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent =
|
||||||
eventBus.on<LockSetChangeSetRefreshLockDetailWithType>().listen((event) {
|
eventBus
|
||||||
|
.on<LockSetChangeSetRefreshLockDetailWithType>()
|
||||||
|
.listen((event) {
|
||||||
if (event.type == 0) {
|
if (event.type == 0) {
|
||||||
// 0考勤
|
// 0考勤
|
||||||
state.isAttendance.value = int.parse(event.setResult);
|
state.isAttendance.value = int.parse(event.setResult);
|
||||||
state.keyInfos.value.lockSetting!.attendance = int.parse(event.setResult);
|
state.keyInfos.value.lockSetting!.attendance =
|
||||||
|
int.parse(event.setResult);
|
||||||
} else if (event.type == 1) {
|
} else if (event.type == 1) {
|
||||||
// 1 开锁时是否需联网
|
// 1 开锁时是否需联网
|
||||||
state.isOpenLockNeedOnline.value = int.parse(event.setResult);
|
state.isOpenLockNeedOnline.value = int.parse(event.setResult);
|
||||||
state.keyInfos.value.lockSetting!.appUnlockOnline = int.parse(event.setResult);
|
state.keyInfos.value.lockSetting!.appUnlockOnline =
|
||||||
state.lockNetToken = "";// 改变开锁时是否联网状态的时候清空token
|
int.parse(event.setResult);
|
||||||
|
state.lockNetToken = ""; // 改变开锁时是否联网状态的时候清空token
|
||||||
} else if (event.type == 2) {
|
} else if (event.type == 2) {
|
||||||
// 2 常开模式
|
// 2 常开模式
|
||||||
state.isOpenPassageMode.value = int.parse(event.setResult);
|
state.isOpenPassageMode.value = int.parse(event.setResult);
|
||||||
@ -560,7 +579,8 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusExpired ||
|
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusExpired ||
|
||||||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusDeleted ||
|
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusDeleted ||
|
||||||
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusReset) {
|
state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusReset) {
|
||||||
text = "${"你的钥匙".tr}${XSConstantMacro.getKeyStatusStr(state.keyInfos.value.keyStatus!)}";
|
text =
|
||||||
|
"${"你的钥匙".tr}${XSConstantMacro.getKeyStatusStr(state.keyInfos.value.keyStatus!)}";
|
||||||
} else {
|
} else {
|
||||||
text = state.isOpenPassageMode.value == 1
|
text = state.isOpenPassageMode.value == 1
|
||||||
? "常开模式启动!长按闭锁".tr
|
? "常开模式启动!长按闭锁".tr
|
||||||
@ -585,5 +605,4 @@ class LockDetailLogic extends BaseGetXController {
|
|||||||
await PermissionDialog.request(Permission.location);
|
await PermissionDialog.request(Permission.location);
|
||||||
await PermissionDialog.requestBluetooth();
|
await PermissionDialog.requestBluetooth();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import 'dart:typed_data';
|
|||||||
import 'package:crypto/crypto.dart';
|
import 'package:crypto/crypto.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||||
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:star_lock/blue/blue_manage.dart';
|
import 'package:star_lock/blue/blue_manage.dart';
|
||||||
@ -18,6 +19,7 @@ import 'package:star_lock/blue/sender_manage.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart';
|
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/commonDataManage.dart';
|
import 'package:star_lock/tools/commonDataManage.dart';
|
||||||
|
import 'package:star_lock/tools/showTipView.dart';
|
||||||
import 'package:star_lock/tools/storage.dart';
|
import 'package:star_lock/tools/storage.dart';
|
||||||
import 'package:star_lock/widget/permission/permission_dialog.dart';
|
import 'package:star_lock/widget/permission/permission_dialog.dart';
|
||||||
|
|
||||||
@ -67,7 +69,15 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
String md5Str = md5.convert(otaBin!).toString();
|
String md5Str = md5.convert(otaBin!).toString();
|
||||||
headJson!['fwMd5'] = md5Str;
|
headJson!['fwMd5'] = md5Str;
|
||||||
blueOTAUpgrade(headJson!, [0, 0, 0, 0]);
|
ShowTipView().showIosTipWithContentDialog("升级过程中无法开锁,请先开锁后再升级".tr,
|
||||||
|
() async {
|
||||||
|
blueOTAUpgrade(headJson!, [0, 0, 0, 0]);
|
||||||
|
EasyLoading.show(
|
||||||
|
status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black);
|
||||||
|
Future.delayed(const Duration(seconds: 4), () {
|
||||||
|
EasyLoading.dismiss();
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//蓝牙操作 ota 升级
|
//蓝牙操作 ota 升级
|
||||||
@ -217,7 +227,7 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
Uint8List bin = data.sublist(binOffset.toInt(), data.length);
|
Uint8List bin = data.sublist(binOffset.toInt(), data.length);
|
||||||
//md5 校验有问题,暂时不解析
|
//md5 校验有问题,暂时不解析
|
||||||
String md5Str = md5.convert(bin).toString().toUpperCase();
|
String md5Str = md5.convert(bin).toString().toUpperCase();
|
||||||
AppLog.log('---> $md5Str ${meta['fwMd5']}');
|
AppLog.log('固件 md5 检验md5:$md5Str 固件信息 md5:${meta['fwMd5']}');
|
||||||
if (md5Str != meta['fwMd5']) {
|
if (md5Str != meta['fwMd5']) {
|
||||||
showToast('文件校验失败 0x02'.tr);
|
showToast('文件校验失败 0x02'.tr);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -31,136 +31,161 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
|
|||||||
),
|
),
|
||||||
body: Container(
|
body: Container(
|
||||||
padding: EdgeInsets.all(30.w),
|
padding: EdgeInsets.all(30.w),
|
||||||
child: Column(
|
child: Obx(() {
|
||||||
children: [
|
return updateView(logic);
|
||||||
Obx(() {
|
}),
|
||||||
return logic.state.otaUpdateIng.value
|
|
||||||
? PopScope(
|
|
||||||
canPop: false,
|
|
||||||
onPopInvoked: (didPop) async {
|
|
||||||
if (logic.state.otaUpdateIng.value) {
|
|
||||||
logic.closeOTADAta();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: const SizedBox(),
|
|
||||||
)
|
|
||||||
: const SizedBox();
|
|
||||||
}),
|
|
||||||
SizedBox(
|
|
||||||
height: 60.h,
|
|
||||||
),
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
Image.asset(
|
|
||||||
'images/main/icon_main_lockSet_lockEscalation.png',
|
|
||||||
width: 36.w,
|
|
||||||
height: 36.w,
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
width: 10.w,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
// TranslationLoader.lanKeys!.haveNewVersion!.tr,
|
|
||||||
"未发现新版本",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 24.sp, fontWeight: FontWeight.w600),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 30.h,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
"${TranslationLoader.lanKeys!.currentVersion!.tr}:1.0.0",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 40.h,
|
|
||||||
),
|
|
||||||
Obx(() {
|
|
||||||
return !logic.state.otaUpdateIng.value
|
|
||||||
? SubmitBtn(
|
|
||||||
btnName: TranslationLoader.lanKeys!.upgrade!.tr,
|
|
||||||
onClick: () {})
|
|
||||||
: SizedBox();
|
|
||||||
}),
|
|
||||||
SizedBox(
|
|
||||||
height: 10.h,
|
|
||||||
),
|
|
||||||
Obx(() {
|
|
||||||
return !logic.state.otaUpdateIng.value
|
|
||||||
? Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
// Container(
|
|
||||||
// margin: EdgeInsets.only(top: 8, bottom: 8),
|
|
||||||
// width: Get.width,
|
|
||||||
// child: Center(
|
|
||||||
// child: Text(
|
|
||||||
// // "${TranslationLoader.lanKeys!.newVersion!.tr}:1.0.1",
|
|
||||||
// "未发现新版本",
|
|
||||||
// style: TextStyle(
|
|
||||||
// color: AppColors.mainColor,
|
|
||||||
// fontSize: 18.sp),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
logic.otaUpdate();
|
|
||||||
},
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
child: Text(
|
|
||||||
'手动升级',
|
|
||||||
style: TextStyle(
|
|
||||||
color: AppColors.mainColor,
|
|
||||||
fontSize: 18.sp,
|
|
||||||
fontWeight: FontWeight.w400),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
: Padding(
|
|
||||||
padding: EdgeInsets.symmetric(
|
|
||||||
horizontal: 50.w, vertical: 15.h),
|
|
||||||
child: Row(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
'固件传输中',
|
|
||||||
style: TextStyle(
|
|
||||||
color: AppColors.mainColor,
|
|
||||||
fontSize: 18.sp,
|
|
||||||
fontWeight: FontWeight.w400),
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
width: 10.w,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: BorderRadius.all(
|
|
||||||
Radius.circular(10.r)),
|
|
||||||
child: LinearProgressIndicator(
|
|
||||||
value: logic
|
|
||||||
.state.otaProgress.value, // 50% 进度
|
|
||||||
backgroundColor: Colors.grey[200],
|
|
||||||
valueColor:
|
|
||||||
AlwaysStoppedAnimation<Color>(
|
|
||||||
AppColors.mainColor),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget updateView(LockEscalationLogic logic) {
|
||||||
|
if (logic.state.otaUpdateIng.value) {
|
||||||
|
return otaUpdate(logic);
|
||||||
|
}
|
||||||
|
return defaultUpdate(logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
//升级
|
||||||
|
Widget defaultUpdate(LockEscalationLogic logic) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 60.h,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Image.asset(
|
||||||
|
'images/main/icon_main_lockSet_lockEscalation.png',
|
||||||
|
width: 36.w,
|
||||||
|
height: 36.w,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 10.w,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
// TranslationLoader.lanKeys!.haveNewVersion!.tr,
|
||||||
|
"未发现新版本",
|
||||||
|
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"${TranslationLoader.lanKeys!.currentVersion!.tr}:1.0.0",
|
||||||
|
style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 40.h,
|
||||||
|
),
|
||||||
|
Obx(() {
|
||||||
|
return !logic.state.otaUpdateIng.value
|
||||||
|
? SubmitBtn(
|
||||||
|
btnName: TranslationLoader.lanKeys!.upgrade!.tr,
|
||||||
|
onClick: () {})
|
||||||
|
: SizedBox();
|
||||||
|
}),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.h,
|
||||||
|
),
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.topRight,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
logic.otaUpdate();
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
'手动升级'.tr,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.mainColor,
|
||||||
|
fontSize: 18.sp,
|
||||||
|
fontWeight: FontWeight.w400),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ota升级
|
||||||
|
Widget otaUpdate(LockEscalationLogic logic) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 20.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'${'机型'.tr}:${logic.headJson?['platform']}-${logic.headJson?['product']}',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontSize: 22.sp,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'${'硬件版本'.tr}:${logic.headJson?['hwVersion']}',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontSize: 22.sp,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'${'固件版本'.tr}:${logic.headJson?['fwVersion']}',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontSize: 22.sp,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 20.h,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'传输期间请勿离开当前页面'.tr,
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.blackColor,
|
||||||
|
fontSize: 20.sp,
|
||||||
|
fontWeight: FontWeight.w400),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.h),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'固件传输中',
|
||||||
|
style: TextStyle(
|
||||||
|
color: AppColors.mainColor,
|
||||||
|
fontSize: 18.sp,
|
||||||
|
fontWeight: FontWeight.w400),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 10.w,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10.r)),
|
||||||
|
child: LinearProgressIndicator(
|
||||||
|
value: logic.state.otaProgress.value, // 50% 进度
|
||||||
|
backgroundColor: Colors.grey[200],
|
||||||
|
valueColor:
|
||||||
|
AlwaysStoppedAnimation<Color>(AppColors.mainColor),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
@ -27,12 +26,17 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppColors.mainBackgroundColor,
|
backgroundColor: AppColors.mainBackgroundColor,
|
||||||
appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.addLock!.tr, haveBack:true, backgroundColor: AppColors.mainColor),
|
appBar: TitleAppBar(
|
||||||
|
barTitle: TranslationLoader.lanKeys!.addLock!.tr,
|
||||||
|
haveBack: true,
|
||||||
|
backgroundColor: AppColors.mainColor),
|
||||||
body: Column(
|
body: Column(
|
||||||
// mainAxisAlignment: MainAxisAlignment.center,
|
// mainAxisAlignment: MainAxisAlignment.center,
|
||||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
SizedBox(height: 80.h,),
|
SizedBox(
|
||||||
|
height: 80.h,
|
||||||
|
),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 50.w, right: 50.w),
|
margin: EdgeInsets.only(left: 50.w, right: 50.w),
|
||||||
width: 1.sw,
|
width: 1.sw,
|
||||||
@ -40,22 +44,29 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(TranslationLoader.lanKeys!.addSuccessfullyPleaseRename!.tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500))
|
child: Text(
|
||||||
),
|
TranslationLoader
|
||||||
|
.lanKeys!.addSuccessfullyPleaseRename!.tr,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp, fontWeight: FontWeight.w500))),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 80.h,),
|
SizedBox(
|
||||||
|
height: 80.h,
|
||||||
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 80.h,
|
height: 80.h,
|
||||||
// color: Colors.red,
|
// color: Colors.red,
|
||||||
padding: EdgeInsets.only(left: 50.w, right: 50.w),
|
padding: EdgeInsets.only(left: 50.w, right: 50.w),
|
||||||
child: TextField(
|
child: TextField(
|
||||||
controller: state.aliNameController,
|
focusNode: state.focusNode,
|
||||||
onChanged: (v){
|
autofocus: true,
|
||||||
|
controller: state.aliNameController,
|
||||||
|
onChanged: (v) {
|
||||||
state.aliName.value = v;
|
state.aliName.value = v;
|
||||||
},
|
},
|
||||||
textAlign:TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
inputFormatters: [
|
inputFormatters: [
|
||||||
LengthLimitingTextInputFormatter(32),
|
LengthLimitingTextInputFormatter(32),
|
||||||
],
|
],
|
||||||
@ -63,58 +74,44 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
|
|||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: '请填写信息'.tr,
|
hintText: '请填写信息'.tr,
|
||||||
hintStyle: TextStyle(
|
hintStyle: TextStyle(
|
||||||
// height: 1.1,
|
// height: 1.1,
|
||||||
fontSize: 24.sp,
|
fontSize: 24.sp,
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
color: const Color(0xFF999999)
|
color: const Color(0xFF999999)),
|
||||||
),
|
|
||||||
border: OutlineInputBorder(
|
border: OutlineInputBorder(
|
||||||
///设置边框四个角的弧度
|
|
||||||
borderRadius: BorderRadius.all(Radius.circular(50.h)),
|
borderRadius: BorderRadius.all(Radius.circular(50.h)),
|
||||||
///用来配置边框的样式
|
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
///设置边框的颜色
|
|
||||||
color: AppColors.mainColor,
|
color: AppColors.mainColor,
|
||||||
///设置边框的粗细
|
|
||||||
width: 1,
|
width: 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
///用来配置输入框获取焦点时的颜色
|
|
||||||
focusedBorder: OutlineInputBorder(
|
focusedBorder: OutlineInputBorder(
|
||||||
///设置边框四个角的弧度
|
|
||||||
borderRadius: BorderRadius.all(Radius.circular(50.h)),
|
borderRadius: BorderRadius.all(Radius.circular(50.h)),
|
||||||
///用来配置边框的样式
|
|
||||||
borderSide: BorderSide(
|
borderSide: BorderSide(
|
||||||
///设置边框的颜色
|
|
||||||
color: AppColors.mainColor,
|
color: AppColors.mainColor,
|
||||||
///设置边框的粗细
|
|
||||||
width: 1,
|
width: 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)),
|
||||||
),
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 120.h,
|
||||||
),
|
),
|
||||||
SizedBox(height: 120.h,),
|
|
||||||
SubmitBtn(
|
SubmitBtn(
|
||||||
btnName: TranslationLoader.lanKeys!.sure!.tr,
|
btnName: TranslationLoader.lanKeys!.sure!.tr,
|
||||||
borderRadius: 20.w,
|
borderRadius: 20.w,
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: 50.w,
|
left: 50.w,
|
||||||
right: 50.w,
|
right: 50.w,
|
||||||
// top: 30.w,
|
// top: 30.w,
|
||||||
// bottom: 30.w
|
// bottom: 30.w
|
||||||
),
|
),
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
|
||||||
top: 25.w,
|
onClick: () {
|
||||||
bottom: 25.w
|
|
||||||
),
|
|
||||||
onClick: (){
|
|
||||||
logic.addUserConnectBlue();
|
logic.addUserConnectBlue();
|
||||||
}
|
}),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
)
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -130,6 +127,7 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
// TODO: implement dispose
|
// TODO: implement dispose
|
||||||
/// 取消路由订阅
|
/// 取消路由订阅
|
||||||
|
state.focusNode.unfocus();
|
||||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
BlueManage().stopScan();
|
BlueManage().stopScan();
|
||||||
|
|||||||
@ -1,16 +1,15 @@
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../../blue/blue_manage.dart';
|
import '../../../blue/blue_manage.dart';
|
||||||
|
|
||||||
class SaveLockState {
|
class SaveLockState {
|
||||||
|
|
||||||
var aliName = ''.obs;
|
var aliName = ''.obs;
|
||||||
var pwdTimestamp= 0.obs;
|
var pwdTimestamp = 0.obs;
|
||||||
var addressInfo = {}.obs;
|
var addressInfo = {}.obs;
|
||||||
|
|
||||||
TextEditingController aliNameController = TextEditingController();
|
TextEditingController aliNameController = TextEditingController();
|
||||||
|
FocusNode focusNode = FocusNode();
|
||||||
|
|
||||||
var lockUserNo = 0;
|
var lockUserNo = 0;
|
||||||
var lockInfo = {};
|
var lockInfo = {};
|
||||||
@ -20,15 +19,16 @@ class SaveLockState {
|
|||||||
var isFromMap = 0; // 0:不是从地图界面进入 1:从地图界面进入
|
var isFromMap = 0; // 0:不是从地图界面进入 1:从地图界面进入
|
||||||
|
|
||||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||||
var sureBtnState = 0.obs;// 0可点击 1 不可点击
|
var sureBtnState = 0.obs; // 0可点击 1 不可点击
|
||||||
|
|
||||||
// 管理员密码
|
// 管理员密码
|
||||||
var adminPasswordTF = TextEditingController();
|
var adminPasswordTF = TextEditingController();
|
||||||
|
|
||||||
var adminPassword = '';
|
var adminPassword = '';
|
||||||
var lockId = 0;
|
var lockId = 0;
|
||||||
|
|
||||||
SaveLockState() {
|
SaveLockState() {
|
||||||
aliName.value = BlueManage().connectDeviceName;
|
aliName.value = BlueManage().connectDeviceName;
|
||||||
aliNameController.text = aliName.value;
|
aliNameController.text = aliName.value;
|
||||||
|
|
||||||
Map map = Get.arguments;
|
Map map = Get.arguments;
|
||||||
@ -44,4 +44,4 @@ class SaveLockState {
|
|||||||
void onClose() {
|
void onClose() {
|
||||||
aliNameController.dispose();
|
aliNameController.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user