Merge branch 'release' of https://gitee.com/starlock-cn/app-starlock into release
# Conflicts: # lib/login/register/starLock_register_logic.dart # lib/login/register/starLock_register_page.dart # lib/login/register/starLock_register_state.dart # lib/main/lockDetail/face/faceDetail/faceDetail_logic.dart # lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_page.dart # lib/main/lockDetail/lockSet/lockSet/lockSet_page.dart
This commit is contained in:
commit
8381506bdd
@ -337,7 +337,6 @@
|
|||||||
"customSMSTemplate": "Custom SMS Template",
|
"customSMSTemplate": "Custom SMS Template",
|
||||||
"customMailTemplate": "Custom Mail Template",
|
"customMailTemplate": "Custom Mail Template",
|
||||||
"record": "Record",
|
"record": "Record",
|
||||||
|
|
||||||
"forTheFirstTime": "For the first time",
|
"forTheFirstTime": "For the first time",
|
||||||
"onceDay": "once a day",
|
"onceDay": "once a day",
|
||||||
"weekOnce": "once a week",
|
"weekOnce": "once a week",
|
||||||
@ -789,53 +788,51 @@
|
|||||||
"文件校验失败 0x02": "File verification failed 0x02",
|
"文件校验失败 0x02": "File verification failed 0x02",
|
||||||
"文件校验失败 0x03": "File verification failed 0x03",
|
"文件校验失败 0x03": "File verification failed 0x03",
|
||||||
"固件升级完成": "Firmware upgrade completed",
|
"固件升级完成": "Firmware upgrade completed",
|
||||||
"记录":"Record",
|
"记录": "Record",
|
||||||
"开通高级功能后才可以对锁进行管理":"You can manage locks only after the advanced function is enabled",
|
"开通高级功能后才可以对锁进行管理": "You can manage locks only after the advanced function is enabled",
|
||||||
"去开通":"Go and Activate",
|
"去开通": "Go and Activate",
|
||||||
"实名认证":"Real-name authentication",
|
"实名认证": "Real-name authentication",
|
||||||
"当前剩余数量":"Current surplus quantity",
|
"当前剩余数量": "Current surplus quantity",
|
||||||
"购买":"Buy",
|
"购买": "Buy",
|
||||||
"实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase",
|
"实名认证为付费功能,请购买后再使用": "Real-name authentication is a paid function, please use it after purchase",
|
||||||
"密码不一致哦":"The passwords are inconsistent",
|
"密码不一致哦": "The passwords are inconsistent",
|
||||||
|
"退出添加": "Quit adding",
|
||||||
"退出添加":"Quit adding",
|
"管理员已满": "Admin full",
|
||||||
"管理员已满":"Admin full",
|
|
||||||
"用户已满": "The user is full",
|
"用户已满": "The user is full",
|
||||||
"锁上面添加指纹已满": "Add fingerprint on lock is full",
|
"锁上面添加指纹已满": "Add fingerprint on lock is full",
|
||||||
"指纹已存在": "The fingerprint already exists.",
|
"指纹已存在": "The fingerprint already exists.",
|
||||||
"锁上面添加人脸已满": "Lock above add face is full",
|
"锁上面添加人脸已满": "Lock above add face is full",
|
||||||
"人脸已存在": "The face already exists",
|
"人脸已存在": "The face already exists",
|
||||||
"锁上面添加卡已满":"Lock above add card is full",
|
"锁上面添加卡已满": "Lock above add card is full",
|
||||||
"卡已存在": "Card already exists",
|
"卡已存在": "Card already exists",
|
||||||
"锁上面添加密码已满": "Lock above add password is full",
|
"锁上面添加密码已满": "Lock above add password is full",
|
||||||
"密码已存在": "Password already exists",
|
"密码已存在": "Password already exists",
|
||||||
"请输入密码": "Please enter password",
|
"请输入密码": "Please enter password",
|
||||||
"暂无密码,无需重置": "No password, no need to reset",
|
"暂无密码,无需重置": "No password, no need to reset",
|
||||||
|
"真实姓名": "Real name",
|
||||||
"真实姓名":"Real name",
|
"身份证号": "ID number",
|
||||||
"身份证号":"ID number",
|
"请输入真实姓名": "Please enter your real name",
|
||||||
"请输入真实姓名":"Please enter your real name",
|
"请输入身份证号": "Please enter your ID number",
|
||||||
"请输入身份证号":"Please enter your ID number",
|
"请输入身份证号和真实姓名": "Please enter your ID number and real name",
|
||||||
"请输入身份证号和真实姓名":"Please enter your ID number and real name",
|
"点击返回设备配对": "Tap Back to device pairing",
|
||||||
"点击返回设备配对":"Tap Back to device pairing",
|
"无法连接?尝试升级": "Can't connect?Upgrade attempted",
|
||||||
"无法连接?尝试升级":"Can't connect?Upgrade attempted",
|
"固件升级提示": "Firmware upgrade prompt",
|
||||||
"固件升级提示":"Firmware upgrade prompt",
|
"请先获取固件文件到手机本地,再选择升级": "Please obtain the firmware file to the local phone first, and then select Upgrade",
|
||||||
"请先获取固件文件到手机本地,再选择升级":"Please obtain the firmware file to the local phone first, and then select Upgrade",
|
"固件升级中": "The firmware is being upgraded",
|
||||||
"固件升级中":"The firmware is being upgraded",
|
"取消升级": "Cancel the upgrade",
|
||||||
"取消升级":"Cancel the upgrade",
|
"固件传输中": "Firmware in transit",
|
||||||
"固件传输中":"Firmware in transit",
|
"关闭": "Shut down",
|
||||||
"关闭":"Shut down",
|
"传输中'": "In transit",
|
||||||
"传输中'":"In transit",
|
"操作记录": "Operation record",
|
||||||
"操作记录":"Operation record",
|
"修改姓名": "Modify name",
|
||||||
"修改姓名":"Modify name",
|
"传输中": "In transit",
|
||||||
"传输中":"In transit",
|
"发送人": "Sender",
|
||||||
"发送人":"Sender",
|
"发送时间": "Send time",
|
||||||
"发送时间":"Send time",
|
"钥匙详情": "Key details",
|
||||||
"钥匙详情":"Key details",
|
"姓名": "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",
|
"机型": "models",
|
||||||
"硬件版本": "Hardware version",
|
"硬件版本": "Hardware version",
|
||||||
"固件版本": "Firmware version",
|
"固件版本": "Firmware version",
|
||||||
@ -846,15 +843,23 @@
|
|||||||
"操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "The operation failed. Please confirm whether the lock is nearby, or restart your phone's Bluetooth and try again.",
|
"操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "The operation failed. Please confirm whether the lock is nearby, or restart your phone's Bluetooth and try again.",
|
||||||
"如果是全自动锁,请使屏幕变亮": "If it is a fully automatic lock, please make the screen brighter",
|
"如果是全自动锁,请使屏幕变亮": "If it is a fully automatic lock, please make the screen brighter",
|
||||||
"正在尝试闭锁……": "Attempting to lock...",
|
"正在尝试闭锁……": "Attempting to lock...",
|
||||||
"清空记录":"Clear record",
|
"清空记录": "Clear record",
|
||||||
"是否要删除操作记录?":"Do you want to delete the operation record?",
|
"是否要删除操作记录?": "Do you want to delete the operation record?",
|
||||||
"被删除的记录不能恢复":"The deleted record cannot be restored",
|
"被删除的记录不能恢复": "The deleted record cannot be restored",
|
||||||
"全部事件":"All events",
|
"全部事件": "All events",
|
||||||
"开锁事件":"Unlock event",
|
"开锁事件": "Unlock event",
|
||||||
"异常事件":"Abnormal event",
|
"异常事件": "Abnormal event",
|
||||||
"门铃事件":"Doorbell event",
|
"门铃事件": "Doorbell event",
|
||||||
"视频事件":"Video event",
|
"视频事件": "Video event",
|
||||||
"请开启蓝牙":"Please turn on Bluetooth",
|
"请开启蓝牙": "Please turn on Bluetooth",
|
||||||
"请选择有效日":"Please select the effective day",
|
"请选择有效日": "Please select the effective day",
|
||||||
"公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6"
|
"公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6",
|
||||||
|
"已是最新版本": "It is the latest version",
|
||||||
|
"一": "Mon",
|
||||||
|
"二": "Tue",
|
||||||
|
"三": "Wed",
|
||||||
|
"四": "Thu",
|
||||||
|
"五": "Fri",
|
||||||
|
"六": "Sat",
|
||||||
|
"日": "Sun"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -885,5 +885,13 @@
|
|||||||
"视频事件":"视频事件",
|
"视频事件":"视频事件",
|
||||||
"请开启蓝牙":"请开启蓝牙",
|
"请开启蓝牙":"请开启蓝牙",
|
||||||
"请选择有效日":"请选择有效日",
|
"请选择有效日":"请选择有效日",
|
||||||
"公司名字长度不能小于 6 ": "公司名字长度不能小于 6 "
|
"公司名字长度不能小于 6 ": "公司名字长度不能小于 6 ",
|
||||||
|
"已是最新版本": "已是最新版本",
|
||||||
|
"一":"一",
|
||||||
|
"二":"二",
|
||||||
|
"三":"三",
|
||||||
|
"四":"四",
|
||||||
|
"五":"五",
|
||||||
|
"六":"六",
|
||||||
|
"日":"日"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -855,5 +855,13 @@
|
|||||||
"视频事件": "视频事件",
|
"视频事件": "视频事件",
|
||||||
"请开启蓝牙": "请开启蓝牙",
|
"请开启蓝牙": "请开启蓝牙",
|
||||||
"请选择有效日": "请选择有效日",
|
"请选择有效日": "请选择有效日",
|
||||||
"公司名字长度不能小于 6 ": "公司名字长度不能小于 6 "
|
"公司名字长度不能小于 6 ": "公司名字长度不能小于 6 ",
|
||||||
|
"已是最新版本": "已是最新版本",
|
||||||
|
"一": "一",
|
||||||
|
"二": "二",
|
||||||
|
"三": "三",
|
||||||
|
"四": "四",
|
||||||
|
"五": "五",
|
||||||
|
"六": "六",
|
||||||
|
"日": "日"
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
images/main/icon_lockDetail_needNetwork.png
Normal file
BIN
images/main/icon_lockDetail_needNetwork.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
@ -1,3 +1,7 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
|
|
||||||
import '../../flavors.dart';
|
import '../../flavors.dart';
|
||||||
|
|
||||||
class XSConstantMacro {
|
class XSConstantMacro {
|
||||||
@ -85,4 +89,25 @@ class XSConstantMacro {
|
|||||||
static int webBuyTypeVip = 3; //VIP购买
|
static int webBuyTypeVip = 3; //VIP购买
|
||||||
static int webBuyTypeAuth = 4; //实名购买
|
static int webBuyTypeAuth = 4; //实名购买
|
||||||
static int webBuyTypeShop = 5; //商城购买
|
static int webBuyTypeShop = 5; //商城购买
|
||||||
|
|
||||||
|
//设备类型信息
|
||||||
|
Future<Map<String, dynamic>> getDeviceInfoData() async {
|
||||||
|
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||||
|
final Map<String, dynamic> deviceData = <String, dynamic>{};
|
||||||
|
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
|
||||||
|
deviceData['deviceBrand'] = androidInfo.brand;
|
||||||
|
deviceData['deviceModel'] = androidInfo.model;
|
||||||
|
deviceData['deviceVersion'] = androidInfo.version.release;
|
||||||
|
deviceData['deviceType'] = 10;
|
||||||
|
} else if (Platform.isIOS) {
|
||||||
|
final IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
|
||||||
|
deviceData['deviceBrand'] = iosInfo.name;
|
||||||
|
deviceData['deviceModel'] = iosInfo.model;
|
||||||
|
deviceData['deviceVersion'] = iosInfo.systemVersion;
|
||||||
|
deviceData['deviceType'] = 20;
|
||||||
|
}
|
||||||
|
return deviceData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,6 +29,7 @@ class F {
|
|||||||
static String get name => appFlavor?.name ?? '';
|
static String get name => appFlavor?.name ?? '';
|
||||||
|
|
||||||
static bool get isXHJ => appFlavor == Flavor.xhj;
|
static bool get isXHJ => appFlavor == Flavor.xhj;
|
||||||
|
static bool get isSKY => appFlavor == Flavor.sky;
|
||||||
|
|
||||||
//便捷判断并返回值
|
//便捷判断并返回值
|
||||||
static dynamic sw(
|
static dynamic sw(
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/appRouters.dart';
|
import 'package:star_lock/appRouters.dart';
|
||||||
|
import 'package:star_lock/app_settings/app_settings.dart';
|
||||||
import 'package:star_lock/blue/blue_manage.dart';
|
import 'package:star_lock/blue/blue_manage.dart';
|
||||||
|
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/mine/mine/starLockMine_state.dart';
|
import 'package:star_lock/mine/mine/starLockMine_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
@ -44,12 +45,13 @@ class StarLockLoginLogic extends BaseGetXController {
|
|||||||
loginType: '1',
|
loginType: '1',
|
||||||
password: state.pwd.value,
|
password: state.pwd.value,
|
||||||
countryCode: state.countryCode.value,
|
countryCode: state.countryCode.value,
|
||||||
username: state.emailOrPhone.value);
|
username: state.emailOrPhone.value,
|
||||||
|
deviceInfo: state.deviceInfoMap.value);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
Storage.saveLoginData(entity.data);
|
Storage.saveLoginData(entity.data);
|
||||||
Storage.setBool(saveIsVip, entity.data!.isVip == 0 ? false : true);
|
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
|
||||||
eventBus.fire(MineInfoChangeRefreshUI());
|
eventBus.fire(MineInfoChangeRefreshUI());
|
||||||
XSJPushProvider().initJPushService();
|
XSJPushProvider().bindDeviceID();
|
||||||
XSJPushProvider().initLocalNotification(isCancelLocalPush: false);
|
XSJPushProvider().initLocalNotification(isCancelLocalPush: false);
|
||||||
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
|
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
|
||||||
BlueManage().scanDevices.clear(); //清除设备缓存
|
BlueManage().scanDevices.clear(); //清除设备缓存
|
||||||
@ -86,4 +88,16 @@ class StarLockLoginLogic extends BaseGetXController {
|
|||||||
state.onClose();
|
state.onClose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onReady() {
|
||||||
|
super.onReady();
|
||||||
|
|
||||||
|
XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) {
|
||||||
|
state.deviceInfoMap.value = data;
|
||||||
|
}).catchError((error) {
|
||||||
|
// 适当处理错误
|
||||||
|
AppLog.log('获取设备信息时出错: $error');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ class StarLockLoginState {
|
|||||||
|
|
||||||
FocusNode emailOrPhoneFocusNode = FocusNode();
|
FocusNode emailOrPhoneFocusNode = FocusNode();
|
||||||
FocusNode pwdFocusNode = FocusNode();
|
FocusNode pwdFocusNode = FocusNode();
|
||||||
|
RxMap<String, dynamic> deviceInfoMap = <String, dynamic>{}.obs;
|
||||||
|
|
||||||
StarLockLoginState() {
|
StarLockLoginState() {
|
||||||
// emailOrPhone.value = StoreService.to.getLastUserAccount() as String;
|
// emailOrPhone.value = StoreService.to.getLastUserAccount() as String;
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/app_settings/app_settings.dart';
|
import 'package:star_lock/app_settings/app_settings.dart';
|
||||||
|
|
||||||
|
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
|
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
|
||||||
|
|
||||||
@ -33,8 +34,10 @@ class StarLockRegisterLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> register() async {
|
Future<void> register() async {
|
||||||
// AppLog.log("state.pwd.value:${state.pwd.value} state.surePwd.value:${state.surePwd.value}");
|
|
||||||
if(state.pwd.value != state.surePwd.value){
|
AppLog.log(
|
||||||
|
'state.pwd.value:${state.pwd.value} state.surePwd.value:${state.surePwd.value}');
|
||||||
|
if (state.pwd.value != state.surePwd.value) {
|
||||||
showToast('密码不一致哦'.tr);
|
showToast('密码不一致哦'.tr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -43,12 +46,14 @@ class StarLockRegisterLogic extends BaseGetXController {
|
|||||||
countryCode: int.parse(state.countryCode.value),
|
countryCode: int.parse(state.countryCode.value),
|
||||||
account: state.phoneOrEmailStr.value,
|
account: state.phoneOrEmailStr.value,
|
||||||
password: state.pwd.value,
|
password: state.pwd.value,
|
||||||
verificationCode: state.verificationCode.value);
|
verificationCode: state.verificationCode.value,
|
||||||
|
deviceInfo: state.deviceInfoMap.value);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
showToast('注册成功'.tr);
|
showToast('注册成功'.tr);
|
||||||
Get.back(result:<String, String>{
|
|
||||||
'phoneOrEmailStr':state.phoneOrEmailStr.value,
|
Get.back(result: <String, String>{
|
||||||
'pwd':state.pwd.value
|
'phoneOrEmailStr': state.phoneOrEmailStr.value,
|
||||||
|
'pwd': state.pwd.value
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,4 +101,16 @@ class StarLockRegisterLogic extends BaseGetXController {
|
|||||||
state.codeIsOK &&
|
state.codeIsOK &&
|
||||||
(state.isIphoneType.value ? state.isIphone : state.isEmail);
|
(state.isIphoneType.value ? state.isIphone : state.isEmail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onReady() {
|
||||||
|
super.onReady();
|
||||||
|
|
||||||
|
XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) {
|
||||||
|
state.deviceInfoMap.value = data;
|
||||||
|
}).catchError((error) {
|
||||||
|
// 适当处理错误
|
||||||
|
AppLog.log('获取设备信息时出错: $error');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class StarLockRegisterState {
|
|||||||
RxString btnText = ''.obs;
|
RxString btnText = ''.obs;
|
||||||
int totalSeconds = 120;
|
int totalSeconds = 120;
|
||||||
int currentSecond = 120;
|
int currentSecond = 120;
|
||||||
|
RxMap<String, dynamic> deviceInfoMap = <String, dynamic>{}.obs;
|
||||||
|
|
||||||
void resetResend() {
|
void resetResend() {
|
||||||
canResend.value = totalSeconds == currentSecond;
|
canResend.value = totalSeconds == currentSecond;
|
||||||
|
|||||||
@ -193,18 +193,21 @@ class _StarLockRegisterPageState extends State<StarLockRegisterXHJPage> {
|
|||||||
),
|
),
|
||||||
Obx(() => GestureDetector(
|
Obx(() => GestureDetector(
|
||||||
onTap:
|
onTap:
|
||||||
state.phoneOrEmailStrIsOK.value && state.canResend.value ? () async {
|
state.phoneOrEmailStrIsOK.value && state.canResend.value
|
||||||
|
? () async {
|
||||||
// Navigator.pushNamed(context, Routers.safetyVerificationPage, arguments: {"countryCode":"+86", "account":state.phoneOrEmailStr.value});
|
// Navigator.pushNamed(context, Routers.safetyVerificationPage, arguments: {"countryCode":"+86", "account":state.phoneOrEmailStr.value});
|
||||||
if(state.pwd.value != state.surePwd.value){
|
if (state.pwd.value != state.surePwd.value) {
|
||||||
logic.showToast("密码不一致哦".tr);
|
logic.showToast("密码不一致哦".tr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var result = await Get.toNamed(Routers.safetyVerificationPage,
|
var result = await Get.toNamed(
|
||||||
|
Routers.safetyVerificationPage,
|
||||||
arguments: {
|
arguments: {
|
||||||
"countryCode": state.countryCode,
|
"countryCode": state.countryCode,
|
||||||
"account": state.phoneOrEmailStr.value
|
"account": state.phoneOrEmailStr.value
|
||||||
});
|
});
|
||||||
state.xWidth.value = (result as Map<String, dynamic>)['xWidth'];
|
state.xWidth.value =
|
||||||
|
(result as Map<String, dynamic>)['xWidth'];
|
||||||
logic.sendValidationCode();
|
logic.sendValidationCode();
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import 'package:star_lock/flavors.dart';
|
|||||||
import 'package:star_lock/tools/bugly/bugly_tool.dart';
|
import 'package:star_lock/tools/bugly/bugly_tool.dart';
|
||||||
import 'package:star_lock/tools/device_info_service.dart';
|
import 'package:star_lock/tools/device_info_service.dart';
|
||||||
import 'package:star_lock/tools/platform_info_services.dart';
|
import 'package:star_lock/tools/platform_info_services.dart';
|
||||||
|
import 'package:star_lock/tools/xs_jPhush.dart';
|
||||||
import 'package:star_lock/translations/trans_lib.dart';
|
import 'package:star_lock/translations/trans_lib.dart';
|
||||||
|
|
||||||
import 'app.dart';
|
import 'app.dart';
|
||||||
@ -27,6 +28,8 @@ FutureOr<void> main() async {
|
|||||||
// bugly错误日志监控
|
// bugly错误日志监控
|
||||||
await BuglyTool.init();
|
await BuglyTool.init();
|
||||||
|
|
||||||
|
await XSJPushProvider().initJPushService();
|
||||||
|
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
|
|
||||||
if (AppPlatform.isAndroid) {
|
if (AppPlatform.isAndroid) {
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
@ -11,6 +12,10 @@ import 'addCardType_state.dart';
|
|||||||
class AddCardTypeLogic extends BaseGetXController{
|
class AddCardTypeLogic extends BaseGetXController{
|
||||||
AddCardTypeState state = AddCardTypeState();
|
AddCardTypeState state = AddCardTypeState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 添加卡数据
|
// 添加卡数据
|
||||||
Future<void> addCardData() async {
|
Future<void> addCardData() async {
|
||||||
int carType = 0; // 永久:1;限时2,单次3,循环:4
|
int carType = 0; // 永久:1;限时2,单次3,循环:4
|
||||||
|
|||||||
@ -210,7 +210,7 @@ class _AddCardPageState extends State<AddCardPage>
|
|||||||
visible: state.weekdaysList.isNotEmpty,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(',').toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||||
@ -7,6 +6,7 @@ import 'package:star_lock/blue/io_type.dart';
|
|||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/eventBusEventManage.dart';
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../blue/blue_manage.dart';
|
import '../../../../blue/blue_manage.dart';
|
||||||
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
|
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
|
||||||
@ -19,15 +19,22 @@ import '../../../../tools/dateTool.dart';
|
|||||||
import '../../../../tools/storage.dart';
|
import '../../../../tools/storage.dart';
|
||||||
import 'cardDetail_state.dart';
|
import 'cardDetail_state.dart';
|
||||||
|
|
||||||
class CardDetailLogic extends BaseGetXController{
|
class CardDetailLogic extends BaseGetXController {
|
||||||
CardDetailState state = CardDetailState();
|
CardDetailState state = CardDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 监听设备返回的数据
|
// 监听设备返回的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
|
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
|
_replySubscription =
|
||||||
|
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
|
||||||
// 添加卡片开始(重置锁里面所有卡)
|
// 添加卡片开始(重置锁里面所有卡)
|
||||||
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
if ((reply is SenderAddICCardWithTimeCycleCoercionReply) &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyAddICCardBegin(reply);
|
_replyAddICCardBegin(reply);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -37,23 +44,26 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
Future<void> _replyAddICCardBegin(Reply reply) async {
|
Future<void> _replyAddICCardBegin(Reply reply) async {
|
||||||
final int status = reply.data[2];
|
final int status = reply.data[2];
|
||||||
|
|
||||||
switch(status){
|
switch (status) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
//成功
|
//成功
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
if(state.isDeletCard.value == true){
|
if (state.isDeletCard.value == true) {
|
||||||
deletICCardData();
|
deletICCardData();
|
||||||
}else{
|
} else {
|
||||||
editICCardData();
|
editICCardData();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<int> token = reply.data.sublist(5, 9);
|
final List<int> token = reply.data.sublist(5, 9);
|
||||||
@ -61,25 +71,29 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
Storage.setStringList(saveBlueToken, saveStrList);
|
Storage.setStringList(saveBlueToken, saveStrList);
|
||||||
|
|
||||||
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
||||||
keyID:state.keyId.value.toString(),
|
keyID: state.keyId.value.toString(),
|
||||||
userID:await Storage.getUid(),
|
userID: await Storage.getUid(),
|
||||||
cardNo:int.parse(state.typeNumber.value),
|
cardNo: int.parse(state.typeNumber.value),
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate:state.isDeletCard.value ? 2 : 1, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletCard.value ? 2 : 1,
|
||||||
isAdmin:state.isAdministrator.value == true ? 1 : 0,
|
// 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isForce:state.isStressCard.value == true ? 1 : 0, // 是否是胁迫
|
isAdmin: state.isAdministrator.value == true ? 1 : 0,
|
||||||
isRound:state.keyType.value == 4 ? 1: 0, // 是否是循环
|
isForce: state.isStressCard.value == true ? 1 : 0,
|
||||||
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
|
// 是否是胁迫
|
||||||
startDate: int.parse(state.startDate.value)~/1000,
|
isRound: state.keyType.value == 4 ? 1 : 0,
|
||||||
endDate: int.parse(state.endDate.value)~/1000,
|
// 是否是循环
|
||||||
startTime:DateTool().dateToHNString(state.starTime.value),
|
weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
|
||||||
endTime:DateTool().dateToHNString(state.endTime.value),
|
state.weekDay.value),
|
||||||
needAuthor:1,
|
// 周循环
|
||||||
signKey:signKeyDataList,
|
startDate: int.parse(state.startDate.value) ~/ 1000,
|
||||||
privateKey:getPrivateKeyList,
|
endDate: int.parse(state.endDate.value) ~/ 1000,
|
||||||
token: token,
|
startTime: DateTool().dateToHNString(state.starTime.value),
|
||||||
isBeforeAddUser: false
|
endTime: DateTool().dateToHNString(state.endTime.value),
|
||||||
);
|
needAuthor: 1,
|
||||||
|
signKey: signKeyDataList,
|
||||||
|
privateKey: getPrivateKeyList,
|
||||||
|
token: token,
|
||||||
|
isBeforeAddUser: false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//失败
|
//失败
|
||||||
@ -89,52 +103,61 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
|
|
||||||
// 添加卡片
|
// 添加卡片
|
||||||
Future<void> senderAddICCard() async {
|
Future<void> senderAddICCard() async {
|
||||||
if(state.sureBtnState.value == 1){
|
if (state.sureBtnState.value == 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.sureBtnState.value = 1;
|
state.sureBtnState.value = 1;
|
||||||
|
|
||||||
showEasyLoading();
|
showEasyLoading();
|
||||||
showBlueConnetctToastTimer(action: (){
|
showBlueConnetctToastTimer(action: () {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
state.sureBtnState.value = 0;
|
state.sureBtnState.value = 0;
|
||||||
});
|
});
|
||||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
|
|
||||||
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
||||||
keyID:state.keyId.value.toString(),
|
keyID: state.keyId.value.toString(),
|
||||||
userID:await Storage.getUid(),
|
userID: await Storage.getUid(),
|
||||||
cardNo:int.parse(state.typeNumber.value),
|
cardNo: int.parse(state.typeNumber.value),
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate:state.isDeletCard.value ? 2 : 1, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletCard.value ? 2 : 1,
|
||||||
isAdmin:state.isAdministrator.value == true ? 1 : 0,
|
// 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isForce:state.isStressCard.value == true ? 1 : 0, // 是否是胁迫
|
isAdmin: state.isAdministrator.value == true ? 1 : 0,
|
||||||
isRound:state.keyType.value == 4 ? 1: 0, // 是否是循环
|
isForce: state.isStressCard.value == true ? 1 : 0,
|
||||||
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
|
// 是否是胁迫
|
||||||
startDate: int.parse(state.startDate.value)~/1000,
|
isRound: state.keyType.value == 4 ? 1 : 0,
|
||||||
endDate: int.parse(state.endDate.value)~/1000,
|
// 是否是循环
|
||||||
startTime:DateTool().dateToHNString(state.starTime.value),
|
weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
|
||||||
endTime:DateTool().dateToHNString(state.endTime.value),
|
state.weekDay.value),
|
||||||
needAuthor:1,
|
// 周循环
|
||||||
signKey:signKeyDataList,
|
startDate: int.parse(state.startDate.value) ~/ 1000,
|
||||||
privateKey:getPrivateKeyList,
|
endDate: int.parse(state.endDate.value) ~/ 1000,
|
||||||
token: getTokenList,
|
startTime: DateTool().dateToHNString(state.starTime.value),
|
||||||
isBeforeAddUser: false
|
endTime: DateTool().dateToHNString(state.endTime.value),
|
||||||
);
|
needAuthor: 1,
|
||||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
|
signKey: signKeyDataList,
|
||||||
|
privateKey: getPrivateKeyList,
|
||||||
|
token: getTokenList,
|
||||||
|
isBeforeAddUser: false);
|
||||||
|
} else if (deviceConnectionState ==
|
||||||
|
BluetoothConnectionState.disconnected) {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
state.sureBtnState.value = 0;
|
state.sureBtnState.value = 0;
|
||||||
if(state.ifCurrentScreen.value == true){
|
if (state.ifCurrentScreen.value == true) {
|
||||||
showBlueConnetctToast();
|
showBlueConnetctToast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,7 +165,7 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 编辑iC卡
|
// 编辑iC卡
|
||||||
Future<void> editICCardData() async{
|
Future<void> editICCardData() async {
|
||||||
final LoginEntity entity = await ApiRepository.to.editICCardData(
|
final LoginEntity entity = await ApiRepository.to.editICCardData(
|
||||||
cardId: state.keyId.value.toString(),
|
cardId: state.keyId.value.toString(),
|
||||||
lockId: state.fingerprintItemData.value.lockId.toString(),
|
lockId: state.fingerprintItemData.value.lockId.toString(),
|
||||||
@ -154,39 +177,40 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
changeType: '1',
|
changeType: '1',
|
||||||
startTime: int.parse(state.starTime.value),
|
startTime: int.parse(state.starTime.value),
|
||||||
endTime: int.parse(state.endTime.value),
|
endTime: int.parse(state.endTime.value),
|
||||||
cardType:state.keyType.value,
|
cardType: state.keyType.value,
|
||||||
cardRight: state.isAdministrator.value ? 1 : 0,
|
cardRight: state.isAdministrator.value ? 1 : 0,
|
||||||
);
|
);
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
showToast('修改成功'.tr, something: (){
|
showToast('修改成功'.tr, something: () {
|
||||||
eventBus.fire(OtherTypeRefreshListEvent());
|
eventBus.fire(OtherTypeRefreshListEvent());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除IC卡
|
// 删除IC卡
|
||||||
Future<void> deletICCardData() async{
|
Future<void> deletICCardData() async {
|
||||||
final LoginEntity entity = await ApiRepository.to.deletIcCardData(
|
final LoginEntity entity = await ApiRepository.to.deletIcCardData(
|
||||||
cardId: state.fingerprintItemData.value.cardId.toString(),
|
cardId: state.fingerprintItemData.value.cardId.toString(),
|
||||||
lockId: state.fingerprintItemData.value.lockId.toString(),
|
lockId: state.fingerprintItemData.value.lockId.toString(),
|
||||||
type: '0',
|
type: '0',
|
||||||
deleteType:'1'
|
deleteType: '1');
|
||||||
);
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
showToast('删除成功'.tr, something: () {
|
||||||
showToast('删除成功'.tr, something: (){
|
|
||||||
Get.back(result: 'addScuess');
|
Get.back(result: 'addScuess');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getKeyTypeShowDateTime(){
|
String getKeyTypeShowDateTime() {
|
||||||
String useDateStr = '';
|
String useDateStr = '';
|
||||||
if(state.keyType.value == 1){
|
if (state.keyType.value == 1) {
|
||||||
useDateStr = '永久'.tr;
|
useDateStr = '永久'.tr;
|
||||||
}else if(state.keyType.value == 2){
|
} else if (state.keyType.value == 2) {
|
||||||
useDateStr = '${DateTool().dateToYMDHNString(state.startDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}';
|
useDateStr =
|
||||||
} else if(state.keyType.value == 4){
|
'${DateTool().dateToYMDHNString(state.startDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}';
|
||||||
useDateStr = '${DateTool().dateToYMDString(state.startDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}';
|
} else if (state.keyType.value == 4) {
|
||||||
|
useDateStr =
|
||||||
|
'${DateTool().dateToYMDString(state.startDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}';
|
||||||
}
|
}
|
||||||
return useDateStr;
|
return useDateStr;
|
||||||
}
|
}
|
||||||
@ -204,5 +228,4 @@ class CardDetailLogic extends BaseGetXController{
|
|||||||
|
|
||||||
_replySubscription.cancel();
|
_replySubscription.cancel();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
@ -114,7 +114,7 @@ class _CardDetailPageState extends State<CardDetailPage> with RouteAware {
|
|||||||
visible: state.keyType.value == 4,
|
visible: state.keyType.value == 4,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||||
@ -27,10 +26,11 @@ class CardListLogic extends BaseGetXController {
|
|||||||
// 获取解析后的数据
|
// 获取解析后的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
_replySubscription =
|
||||||
|
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||||
// 添加卡片开始(重置锁里面所有卡)
|
// 添加卡片开始(重置锁里面所有卡)
|
||||||
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
if ((reply is SenderAddICCardWithTimeCycleCoercionReply) &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyAddICCardBegin(reply);
|
_replyAddICCardBegin(reply);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -40,7 +40,7 @@ class CardListLogic extends BaseGetXController {
|
|||||||
Future<void> _replyAddICCardBegin(Reply reply) async {
|
Future<void> _replyAddICCardBegin(Reply reply) async {
|
||||||
final int status = reply.data[2];
|
final int status = reply.data[2];
|
||||||
|
|
||||||
switch(status){
|
switch (status) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
//成功
|
//成功
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
@ -48,10 +48,13 @@ class CardListLogic extends BaseGetXController {
|
|||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<int> token = reply.data.sublist(5, 9);
|
final List<int> token = reply.data.sublist(5, 9);
|
||||||
@ -59,25 +62,24 @@ class CardListLogic extends BaseGetXController {
|
|||||||
Storage.setStringList(saveBlueToken, saveStrList);
|
Storage.setStringList(saveBlueToken, saveStrList);
|
||||||
|
|
||||||
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
||||||
keyID:state.deletKeyID,
|
keyID: state.deletKeyID,
|
||||||
userID:(await Storage.getUid())!,
|
userID: (await Storage.getUid())!,
|
||||||
cardNo:state.deletCardNo,
|
cardNo: state.deletCardNo,
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isAdmin:0,
|
isAdmin: 0,
|
||||||
isForce:0, // 是否是胁迫
|
isForce: 0, // 是否是胁迫
|
||||||
isRound:0, // 是否是循环
|
isRound: 0, // 是否是循环
|
||||||
weekRound:0, // 周循环
|
weekRound: 0, // 周循环
|
||||||
startDate: 0x11223344,
|
startDate: 0x11223344,
|
||||||
endDate: 0x11223344,
|
endDate: 0x11223344,
|
||||||
startTime:'0',
|
startTime: '0',
|
||||||
endTime:'0',
|
endTime: '0',
|
||||||
needAuthor:1,
|
needAuthor: 1,
|
||||||
signKey:signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey:getPrivateKeyList,
|
privateKey: getPrivateKeyList,
|
||||||
token: token,
|
token: token,
|
||||||
isBeforeAddUser: false
|
isBeforeAddUser: false);
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//失败
|
//失败
|
||||||
@ -88,44 +90,48 @@ class CardListLogic extends BaseGetXController {
|
|||||||
// 删除卡片
|
// 删除卡片
|
||||||
Future<void> senderAddICCard() async {
|
Future<void> senderAddICCard() async {
|
||||||
showEasyLoading();
|
showEasyLoading();
|
||||||
showBlueConnetctToastTimer(action: (){
|
showBlueConnetctToastTimer(action: () {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
});
|
});
|
||||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
|
|
||||||
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
|
||||||
keyID:state.deletKeyID,
|
keyID: state.deletKeyID,
|
||||||
userID:(await Storage.getUid())!,
|
userID: (await Storage.getUid())!,
|
||||||
cardNo:state.deletCardNo,
|
cardNo: state.deletCardNo,
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isAdmin:0,
|
isAdmin: 0,
|
||||||
isForce:0, // 是否是胁迫
|
isForce: 0, // 是否是胁迫
|
||||||
isRound:0, // 是否是循环
|
isRound: 0, // 是否是循环
|
||||||
weekRound:0, // 周循环
|
weekRound: 0, // 周循环
|
||||||
startDate: 0x11223344,
|
startDate: 0x11223344,
|
||||||
endDate: 0x11223344,
|
endDate: 0x11223344,
|
||||||
startTime:'0',
|
startTime: '0',
|
||||||
endTime:'0',
|
endTime: '0',
|
||||||
needAuthor:1,
|
needAuthor: 1,
|
||||||
signKey:signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey:getPrivateKeyList,
|
privateKey: getPrivateKeyList,
|
||||||
token: getTokenList,
|
token: getTokenList,
|
||||||
isBeforeAddUser: false
|
isBeforeAddUser: false);
|
||||||
);
|
} else if (deviceConnectionState ==
|
||||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
|
BluetoothConnectionState.disconnected) {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
if(state.ifCurrentScreen.value == true){
|
if (state.ifCurrentScreen.value == true) {
|
||||||
showBlueConnetctToast();
|
showBlueConnetctToast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,32 +139,34 @@ class CardListLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取IC卡列表
|
// 获取IC卡列表
|
||||||
Future<FingerprintListDataEntity> getICCardListData() async{
|
Future<FingerprintListDataEntity> getICCardListData(
|
||||||
final FingerprintListDataEntity entity = await ApiRepository.to.getICCardListData(
|
{required bool isRefresh}) async {
|
||||||
|
// 如果是下拉刷新,清空已有数据
|
||||||
|
if (isRefresh) {
|
||||||
|
state.fingerprintItemListData.clear();
|
||||||
|
pageNo = 1;
|
||||||
|
}
|
||||||
|
final FingerprintListDataEntity entity =
|
||||||
|
await ApiRepository.to.getICCardListData(
|
||||||
lockId: state.lockId.value.toString(),
|
lockId: state.lockId.value.toString(),
|
||||||
pageNo: pageNo.toString(),
|
pageNo: pageNo.toString(),
|
||||||
pageSize: pageSize,
|
pageSize: pageSize,
|
||||||
searchStr: state.searchController.text,
|
searchStr: state.searchController.text,
|
||||||
);
|
);
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
if (pageNo == 1) {
|
// 更新数据列表
|
||||||
state.fingerprintItemListData.value = entity.data!.list!;
|
state.fingerprintItemListData.addAll(entity.data!.list!);
|
||||||
pageNo++;
|
// 更新页码
|
||||||
} else {
|
pageNo++;
|
||||||
if (entity.data!.list!.isNotEmpty) {
|
|
||||||
state.fingerprintItemListData.value.addAll(entity.data!.list!);
|
|
||||||
pageNo++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除所有IC卡
|
// 删除所有IC卡
|
||||||
Future<void> deletICCardData() async{
|
Future<void> deletICCardData() async {
|
||||||
String cardId = '';
|
String cardId = '';
|
||||||
String type = '1';
|
String type = '1';
|
||||||
if(state.isDeletAll == false){
|
if (state.isDeletAll == false) {
|
||||||
cardId = state.deletKeyID;
|
cardId = state.deletKeyID;
|
||||||
type = '0';
|
type = '0';
|
||||||
}
|
}
|
||||||
@ -166,18 +174,15 @@ class CardListLogic extends BaseGetXController {
|
|||||||
cardId: cardId,
|
cardId: cardId,
|
||||||
lockId: state.lockId.value.toString(),
|
lockId: state.lockId.value.toString(),
|
||||||
type: type,
|
type: type,
|
||||||
deleteType:'1'
|
deleteType: '1');
|
||||||
);
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
if (state.isDeletAll == false) {
|
||||||
if(state.isDeletAll == false){
|
showToast('删除成功'.tr, something: () {
|
||||||
showToast('删除成功'.tr, something: (){
|
getICCardListData(isRefresh: true);
|
||||||
pageNo = 1;
|
|
||||||
getICCardListData();
|
|
||||||
});
|
});
|
||||||
}else{
|
} else {
|
||||||
showToast('重置成功'.tr, something: (){
|
showToast('重置成功'.tr, something: () {
|
||||||
pageNo = 1;
|
getICCardListData(isRefresh: true);
|
||||||
getICCardListData();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,44 +191,48 @@ class CardListLogic extends BaseGetXController {
|
|||||||
// 监听修改完详情之后刷新列表
|
// 监听修改完详情之后刷新列表
|
||||||
late StreamSubscription _teamEvent;
|
late StreamSubscription _teamEvent;
|
||||||
void _initRefreshAction() {
|
void _initRefreshAction() {
|
||||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
|
_teamEvent = eventBus
|
||||||
pageNo = 1;
|
.on<OtherTypeRefreshListEvent>()
|
||||||
getICCardListData();
|
.listen((OtherTypeRefreshListEvent event) {
|
||||||
|
getICCardListData(isRefresh: true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
String getKeyType(FingerprintItemData fingerprintItemData){
|
String getKeyType(FingerprintItemData fingerprintItemData) {
|
||||||
String keyTypeStr = '';//
|
String keyTypeStr = ''; //
|
||||||
if(fingerprintItemData.cardStatus == 1){
|
if (fingerprintItemData.cardStatus == 1) {
|
||||||
if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){
|
if (fingerprintItemData.startDate! >
|
||||||
|
DateTime.now().millisecondsSinceEpoch) {
|
||||||
keyTypeStr = '未生效'.tr;
|
keyTypeStr = '未生效'.tr;
|
||||||
}
|
}
|
||||||
|
} else if (fingerprintItemData.cardStatus == 2) {
|
||||||
}else if(fingerprintItemData.cardStatus == 2){
|
|
||||||
keyTypeStr = '已失效'.tr;
|
keyTypeStr = '已失效'.tr;
|
||||||
}
|
}
|
||||||
return keyTypeStr;
|
return keyTypeStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getKeyDateType(FingerprintItemData fingerprintItemData){
|
String getKeyDateType(FingerprintItemData fingerprintItemData) {
|
||||||
String keyDateTypeStr = '';// 永久:1;限时2,单次3,循环:4
|
String keyDateTypeStr = ''; // 永久:1;限时2,单次3,循环:4
|
||||||
if(fingerprintItemData.cardType! == 1){
|
if (fingerprintItemData.cardType! == 1) {
|
||||||
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久';
|
keyDateTypeStr =
|
||||||
}else if(fingerprintItemData.cardType! == 2){
|
'${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久';
|
||||||
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
|
} else if (fingerprintItemData.cardType! == 2) {
|
||||||
}else if(fingerprintItemData.cardType! == 4){
|
keyDateTypeStr =
|
||||||
keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
|
'${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
|
||||||
|
} else if (fingerprintItemData.cardType! == 4) {
|
||||||
|
keyDateTypeStr =
|
||||||
|
'${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
|
||||||
}
|
}
|
||||||
return keyDateTypeStr;
|
return keyDateTypeStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> onReady() async {
|
Future<void> onReady() async {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
|
||||||
// 获取是否是演示模式 演示模式不获取接口
|
// 获取是否是演示模式 演示模式不获取接口
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if(isDemoMode == false){
|
if (isDemoMode == false) {
|
||||||
_initReplySubscription();
|
_initReplySubscription();
|
||||||
|
|
||||||
_initRefreshAction();
|
_initRefreshAction();
|
||||||
@ -239,10 +248,10 @@ class CardListLogic extends BaseGetXController {
|
|||||||
Future<void> onClose() async {
|
Future<void> onClose() async {
|
||||||
super.onClose();
|
super.onClose();
|
||||||
|
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if(isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
_replySubscription.cancel();
|
_replySubscription.cancel();
|
||||||
_teamEvent.cancel();
|
_teamEvent.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
@ -31,11 +30,13 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
final CardListLogic logic = Get.put(CardListLogic());
|
final CardListLogic logic = Get.put(CardListLogic());
|
||||||
final CardListState state = Get.find<CardListLogic>().state;
|
final CardListState state = Get.find<CardListLogic>().state;
|
||||||
|
|
||||||
Future<void> getHttpData() async {
|
Future<void> getHttpData({required bool isRefresh}) async {
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
logic.getICCardListData().then((FingerprintListDataEntity value){
|
logic
|
||||||
if(mounted) {
|
.getICCardListData(isRefresh: isRefresh)
|
||||||
|
.then((FingerprintListDataEntity value) {
|
||||||
|
if (mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -46,12 +47,11 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
getHttpData();
|
getHttpData(isRefresh: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppColors.mainBackgroundColor,
|
backgroundColor: AppColors.mainBackgroundColor,
|
||||||
appBar: TitleAppBar(
|
appBar: TitleAppBar(
|
||||||
@ -67,7 +67,8 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
ShowTipView().showIosTipWithContentDialog('重置后,该锁的卡都将被删除哦,确认要重置吗?'.tr, () async {
|
ShowTipView().showIosTipWithContentDialog(
|
||||||
|
'重置后,该锁的卡都将被删除哦,确认要重置吗?'.tr, () async {
|
||||||
state.isDeletAll = true;
|
state.isDeletAll = true;
|
||||||
state.deletKeyID = '0';
|
state.deletKeyID = '0';
|
||||||
state.deletCardNo = 0;
|
state.deletCardNo = 0;
|
||||||
@ -82,34 +83,33 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: EasyRefreshTool(
|
body: EasyRefreshTool(
|
||||||
onRefresh: (){
|
onRefresh: () {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
},
|
},
|
||||||
onLoad: (){
|
onLoad: () {
|
||||||
getHttpData();
|
getHttpData(isRefresh: false);
|
||||||
},
|
},
|
||||||
child: Column(
|
child: Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
KeySearchWidget(
|
KeySearchWidget(
|
||||||
editingController: state.searchController,
|
editingController: state.searchController,
|
||||||
onSubmittedAction: () {
|
onSubmittedAction: () {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SizedBox(height: 20.h),
|
SizedBox(height: 20.h),
|
||||||
Expanded(child: _buildMainUI()),
|
Expanded(child: _buildMainUI()),
|
||||||
AddBottomWhiteBtn(
|
AddBottomWhiteBtn(
|
||||||
btnName: '${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}',
|
btnName:
|
||||||
|
'${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}',
|
||||||
onClick: () async {
|
onClick: () async {
|
||||||
final data = await Get.toNamed(Routers.addCardPage, arguments: <String, int>{
|
final data = await Get.toNamed(Routers.addCardPage,
|
||||||
'lockId': state.lockId.value,
|
arguments: <String, int>{
|
||||||
'fromType': 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
'lockId': state.lockId.value,
|
||||||
});
|
'fromType': 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
||||||
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -125,59 +125,69 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
Widget _buildMainUI() {
|
Widget _buildMainUI() {
|
||||||
return Obx(() => state.fingerprintItemListData.value.isNotEmpty
|
return Obx(() => state.fingerprintItemListData.value.isNotEmpty
|
||||||
? SlidableAutoCloseBehavior(
|
? SlidableAutoCloseBehavior(
|
||||||
child: ListView.separated(
|
child: ListView.separated(
|
||||||
itemCount: state.fingerprintItemListData.value.length,
|
itemCount: state.fingerprintItemListData.value.length,
|
||||||
itemBuilder: (BuildContext c, int index) {
|
itemBuilder: (BuildContext c, int index) {
|
||||||
final FingerprintItemData fingerprintItemData = state.fingerprintItemListData.value[index];
|
final FingerprintItemData fingerprintItemData =
|
||||||
return Slidable(
|
state.fingerprintItemListData.value[index];
|
||||||
key:ValueKey(fingerprintItemData.fingerprintId),
|
return Slidable(
|
||||||
endActionPane: ActionPane(
|
key: ValueKey(fingerprintItemData.fingerprintId),
|
||||||
extentRatio: 0.2,
|
endActionPane: ActionPane(
|
||||||
motion: const ScrollMotion(),
|
extentRatio: 0.2,
|
||||||
children: <Widget>[
|
motion: const ScrollMotion(),
|
||||||
SlidableAction(
|
children: <Widget>[
|
||||||
onPressed: (BuildContext context){
|
SlidableAction(
|
||||||
ShowTipView().showIosTipWithContentDialog('确定要删除吗?'.tr, () async {
|
onPressed: (BuildContext context) {
|
||||||
state.isDeletAll = false;
|
ShowTipView().showIosTipWithContentDialog(
|
||||||
state.deletKeyID = fingerprintItemData.cardId.toString();
|
'确定要删除吗?'.tr, () async {
|
||||||
state.deletCardNo = int.parse(fingerprintItemData.cardNumber!);
|
state.isDeletAll = false;
|
||||||
logic.senderAddICCard();
|
state.deletKeyID =
|
||||||
});
|
fingerprintItemData.cardId.toString();
|
||||||
},
|
state.deletCardNo =
|
||||||
backgroundColor: Colors.red,
|
int.parse(fingerprintItemData.cardNumber!);
|
||||||
foregroundColor: Colors.white,
|
logic.senderAddICCard();
|
||||||
label: '删除'.tr,
|
});
|
||||||
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
},
|
||||||
),
|
backgroundColor: Colors.red,
|
||||||
],
|
foregroundColor: Colors.white,
|
||||||
|
label: '删除'.tr,
|
||||||
|
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: _keyItem(
|
||||||
|
'images/icon_card.png',
|
||||||
|
fingerprintItemData.cardName!,
|
||||||
|
logic.getKeyType(fingerprintItemData),
|
||||||
|
logic.getKeyDateType(fingerprintItemData), () async {
|
||||||
|
final data = await Get.toNamed(Routers.cardDetailPage,
|
||||||
|
arguments: <String, FingerprintItemData>{
|
||||||
|
'fingerprintItemData': fingerprintItemData,
|
||||||
|
});
|
||||||
|
if (data != null) {
|
||||||
|
getHttpData(isRefresh: true);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (BuildContext context, int index) {
|
||||||
|
return const Divider(
|
||||||
|
height: 1,
|
||||||
|
color: AppColors.greyLineColor,
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
child: _keyItem(
|
)
|
||||||
'images/icon_card.png',
|
: NoData(
|
||||||
fingerprintItemData.cardName!,
|
noDataHeight: 1.sh -
|
||||||
logic.getKeyType(fingerprintItemData),
|
ScreenUtil().statusBarHeight -
|
||||||
logic.getKeyDateType(fingerprintItemData), () async {
|
ScreenUtil().bottomBarHeight -
|
||||||
final data = await Get.toNamed(
|
190.h -
|
||||||
Routers.cardDetailPage, arguments: <String, FingerprintItemData>{
|
64.h));
|
||||||
'fingerprintItemData': fingerprintItemData,
|
|
||||||
});
|
|
||||||
if (data != null) {
|
|
||||||
logic.pageNo = 1;
|
|
||||||
getHttpData();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
separatorBuilder: (BuildContext context, int index) {
|
|
||||||
return const Divider(
|
|
||||||
height: 1,
|
|
||||||
color: AppColors.greyLineColor,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
) : NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 190.h - 64.h));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String ifInvalidation, String showTime, Function() action) {
|
Widget _keyItem(String lockTypeIcon, String lockTypeTitle,
|
||||||
|
String ifInvalidation, String showTime, Function() action) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: action,
|
onTap: action,
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -201,14 +211,13 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(
|
child: Text(lockTypeTitle,
|
||||||
lockTypeTitle,
|
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor)
|
style: TextStyle(
|
||||||
),
|
fontSize: 24.sp,
|
||||||
|
color: AppColors.blackColor)),
|
||||||
),
|
),
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import '../../../../../tools/commonDataManage.dart';
|
|||||||
import '../../../../../tools/custom_bottom_sheet.dart';
|
import '../../../../../tools/custom_bottom_sheet.dart';
|
||||||
import '../../../../../tools/dateTool.dart';
|
import '../../../../../tools/dateTool.dart';
|
||||||
import '../../../../../tools/eventBusEventManage.dart';
|
import '../../../../../tools/eventBusEventManage.dart';
|
||||||
|
import '../../../../../tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../../tools/showTipView.dart';
|
import '../../../../../tools/showTipView.dart';
|
||||||
import '../../../lockOperatingRecord/keyOperationRecord_entity.dart';
|
import '../../../lockOperatingRecord/keyOperationRecord_entity.dart';
|
||||||
|
|
||||||
@ -22,6 +23,10 @@ typedef BlockIsHaveAllDataCallback = void Function(bool isAllData);
|
|||||||
class ElectronicKeyDetailLogic extends BaseGetXController {
|
class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||||
final ElectronicKeyDetailState state = ElectronicKeyDetailState();
|
final ElectronicKeyDetailState state = ElectronicKeyDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
//修改钥匙名称请求
|
//修改钥匙名称请求
|
||||||
Future<void> modifyKeyNameRequest() async {
|
Future<void> modifyKeyNameRequest() async {
|
||||||
if (state.changeNameController.text.isEmpty) {
|
if (state.changeNameController.text.isEmpty) {
|
||||||
|
|||||||
@ -147,7 +147,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
|||||||
visible: state.keyType.value == 4 ? true : false,
|
visible: state.keyType.value == 4 ? true : false,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
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 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../../common/XSConstantMacro/XSConstantMacro.dart';
|
import '../../../../../common/XSConstantMacro/XSConstantMacro.dart';
|
||||||
import '../../../../../network/api_repository.dart';
|
import '../../../../../network/api_repository.dart';
|
||||||
import '../../../../../tools/dateTool.dart';
|
import '../../../../../tools/dateTool.dart';
|
||||||
@ -9,6 +10,10 @@ import 'massSendElectronicKey_state.dart';
|
|||||||
class MassSendElectronicKeyLogic extends BaseGetXController {
|
class MassSendElectronicKeyLogic extends BaseGetXController {
|
||||||
MassSendElectronicKeyState state = MassSendElectronicKeyState();
|
MassSendElectronicKeyState state = MassSendElectronicKeyState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
//群发钥匙检查
|
//群发钥匙检查
|
||||||
Future<void> massKeyChecksRequest() async {
|
Future<void> massKeyChecksRequest() async {
|
||||||
String getFailureDateTime = '0';
|
String getFailureDateTime = '0';
|
||||||
|
|||||||
@ -176,7 +176,7 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
),
|
),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
|
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -261,7 +261,7 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
children: [
|
children: [
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr,
|
leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()),
|
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()),
|
||||||
action: () {}),
|
action: () {}),
|
||||||
@ -276,7 +276,7 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
children: [
|
children: [
|
||||||
Obx(() => CommonItem(
|
Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
||||||
rightTitle: "${state.beginTime.value}\n${state.endTime.value}",
|
rightTitle: '${state.beginTime.value}\n${state.endTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -297,10 +297,10 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
}
|
}
|
||||||
})),
|
})),
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.weekdaysList.isNotEmpty ? true : false,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效日".tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(",").toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -323,9 +323,9 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
|
|||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.effectiveDateTime.value.isNotEmpty,
|
visible: state.effectiveDateTime.value.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效时间".tr,
|
leftTitel: '有效时间'.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${state.effectiveDateTime.value}-${state.failureDateTime.value}",
|
'${state.effectiveDateTime.value}-${state.failureDateTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var result = await Get.toNamed(
|
var result = await Get.toNamed(
|
||||||
|
|||||||
@ -6,12 +6,13 @@ import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/author
|
|||||||
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart';
|
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
|
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
|
||||||
import 'package:star_lock/network/api_repository.dart';
|
import 'package:star_lock/network/api_repository.dart';
|
||||||
import 'package:star_lock/tools/regularExpression.dart';
|
|
||||||
import 'package:star_lock/tools/showCupertinoAlertView.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/dateTool.dart';
|
import 'package:star_lock/tools/dateTool.dart';
|
||||||
import 'package:star_lock/tools/eventBusEventManage.dart';
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
import 'package:star_lock/tools/regularExpression.dart';
|
||||||
|
import 'package:star_lock/tools/showCupertinoAlertView.dart';
|
||||||
import 'package:star_lock/tools/showTipView.dart';
|
import 'package:star_lock/tools/showTipView.dart';
|
||||||
import 'package:star_lock/tools/storage.dart';
|
import 'package:star_lock/tools/storage.dart';
|
||||||
|
|
||||||
@ -20,6 +21,10 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
|
|||||||
String type;
|
String type;
|
||||||
final SendElectronicKeyViewState state = SendElectronicKeyViewState();
|
final SendElectronicKeyViewState state = SendElectronicKeyViewState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|||||||
@ -257,7 +257,7 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
|
|||||||
visible: logic.state.weekdaysList.isNotEmpty,
|
visible: logic.state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: logic.state.weekdaysList.join(',').toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -3,12 +3,17 @@ import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/face/addFaceType/addFaceType_state.dart';
|
import 'package:star_lock/main/lockDetail/face/addFaceType/addFaceType_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/dateTool.dart';
|
import 'package:star_lock/tools/dateTool.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
|
|
||||||
class AddFaceTypeLogic extends BaseGetXController {
|
class AddFaceTypeLogic extends BaseGetXController {
|
||||||
AddFaceTypeState state = AddFaceTypeState();
|
AddFaceTypeState state = AddFaceTypeState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 添加指纹
|
// 添加指纹
|
||||||
Future<void> addFaceData() async {
|
Future<void> addFaceData() async {
|
||||||
int faceType = 0; // 永久:1;限时2,单次3,循环:4
|
int faceType = 0; // 永久:1;限时2,单次3,循环:4
|
||||||
|
|||||||
@ -209,7 +209,7 @@ class _AddFaceTypePageState extends State<AddFaceTypePage> with SingleTickerProv
|
|||||||
visible: state.weekdaysList.isNotEmpty,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(',').toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -3,11 +3,14 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
|
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart';
|
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/dateTool.dart';
|
import 'package:star_lock/tools/dateTool.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../blue/blue_manage.dart';
|
import '../../../../blue/blue_manage.dart';
|
||||||
import '../../../../blue/io_reply.dart';
|
import '../../../../blue/io_reply.dart';
|
||||||
import '../../../../blue/io_tool/io_tool.dart';
|
import '../../../../blue/io_tool/io_tool.dart';
|
||||||
@ -19,6 +22,10 @@ import '../../../../tools/storage.dart';
|
|||||||
class FaceDetailLogic extends BaseGetXController {
|
class FaceDetailLogic extends BaseGetXController {
|
||||||
FaceDetailState state = FaceDetailState();
|
FaceDetailState state = FaceDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 获取解析后的数据
|
// 获取解析后的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
|
|||||||
@ -117,7 +117,7 @@ class _FaceDetailPageState extends State<FaceDetailPage> with RouteAware {
|
|||||||
visible: state.keyType.value == 4,
|
visible: state.keyType.value == 4,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
import '../../../../tools/dateTool.dart';
|
import '../../../../tools/dateTool.dart';
|
||||||
@ -10,6 +11,10 @@ import 'addFingerprintType_state.dart';
|
|||||||
class AddFingerprintTypeLogic extends BaseGetXController{
|
class AddFingerprintTypeLogic extends BaseGetXController{
|
||||||
AddFingerprintState state = AddFingerprintState();
|
AddFingerprintState state = AddFingerprintState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 添加指纹
|
// 添加指纹
|
||||||
Future<void> addFingerprintsData() async {
|
Future<void> addFingerprintsData() async {
|
||||||
int fingerprintType = 0; // 永久:1;限时2,单次3,循环:4
|
int fingerprintType = 0; // 永久:1;限时2,单次3,循环:4
|
||||||
|
|||||||
@ -202,7 +202,7 @@ class _AddFingerprintTypePageState extends State<AddFingerprintTypePage> with Si
|
|||||||
visible: state.weekdaysList.isNotEmpty,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(',').toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../blue/blue_manage.dart';
|
import '../../../../blue/blue_manage.dart';
|
||||||
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
|
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
|
||||||
import '../../../../blue/io_reply.dart';
|
import '../../../../blue/io_reply.dart';
|
||||||
@ -20,6 +21,10 @@ import 'fingerprintDetail_state.dart';
|
|||||||
class FingerprintDetailLogic extends BaseGetXController{
|
class FingerprintDetailLogic extends BaseGetXController{
|
||||||
FingerprintDetailState state = FingerprintDetailState();
|
FingerprintDetailState state = FingerprintDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 获取解析后的数据
|
// 获取解析后的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
|
|||||||
@ -120,7 +120,7 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage>
|
|||||||
visible: state.keyType.value == 4,
|
visible: state.keyType.value == 4,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||||
@ -18,15 +17,17 @@ import '../../../../tools/storage.dart';
|
|||||||
import 'fingerprintListData_entity.dart';
|
import 'fingerprintListData_entity.dart';
|
||||||
import 'fingerprintList_state.dart';
|
import 'fingerprintList_state.dart';
|
||||||
|
|
||||||
class FingerprintListLogic extends BaseGetXController{
|
class FingerprintListLogic extends BaseGetXController {
|
||||||
FingerprintListState state = FingerprintListState();
|
FingerprintListState state = FingerprintListState();
|
||||||
|
|
||||||
// 获取解析后的数据
|
// 获取解析后的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
_replySubscription =
|
||||||
|
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||||
// 添加指纹开始(此处用作删除指纹)
|
// 添加指纹开始(此处用作删除指纹)
|
||||||
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
if ((reply is SenderAddFingerprintWithTimeCycleCoercionReply) &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyAddFingerprintBegin(reply);
|
_replyAddFingerprintBegin(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
Future<void> _replyAddFingerprintBegin(Reply reply) async {
|
Future<void> _replyAddFingerprintBegin(Reply reply) async {
|
||||||
final int status = reply.data[2];
|
final int status = reply.data[2];
|
||||||
|
|
||||||
switch(status){
|
switch (status) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
//成功
|
//成功
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
@ -54,10 +55,13 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<int> token = reply.data.sublist(5, 9);
|
final List<int> token = reply.data.sublist(5, 9);
|
||||||
@ -65,25 +69,24 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
Storage.setStringList(saveBlueToken, saveStrList);
|
Storage.setStringList(saveBlueToken, saveStrList);
|
||||||
|
|
||||||
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||||
keyID:state.deletKeyID,
|
keyID: state.deletKeyID,
|
||||||
userID:(await Storage.getUid())!,
|
userID: (await Storage.getUid())!,
|
||||||
fingerNo:state.deletFingerNo,
|
fingerNo: state.deletFingerNo,
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isAdmin:0,
|
isAdmin: 0,
|
||||||
isForce:0, // 是否是胁迫
|
isForce: 0, // 是否是胁迫
|
||||||
isRound:0, // 是否是循环
|
isRound: 0, // 是否是循环
|
||||||
weekRound:0, // 周循环
|
weekRound: 0, // 周循环
|
||||||
startDate: 0x11223344,
|
startDate: 0x11223344,
|
||||||
endDate: 0x11223344,
|
endDate: 0x11223344,
|
||||||
startTime:'0',
|
startTime: '0',
|
||||||
endTime:'0',
|
endTime: '0',
|
||||||
needAuthor:1,
|
needAuthor: 1,
|
||||||
signKey:signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey:getPrivateKeyList,
|
privateKey: getPrivateKeyList,
|
||||||
token: token,
|
token: token,
|
||||||
isBeforeAddUser: false
|
isBeforeAddUser: false);
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//失败
|
//失败
|
||||||
@ -245,81 +248,124 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
// 删除指纹
|
// 删除指纹
|
||||||
Future<void> senderAddFingerprint() async {
|
Future<void> senderAddFingerprint() async {
|
||||||
showEasyLoading();
|
showEasyLoading();
|
||||||
showBlueConnetctToastTimer(action: (){
|
showBlueConnetctToastTimer(action: () {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
});
|
});
|
||||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
|
|
||||||
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||||
keyID:state.deletKeyID,
|
keyID: state.deletKeyID,
|
||||||
userID:(await Storage.getUid())!,
|
userID: (await Storage.getUid())!,
|
||||||
fingerNo:state.deletFingerNo,
|
fingerNo: state.deletFingerNo,
|
||||||
useCountLimit:0xffff,
|
useCountLimit: 0xffff,
|
||||||
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部
|
||||||
isAdmin:0,
|
isAdmin: 0,
|
||||||
isForce:0, // 是否是胁迫
|
isForce: 0, // 是否是胁迫
|
||||||
isRound:0, // 是否是循环
|
isRound: 0, // 是否是循环
|
||||||
weekRound:0, // 周循环
|
weekRound: 0, // 周循环
|
||||||
startDate: 0x11223344,
|
startDate: 0x11223344,
|
||||||
endDate: 0x11223344,
|
endDate: 0x11223344,
|
||||||
startTime:'0',
|
startTime: '0',
|
||||||
endTime:'0',
|
endTime: '0',
|
||||||
needAuthor:1,
|
needAuthor: 1,
|
||||||
signKey:signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey:getPrivateKeyList,
|
privateKey: getPrivateKeyList,
|
||||||
token: getTokenList,
|
token: getTokenList,
|
||||||
isBeforeAddUser: false
|
isBeforeAddUser: false);
|
||||||
);
|
} else if (deviceConnectionState ==
|
||||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
|
BluetoothConnectionState.disconnected) {
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
if(state.ifCurrentScreen.value == true){
|
if (state.ifCurrentScreen.value == true) {
|
||||||
showBlueConnetctToast();
|
showBlueConnetctToast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* //请求密码钥匙列表
|
||||||
|
Future<PasswordKeyListEntity> mockNetworkDataRequest(
|
||||||
|
{required bool isRefresh}) async {
|
||||||
|
// 如果是下拉刷新,清空已有数据
|
||||||
|
if (isRefresh) {
|
||||||
|
state.itemDataList.clear();
|
||||||
|
pageNo = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
final PasswordKeyListEntity entity = await ApiRepository.to.passwordKeyList(
|
||||||
|
state.keyInfo.value.keyStatus.toString(),
|
||||||
|
state.keyInfo.value.lockId.toString(),
|
||||||
|
pageNo.toString(),
|
||||||
|
pageSize.toString(),
|
||||||
|
state.searchController.text);
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
// 更新数据列表
|
||||||
|
state.itemDataList.addAll(entity.data!.itemList!);
|
||||||
|
// 更新页码
|
||||||
|
pageNo++;
|
||||||
|
}
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// 获取指纹列表
|
// 获取指纹列表
|
||||||
Future<FingerprintListDataEntity> getFingerprintsListData() async{
|
Future<FingerprintListDataEntity> getFingerprintsListData(
|
||||||
// state.fingerprintItemListData.value.clear();
|
{required bool isRefresh}) async {
|
||||||
final FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData(
|
// 如果是下拉刷新,清空已有数据
|
||||||
|
if (isRefresh) {
|
||||||
|
state.fingerprintItemListData.clear();
|
||||||
|
pageNo = 1;
|
||||||
|
}
|
||||||
|
final FingerprintListDataEntity entity =
|
||||||
|
await ApiRepository.to.getFingerprintsListData(
|
||||||
lockId: state.lockId.value.toString(),
|
lockId: state.lockId.value.toString(),
|
||||||
pageNo: pageNo.toString(),
|
pageNo: pageNo.toString(),
|
||||||
pageSize: pageSize.toString(),
|
pageSize: pageSize.toString(),
|
||||||
searchStr: state.searchController.text,
|
searchStr: state.searchController.text,
|
||||||
);
|
);
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
// if (entity.errorCode!.codeIsSuccessful) {
|
||||||
if (pageNo == 1) {
|
// if (pageNo == 1) {
|
||||||
state.fingerprintItemListData.value = entity.data!.list!;
|
// state.fingerprintItemListData.value = entity.data!.list!;
|
||||||
pageNo++;
|
// pageNo++;
|
||||||
} else {
|
// } else {
|
||||||
if (entity.data!.list!.isNotEmpty) {
|
// if (entity.data!.list!.isNotEmpty) {
|
||||||
state.fingerprintItemListData.value.addAll(entity.data!.list!);
|
// state.fingerprintItemListData.value.addAll(entity.data!.list!);
|
||||||
pageNo++;
|
// pageNo++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
// 更新数据列表
|
||||||
|
state.fingerprintItemListData.addAll(entity.data!.list!);
|
||||||
|
// 更新页码
|
||||||
|
pageNo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重置所有的指纹
|
// 重置所有的指纹
|
||||||
Future<void> deletAllFingerprintsData() async{
|
Future<void> deletAllFingerprintsData() async {
|
||||||
String fingerprintId = '';
|
String fingerprintId = '';
|
||||||
String type = '1';
|
String type = '1';
|
||||||
if(state.isDeletAll == false){
|
if (state.isDeletAll == false) {
|
||||||
fingerprintId = state.deletKeyID;
|
fingerprintId = state.deletKeyID;
|
||||||
type = '0';
|
type = '0';
|
||||||
}
|
}
|
||||||
@ -327,18 +373,15 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
fingerprintId: fingerprintId,
|
fingerprintId: fingerprintId,
|
||||||
lockId: state.lockId.value.toString(),
|
lockId: state.lockId.value.toString(),
|
||||||
type: type,
|
type: type,
|
||||||
deleteType:'1'
|
deleteType: '1');
|
||||||
);
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
if (state.isDeletAll == false) {
|
||||||
if(state.isDeletAll == false){
|
showToast('删除成功'.tr, something: () {
|
||||||
showToast('删除成功'.tr, something:(){
|
getFingerprintsListData(isRefresh: true);
|
||||||
pageNo = 1;
|
|
||||||
getFingerprintsListData();
|
|
||||||
});
|
});
|
||||||
}else{
|
} else {
|
||||||
showToast('重置成功'.tr, something:(){
|
showToast('重置成功'.tr, something: () {
|
||||||
pageNo = 1;
|
getFingerprintsListData(isRefresh: true);
|
||||||
getFingerprintsListData();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,35 +390,39 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
// 监听修改完详情之后刷新列表
|
// 监听修改完详情之后刷新列表
|
||||||
late StreamSubscription _teamEvent;
|
late StreamSubscription _teamEvent;
|
||||||
void _initRefreshAction() {
|
void _initRefreshAction() {
|
||||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
|
_teamEvent = eventBus
|
||||||
pageNo = 1;
|
.on<OtherTypeRefreshListEvent>()
|
||||||
getFingerprintsListData();
|
.listen((OtherTypeRefreshListEvent event) {
|
||||||
|
getFingerprintsListData(isRefresh: true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
String getKeyType(FingerprintItemData fingerprintItemData){
|
String getKeyType(FingerprintItemData fingerprintItemData) {
|
||||||
// fingerprintStatus 1:正常 2:失效
|
// fingerprintStatus 1:正常 2:失效
|
||||||
String keyTypeStr = '';//
|
String keyTypeStr = ''; //
|
||||||
// (fingerprintItemData.fingerprintType! != 1) ? (fingerprintItemData.endDate! < DateTime.now().millisecondsSinceEpoch ? "已失效" : "") : ""
|
// (fingerprintItemData.fingerprintType! != 1) ? (fingerprintItemData.endDate! < DateTime.now().millisecondsSinceEpoch ? "已失效" : "") : ""
|
||||||
if(fingerprintItemData.fingerprintStatus == 1){
|
if (fingerprintItemData.fingerprintStatus == 1) {
|
||||||
if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){
|
if (fingerprintItemData.startDate! >
|
||||||
|
DateTime.now().millisecondsSinceEpoch) {
|
||||||
keyTypeStr = '未生效'.tr;
|
keyTypeStr = '未生效'.tr;
|
||||||
}
|
}
|
||||||
|
} else if (fingerprintItemData.fingerprintStatus == 2) {
|
||||||
}else if(fingerprintItemData.fingerprintStatus == 2){
|
|
||||||
keyTypeStr = '已失效'.tr;
|
keyTypeStr = '已失效'.tr;
|
||||||
}
|
}
|
||||||
return keyTypeStr;
|
return keyTypeStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getKeyDateType(FingerprintItemData fingerprintItemData){
|
String getKeyDateType(FingerprintItemData fingerprintItemData) {
|
||||||
String keyDateTypeStr = '';// 永久:1;限时2,单次3,循环:4
|
String keyDateTypeStr = ''; // 永久:1;限时2,单次3,循环:4
|
||||||
if(fingerprintItemData.fingerprintType! == 1){
|
if (fingerprintItemData.fingerprintType! == 1) {
|
||||||
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} ${"永久".tr}";
|
keyDateTypeStr =
|
||||||
}else if(fingerprintItemData.fingerprintType! == 2){
|
"${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} ${"永久".tr}";
|
||||||
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
|
} else if (fingerprintItemData.fingerprintType! == 2) {
|
||||||
}else if(fingerprintItemData.fingerprintType! == 4){
|
keyDateTypeStr =
|
||||||
keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
|
'${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
|
||||||
|
} else if (fingerprintItemData.fingerprintType! == 4) {
|
||||||
|
keyDateTypeStr =
|
||||||
|
'${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
|
||||||
}
|
}
|
||||||
return keyDateTypeStr;
|
return keyDateTypeStr;
|
||||||
}
|
}
|
||||||
@ -385,8 +432,8 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
super.onReady();
|
super.onReady();
|
||||||
|
|
||||||
// 获取是否是演示模式 演示模式不获取接口
|
// 获取是否是演示模式 演示模式不获取接口
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if(isDemoMode == false){
|
if (isDemoMode == false) {
|
||||||
_initReplySubscription();
|
_initReplySubscription();
|
||||||
|
|
||||||
_initRefreshAction();
|
_initRefreshAction();
|
||||||
@ -402,10 +449,10 @@ class FingerprintListLogic extends BaseGetXController{
|
|||||||
Future<void> onClose() async {
|
Future<void> onClose() async {
|
||||||
super.onClose();
|
super.onClose();
|
||||||
|
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if(isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
_replySubscription.cancel();
|
_replySubscription.cancel();
|
||||||
_teamEvent.cancel();
|
_teamEvent.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
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_easyloading/flutter_easyloading.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
@ -9,12 +8,10 @@ import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprin
|
|||||||
|
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../app_settings/app_colors.dart';
|
import '../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../blue/blue_manage.dart';
|
|
||||||
import '../../../../tools/EasyRefreshTool.dart';
|
import '../../../../tools/EasyRefreshTool.dart';
|
||||||
import '../../../../tools/appRouteObserver.dart';
|
import '../../../../tools/appRouteObserver.dart';
|
||||||
import '../../../../tools/keySearchWidget.dart';
|
import '../../../../tools/keySearchWidget.dart';
|
||||||
import '../../../../tools/noData.dart';
|
import '../../../../tools/noData.dart';
|
||||||
import '../../../../tools/showIosTipView.dart';
|
|
||||||
import '../../../../tools/showTipView.dart';
|
import '../../../../tools/showTipView.dart';
|
||||||
import '../../../../tools/storage.dart';
|
import '../../../../tools/storage.dart';
|
||||||
import '../../../../tools/submitBtn.dart';
|
import '../../../../tools/submitBtn.dart';
|
||||||
@ -30,14 +27,17 @@ class FingerprintListPage extends StatefulWidget {
|
|||||||
State<FingerprintListPage> createState() => _FingerprintListPageState();
|
State<FingerprintListPage> createState() => _FingerprintListPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _FingerprintListPageState extends State<FingerprintListPage> with RouteAware {
|
class _FingerprintListPageState extends State<FingerprintListPage>
|
||||||
|
with RouteAware {
|
||||||
final FingerprintListLogic logic = Get.put(FingerprintListLogic());
|
final FingerprintListLogic logic = Get.put(FingerprintListLogic());
|
||||||
final FingerprintListState state = Get.find<FingerprintListLogic>().state;
|
final FingerprintListState state = Get.find<FingerprintListLogic>().state;
|
||||||
|
|
||||||
Future<void> getHttpData() async {
|
Future<void> getHttpData({required bool isRefresh}) async {
|
||||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
logic.getFingerprintsListData().then((FingerprintListDataEntity value){
|
logic
|
||||||
|
.getFingerprintsListData(isRefresh: isRefresh)
|
||||||
|
.then((FingerprintListDataEntity value) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
getHttpData();
|
getHttpData(isRefresh: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -83,20 +83,18 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: EasyRefreshTool(
|
body: EasyRefreshTool(
|
||||||
onRefresh: (){
|
onRefresh: () {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
},
|
},
|
||||||
onLoad: (){
|
onLoad: () {
|
||||||
getHttpData();
|
getHttpData(isRefresh: false);
|
||||||
},
|
},
|
||||||
child: Column(
|
child: Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
KeySearchWidget(
|
KeySearchWidget(
|
||||||
editingController: state.searchController,
|
editingController: state.searchController,
|
||||||
onSubmittedAction: () {
|
onSubmittedAction: () {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
@ -104,16 +102,16 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
),
|
),
|
||||||
Expanded(child: _buildMainUI()),
|
Expanded(child: _buildMainUI()),
|
||||||
AddBottomWhiteBtn(
|
AddBottomWhiteBtn(
|
||||||
btnName: '${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.fingerprint!.tr}',
|
btnName:
|
||||||
|
'${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.fingerprint!.tr}',
|
||||||
onClick: () async {
|
onClick: () async {
|
||||||
final data =
|
final data = await Get.toNamed(Routers.addFingerprintTypePage,
|
||||||
await Get.toNamed(Routers.addFingerprintTypePage, arguments: <String, int>{
|
arguments: <String, int>{
|
||||||
'lockId': state.lockId.value,
|
'lockId': state.lockId.value,
|
||||||
'fromType': 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
'fromType': 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
logic.pageNo = 1;
|
getHttpData(isRefresh: true);
|
||||||
getHttpData();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -127,61 +125,70 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
Widget _buildMainUI() {
|
Widget _buildMainUI() {
|
||||||
return Obx(() => state.fingerprintItemListData.value.isNotEmpty
|
return Obx(() => state.fingerprintItemListData.value.isNotEmpty
|
||||||
? SlidableAutoCloseBehavior(
|
? SlidableAutoCloseBehavior(
|
||||||
child: ListView.separated(
|
child: ListView.separated(
|
||||||
itemCount: state.fingerprintItemListData.value.length,
|
itemCount: state.fingerprintItemListData.value.length,
|
||||||
itemBuilder: (BuildContext c, int index) {
|
itemBuilder: (BuildContext c, int index) {
|
||||||
final FingerprintItemData fingerprintItemData = state.fingerprintItemListData.value[index];
|
final FingerprintItemData fingerprintItemData =
|
||||||
// 指纹
|
state.fingerprintItemListData.value[index];
|
||||||
return Slidable(
|
// 指纹
|
||||||
key:ValueKey(fingerprintItemData.fingerprintId),
|
return Slidable(
|
||||||
endActionPane: ActionPane(
|
key: ValueKey(fingerprintItemData.fingerprintId),
|
||||||
extentRatio: 0.2,
|
endActionPane: ActionPane(
|
||||||
motion: const ScrollMotion(),
|
extentRatio: 0.2,
|
||||||
children: <Widget>[
|
motion: const ScrollMotion(),
|
||||||
SlidableAction(
|
children: <Widget>[
|
||||||
onPressed: (BuildContext context){
|
SlidableAction(
|
||||||
ShowTipView().showIosTipWithContentDialog('确定要删除吗?'.tr, () async {
|
onPressed: (BuildContext context) {
|
||||||
state.isDeletAll = false;
|
ShowTipView().showIosTipWithContentDialog(
|
||||||
state.deletKeyID = fingerprintItemData.fingerprintId.toString();
|
'确定要删除吗?'.tr, () async {
|
||||||
state.deletFingerNo = int.parse(fingerprintItemData.fingerprintNumber!);
|
state.isDeletAll = false;
|
||||||
logic.senderAddFingerprint();
|
state.deletKeyID =
|
||||||
});
|
fingerprintItemData.fingerprintId.toString();
|
||||||
},
|
state.deletFingerNo = int.parse(
|
||||||
backgroundColor: Colors.red,
|
fingerprintItemData.fingerprintNumber!);
|
||||||
// foregroundColor: Colors.white,
|
logic.senderAddFingerprint();
|
||||||
label: '删除'.tr,
|
});
|
||||||
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
},
|
||||||
),
|
backgroundColor: Colors.red,
|
||||||
],
|
// foregroundColor: Colors.white,
|
||||||
|
label: '删除'.tr,
|
||||||
|
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: _keyItem(
|
||||||
|
'images/icon_fingerprint.png',
|
||||||
|
fingerprintItemData.fingerprintName!,
|
||||||
|
logic.getKeyType(fingerprintItemData),
|
||||||
|
logic.getKeyDateType(fingerprintItemData), () async {
|
||||||
|
final data = await Get.toNamed(Routers.fingerprintDetailPage,
|
||||||
|
arguments: <String, FingerprintItemData>{
|
||||||
|
'fingerprintItemData': fingerprintItemData,
|
||||||
|
});
|
||||||
|
if (data != null) {
|
||||||
|
getHttpData(isRefresh: true);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (BuildContext context, int index) {
|
||||||
|
return const Divider(
|
||||||
|
height: 1,
|
||||||
|
color: AppColors.greyLineColor,
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
child: _keyItem(
|
)
|
||||||
'images/icon_fingerprint.png',
|
: NoData(
|
||||||
fingerprintItemData.fingerprintName!,
|
noDataHeight: 1.sh -
|
||||||
logic.getKeyType(fingerprintItemData),
|
ScreenUtil().statusBarHeight -
|
||||||
logic.getKeyDateType(fingerprintItemData), () async {
|
ScreenUtil().bottomBarHeight -
|
||||||
final data = await Get.toNamed(
|
190.h -
|
||||||
Routers.fingerprintDetailPage,
|
64.h));
|
||||||
arguments: <String, FingerprintItemData>{
|
|
||||||
'fingerprintItemData': fingerprintItemData,
|
|
||||||
});
|
|
||||||
if (data != null) {
|
|
||||||
logic.pageNo = 1;
|
|
||||||
getHttpData();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
separatorBuilder: (BuildContext context, int index) {
|
|
||||||
return const Divider(
|
|
||||||
height: 1,
|
|
||||||
color: AppColors.greyLineColor,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
) : NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 190.h - 64.h));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String ifInvalidation, String showTime, Function() action) {
|
Widget _keyItem(String lockTypeIcon, String lockTypeTitle,
|
||||||
|
String ifInvalidation, String showTime, Function() action) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: action,
|
onTap: action,
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -205,24 +212,24 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: ifInvalidation.isNotEmpty ? 1.sw - 110.w - 100.w : 1.sw - 110.w - 50.w,
|
width: ifInvalidation.isNotEmpty
|
||||||
|
? 1.sw - 110.w - 100.w
|
||||||
|
: 1.sw - 110.w - 50.w,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(
|
child: Text(lockTypeTitle,
|
||||||
lockTypeTitle,
|
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor)
|
style: TextStyle(
|
||||||
),
|
fontSize: 24.sp,
|
||||||
|
color: AppColors.blackColor)),
|
||||||
),
|
),
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(ifInvalidation,
|
Text(ifInvalidation,
|
||||||
style: TextStyle(
|
style: TextStyle(fontSize: 22.sp, color: Colors.red)),
|
||||||
fontSize: 22.sp, color: Colors.red)),
|
|
||||||
SizedBox(width: 10.w),
|
SizedBox(width: 10.w),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -301,5 +308,4 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
|
|||||||
}
|
}
|
||||||
state.ifCurrentScreen.value = false;
|
state.ifCurrentScreen.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,12 +2,17 @@ import 'package:get/get.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/iris/addIrisType/addIrisType_state.dart';
|
import 'package:star_lock/main/lockDetail/iris/addIrisType/addIrisType_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/dateTool.dart';
|
import 'package:star_lock/tools/dateTool.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
|
|
||||||
class AddIrisTypeLogic extends BaseGetXController {
|
class AddIrisTypeLogic extends BaseGetXController {
|
||||||
AddIrisTypeState state = AddIrisTypeState();
|
AddIrisTypeState state = AddIrisTypeState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 添加虹膜
|
// 添加虹膜
|
||||||
void addIrisData() async {
|
void addIrisData() async {
|
||||||
var irisType = 0; // 永久:1;限时2,单次3,循环:4
|
var irisType = 0; // 永久:1;限时2,单次3,循环:4
|
||||||
|
|||||||
@ -57,14 +57,14 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
if (state.selectType.value == "1") {
|
if (state.selectType.value == '1') {
|
||||||
state.beginTime.value = DateTool().dateToYMDHNString(
|
state.beginTime.value = DateTool().dateToYMDHNString(
|
||||||
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
||||||
state.endTime.value = DateTool().dateToYMDHNString(
|
state.endTime.value = DateTool().dateToYMDHNString(
|
||||||
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
||||||
} else {
|
} else {
|
||||||
state.beginTime.value = ""; //默认为当前时间
|
state.beginTime.value = ''; //默认为当前时间
|
||||||
state.endTime.value = ""; //默认为当前时间
|
state.endTime.value = ''; //默认为当前时间
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
Container(height: 10.h),
|
Container(height: 10.h),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: titleStr,
|
leftTitel: titleStr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: getTFWidget(rightTitle)),
|
rightWidget: getTFWidget(rightTitle)),
|
||||||
Container(height: 10.h),
|
Container(height: 10.h),
|
||||||
@ -174,7 +174,7 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
children: [
|
children: [
|
||||||
Obx(() => CommonItem(
|
Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
||||||
rightTitle: "${state.beginTime.value}\n${state.endTime.value}",
|
rightTitle: '${state.beginTime.value}\n${state.endTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -197,8 +197,8 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.weekdaysList.isNotEmpty ? true : false,
|
visible: state.weekdaysList.isNotEmpty ? true : false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效日",
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(",").toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -221,9 +221,9 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.effectiveDateTime.value.isNotEmpty,
|
visible: state.effectiveDateTime.value.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效时间".tr,
|
leftTitel: '有效时间'.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${state.effectiveDateTime.value}-${state.failureDateTime.value}",
|
'${state.effectiveDateTime.value}-${state.failureDateTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
||||||
@ -255,8 +255,8 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
? true
|
? true
|
||||||
: false,
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "是否为管理员".tr,
|
leftTitel: '是否为管理员'.tr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isTipsImg: false,
|
isTipsImg: false,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: SizedBox(
|
rightWidget: SizedBox(
|
||||||
@ -268,13 +268,13 @@ class _AddIrisTypePageState extends State<AddIrisTypePage> {
|
|||||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
if (state.nameController.text.isEmpty) {
|
if (state.nameController.text.isEmpty) {
|
||||||
logic.showToast("请输入姓名");
|
logic.showToast('请输入姓名');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logic.checkIrisNameDuplicated(state.nameController.text);
|
logic.checkIrisNameDuplicated(state.nameController.text);
|
||||||
} else {
|
} else {
|
||||||
// Get.toNamed(Routers.selectLockTypePage);
|
// Get.toNamed(Routers.selectLockTypePage);
|
||||||
logic.showToast("演示模式");
|
logic.showToast('演示模式');
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import 'package:star_lock/blue/io_type.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/iris/irisDetail/irisDetail_state.dart';
|
import 'package:star_lock/main/lockDetail/iris/irisDetail/irisDetail_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/eventBusEventManage.dart';
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../blue/blue_manage.dart';
|
import '../../../../blue/blue_manage.dart';
|
||||||
// import '../../../../blue/io_protocol/io_addICCard.dart';
|
// import '../../../../blue/io_protocol/io_addICCard.dart';
|
||||||
@ -20,6 +21,10 @@ import '../../../../tools/storage.dart';
|
|||||||
class IrisDetailLogic extends BaseGetXController {
|
class IrisDetailLogic extends BaseGetXController {
|
||||||
IrisDetailState state = IrisDetailState();
|
IrisDetailState state = IrisDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 监听设备返回的数据
|
// 监听设备返回的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
|
|||||||
@ -108,7 +108,7 @@ class _CardDetailPageState extends State<CardDetailPage> with RouteAware {
|
|||||||
visible: state.keyType.value == 4 ? true : false,
|
visible: state.keyType.value == 4 ? true : false,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
|
|||||||
@ -253,6 +253,71 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
ShowTipView().showSureAlertDialog(
|
||||||
|
"${"锁电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}");
|
||||||
|
},
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: <Widget>[
|
||||||
|
Image.asset(showElectricIcon(state.electricQuantity.value),
|
||||||
|
width: 30.w, height: 24.w),
|
||||||
|
SizedBox(width: 2.w),
|
||||||
|
Text('${state.electricQuantity.value}%',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.sp,
|
||||||
|
color: AppColors.darkGrayTextColor)),
|
||||||
|
SizedBox(width: 2.w),
|
||||||
|
Icon(
|
||||||
|
Icons.info, // 使用内置的 warning 图标,它是一个叹号
|
||||||
|
color: AppColors.mainColor, // 设置图标颜色为红色
|
||||||
|
size: 25.w, // 设置图标大小为 30
|
||||||
|
),
|
||||||
|
SizedBox(width: 20.w),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 15.h,
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: state
|
||||||
|
.keyInfos.value.lockFeature!.isSupportBackupBattery ==
|
||||||
|
1,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: <Widget>[
|
||||||
|
FlavorsImg(
|
||||||
|
child: Image.asset(
|
||||||
|
showElectricIcon(
|
||||||
|
state.electricQuantityStandby.value),
|
||||||
|
width: 30.w,
|
||||||
|
height: 24.w),
|
||||||
|
),
|
||||||
|
SizedBox(width: 2.w),
|
||||||
|
Text('${state.electricQuantityStandby.value}%',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.sp,
|
||||||
|
color: AppColors.darkGrayTextColor)),
|
||||||
|
SizedBox(width: 2.w),
|
||||||
|
FlavorsImg(
|
||||||
|
child: Icon(
|
||||||
|
Icons.info, // 使用内置的 warning 图标,它是一个叹号
|
||||||
|
color: AppColors.mainColor, // 设置图标颜色为红色
|
||||||
|
size: 25.w, // 设置图标大小为 30
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 20.w),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (state.openDoorBtnisUneable.value == true) {
|
if (state.openDoorBtnisUneable.value == true) {
|
||||||
@ -282,7 +347,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
spreadRadius: 0,
|
spreadRadius: 0,
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
margin: EdgeInsets.only(top: 20.h),
|
margin: EdgeInsets.only(top: 0.h),
|
||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: AlignmentDirectional.center,
|
alignment: AlignmentDirectional.center,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
@ -326,10 +391,10 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(left: 15.w, right: 00.w, bottom: 15.h),
|
padding: EdgeInsets.only(left: 15.w, right: 00.w, bottom: 15.h),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Column(
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Text(
|
Text(
|
||||||
TranslationLoader
|
TranslationLoader
|
||||||
@ -339,76 +404,12 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
fontSize: 20.sp,
|
fontSize: 20.sp,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 16.h,
|
||||||
|
),
|
||||||
adminInfoView(center: false, max: false),
|
adminInfoView(center: false, max: false),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
ShowTipView().showSureAlertDialog(
|
|
||||||
"${"锁电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}");
|
|
||||||
},
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: <Widget>[
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: <Widget>[
|
|
||||||
Image.asset(
|
|
||||||
showElectricIcon(state.electricQuantity.value),
|
|
||||||
width: 30.w,
|
|
||||||
height: 24.w),
|
|
||||||
SizedBox(width: 2.w),
|
|
||||||
Text('${state.electricQuantity.value}%',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 18.sp,
|
|
||||||
color: AppColors.darkGrayTextColor)),
|
|
||||||
SizedBox(width: 2.w),
|
|
||||||
Icon(
|
|
||||||
Icons.info, // 使用内置的 warning 图标,它是一个叹号
|
|
||||||
color: AppColors.mainColor, // 设置图标颜色为红色
|
|
||||||
size: 25.w, // 设置图标大小为 30
|
|
||||||
),
|
|
||||||
SizedBox(width: 20.w),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 15.h,
|
|
||||||
),
|
|
||||||
Visibility(
|
|
||||||
visible: state.keyInfos.value.lockFeature!
|
|
||||||
.isSupportBackupBattery ==
|
|
||||||
1,
|
|
||||||
child: Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: <Widget>[
|
|
||||||
FlavorsImg(
|
|
||||||
child: Image.asset(
|
|
||||||
showElectricIcon(
|
|
||||||
state.electricQuantityStandby.value),
|
|
||||||
width: 30.w,
|
|
||||||
height: 24.w),
|
|
||||||
),
|
|
||||||
SizedBox(width: 2.w),
|
|
||||||
Text('${state.electricQuantityStandby.value}%',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 18.sp,
|
|
||||||
color: AppColors.darkGrayTextColor)),
|
|
||||||
SizedBox(width: 2.w),
|
|
||||||
FlavorsImg(
|
|
||||||
child: Icon(
|
|
||||||
Icons.info, // 使用内置的 warning 图标,它是一个叹号
|
|
||||||
color: AppColors.mainColor, // 设置图标颜色为红色
|
|
||||||
size: 25.w, // 设置图标大小为 30
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 20.w),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -760,6 +761,24 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
? AppColors.mainColor
|
? AppColors.mainColor
|
||||||
: AppColors.btnDisableColor),
|
: AppColors.btnDisableColor),
|
||||||
),
|
),
|
||||||
|
if (add) SizedBox(width: 20.w) else SizedBox(width: 40.w),
|
||||||
|
FlavorsImg(
|
||||||
|
child: Image.asset('images/main/icon_lockDetail_needNetwork.png',
|
||||||
|
width: 24.w,
|
||||||
|
height: 20.w,
|
||||||
|
color: state.keyInfos.value.appUnlockOnline == 1
|
||||||
|
? AppColors.mainColor
|
||||||
|
: AppColors.btnDisableColor),
|
||||||
|
),
|
||||||
|
SizedBox(width: 6.w),
|
||||||
|
Text(
|
||||||
|
'手机需联网',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20.sp,
|
||||||
|
color: state.keyInfos.value.appUnlockOnline == 1
|
||||||
|
? AppColors.mainColor
|
||||||
|
: AppColors.btnDisableColor),
|
||||||
|
),
|
||||||
if (add) ...<Widget>[
|
if (add) ...<Widget>[
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
|
|||||||
@ -1,21 +1,31 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:star_lock/app_settings/app_settings.dart';
|
import 'package:star_lock/app_settings/app_settings.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../../tools/baseGetXController.dart';
|
import '../../../../../tools/baseGetXController.dart';
|
||||||
import '../../../../../tools/eventBusEventManage.dart';
|
import '../../../../../tools/eventBusEventManage.dart';
|
||||||
import '../../lockSet/lockSet_logic.dart';
|
import '../../lockSet/lockSet_logic.dart';
|
||||||
import 'basicInformation_state.dart';
|
import 'basicInformation_state.dart';
|
||||||
|
|
||||||
class BasicInformationLogic extends BaseGetXController{
|
class BasicInformationLogic extends BaseGetXController {
|
||||||
final BasicInformationState state = BasicInformationState();
|
final BasicInformationState state = BasicInformationState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.lockBasicInfo.value.weekDays
|
||||||
|
?.map((e) => TimeUtils.translateWeekday(e))
|
||||||
|
.toList() ??
|
||||||
|
[];
|
||||||
|
}
|
||||||
|
|
||||||
// 下级界面修改成功后传递数据
|
// 下级界面修改成功后传递数据
|
||||||
StreamSubscription? _passCurrentLockInformationEvent;
|
StreamSubscription? _passCurrentLockInformationEvent;
|
||||||
|
|
||||||
void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) {
|
void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) {
|
||||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||||
_passCurrentLockInformationEvent = eventBus.on<PassCurrentLockInformationEvent>().listen((PassCurrentLockInformationEvent event) {
|
_passCurrentLockInformationEvent = eventBus
|
||||||
|
.on<PassCurrentLockInformationEvent>()
|
||||||
|
.listen((PassCurrentLockInformationEvent event) {
|
||||||
state.lockSetInfoData.value = event.lockSetInfoData;
|
state.lockSetInfoData.value = event.lockSetInfoData;
|
||||||
blockSetStateCallback();
|
blockSetStateCallback();
|
||||||
});
|
});
|
||||||
@ -25,7 +35,8 @@ class BasicInformationLogic extends BaseGetXController{
|
|||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
|
|
||||||
AppLog.log('厂商 vendor:${state.lockBasicInfo.value.vendor} 型号 model:${state.lockBasicInfo.value.model}');
|
AppLog.log(
|
||||||
|
'厂商 vendor:${state.lockBasicInfo.value.vendor} 型号 model:${state.lockBasicInfo.value.model}');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -33,5 +44,4 @@ class BasicInformationLogic extends BaseGetXController{
|
|||||||
super.onClose();
|
super.onClose();
|
||||||
_passCurrentLockInformationEvent?.cancel();
|
_passCurrentLockInformationEvent?.cancel();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
@ -89,7 +89,7 @@ class _BasicInformationPageState extends State<BasicInformationPage> {
|
|||||||
visible: (state.lockBasicInfo.value.keyType ?? 0) == 4,
|
visible: (state.lockBasicInfo.value.keyType ?? 0) == 4,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '有效日'.tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: (state.lockBasicInfo.value.weekDays ?? []).join(',').toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
allHeight: 70.h,
|
allHeight: 70.h,
|
||||||
isHaveLine: true),
|
isHaveLine: true),
|
||||||
)),
|
)),
|
||||||
|
|||||||
@ -8,15 +8,15 @@ 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:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:star_lock/blue/blue_manage.dart';
|
import 'package:star_lock/blue/blue_manage.dart';
|
||||||
import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart';
|
import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart';
|
||||||
import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart';
|
import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart';
|
||||||
import 'package:star_lock/blue/io_reply.dart';
|
import 'package:star_lock/blue/io_reply.dart';
|
||||||
import 'package:star_lock/blue/io_tool/io_tool.dart';
|
import 'package:star_lock/blue/io_tool/io_tool.dart';
|
||||||
import 'package:star_lock/blue/io_tool/manager_event_bus.dart';
|
import 'package:star_lock/blue/io_tool/manager_event_bus.dart';
|
||||||
import 'package:star_lock/blue/sender_manage.dart';
|
import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/version_entity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart';
|
import 'package:star_lock/network/api_repository.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/commonDataManage.dart';
|
import 'package:star_lock/tools/commonDataManage.dart';
|
||||||
import 'package:star_lock/tools/showTipView.dart';
|
import 'package:star_lock/tools/showTipView.dart';
|
||||||
@ -34,17 +34,8 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
int otaIndex = 0;
|
int otaIndex = 0;
|
||||||
Uint8List? otaBin;
|
Uint8List? otaBin;
|
||||||
int startSecond = 0;
|
int startSecond = 0;
|
||||||
Map? headJson = null;
|
Map? headJson;
|
||||||
|
FwVersionEntity? entity;
|
||||||
// 锁升级
|
|
||||||
Future<void> setLockSetGeneralSetting() async {
|
|
||||||
// var entity = await ApiRepository.to.getLockVersionInfoData(
|
|
||||||
// lockId: state.getKeyInfosData.value.lockId.toString(),
|
|
||||||
// );
|
|
||||||
// if(entity.errorCode!.codeIsSuccessful){
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
//手动升级
|
//手动升级
|
||||||
Future<void> otaUpdate() async {
|
Future<void> otaUpdate() async {
|
||||||
@ -58,6 +49,10 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
}
|
}
|
||||||
final File file = File(result.files.single.path!);
|
final File file = File(result.files.single.path!);
|
||||||
final Uint8List data = await file.readAsBytes();
|
final Uint8List data = await file.readAsBytes();
|
||||||
|
stateUpData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> stateUpData(Uint8List data) async {
|
||||||
headJson = await getHeadFile(data);
|
headJson = await getHeadFile(data);
|
||||||
if (headJson is! Map) {
|
if (headJson is! Map) {
|
||||||
return;
|
return;
|
||||||
@ -69,10 +64,10 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
final String md5Str = md5.convert(otaBin!).toString();
|
final String md5Str = md5.convert(otaBin!).toString();
|
||||||
headJson!['fwMd5'] = md5Str;
|
headJson!['fwMd5'] = md5Str;
|
||||||
ShowTipView().showIosTipWithContentDialog('未避免异常情况,请在门打开时升级'.tr, () async {
|
ShowTipView().showIosTipWithContentDialog('未避免异常情况,请在门打开时升级'.tr, () async {
|
||||||
blueOTAUpgrade(headJson!, [0, 0, 0, 0]);
|
blueOTAUpgrade(headJson!, <int>[0, 0, 0, 0]);
|
||||||
EasyLoading.show(
|
EasyLoading.show(
|
||||||
status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black);
|
status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black);
|
||||||
Future.delayed(const Duration(seconds: 4), EasyLoading.dismiss);
|
Future<void>.delayed(const Duration(seconds: 4), EasyLoading.dismiss);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,9 +76,12 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
(BluetoothConnectionState deviceConnectionState) async {
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
final privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
final signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
final String uid = await Storage.getUid() ?? '';
|
final String uid = await Storage.getUid() ?? '';
|
||||||
BlueManage().writeCharacteristicWithResponse(OTAUpgradeCommand(
|
BlueManage().writeCharacteristicWithResponse(OTAUpgradeCommand(
|
||||||
@ -236,17 +234,47 @@ class LockEscalationLogic extends BaseGetXController {
|
|||||||
return bin;
|
return bin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//检查最新版本
|
||||||
|
Future<void> checkUpData() async {
|
||||||
|
final String model = CommonDataManage().currentKeyInfo.model ?? '';
|
||||||
|
String currentVersion = CommonDataManage().currentKeyInfo.fwVersion ?? '';
|
||||||
|
if (currentVersion.split('.').length >= 3) {
|
||||||
|
currentVersion = currentVersion.split('.')[0] +
|
||||||
|
'.' +
|
||||||
|
currentVersion.split('.')[1] +
|
||||||
|
'.' +
|
||||||
|
currentVersion.split('.')[2];
|
||||||
|
}
|
||||||
|
state.showVersion.value = currentVersion;
|
||||||
|
entity = await ApiRepository.to
|
||||||
|
.getFwVersion(model: model, currentVersion: currentVersion);
|
||||||
|
state.isShowUpDataBtn.value = entity?.data?.isUpdate == 1;
|
||||||
|
state.showNewVersion.value = entity?.data?.version??'';
|
||||||
|
}
|
||||||
|
|
||||||
|
//下载升级
|
||||||
|
Future<void> downloadTheFile() async {
|
||||||
|
if (entity?.data?.downloadUrl == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String url = entity!.data!.downloadUrl!;
|
||||||
|
final http.Response response = await http.get(Uri.parse(url));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
stateUpData(response.bodyBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
setLockSetGeneralSetting();
|
checkUpData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
_replySubscription =
|
_replySubscription =
|
||||||
EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||||
if (reply is OTAUpgradeReply) {
|
if (reply is OTAUpgradeReply) {
|
||||||
if (reply.status == 0x00) {
|
if (reply.status == 0x00) {
|
||||||
//验证通过,开始发送数据包
|
//验证通过,开始发送数据包
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/tools/commonDataManage.dart';
|
||||||
|
|
||||||
import '../../../../app_settings/app_colors.dart';
|
import '../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../tools/submitBtn.dart';
|
import '../../../../tools/submitBtn.dart';
|
||||||
@ -63,29 +64,46 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
|
|||||||
SizedBox(
|
SizedBox(
|
||||||
width: 10.w,
|
width: 10.w,
|
||||||
),
|
),
|
||||||
Text(
|
Obx(() {
|
||||||
// TranslationLoader.lanKeys!.haveNewVersion!.tr,
|
if (logic.state.isShowUpDataBtn.value) {
|
||||||
"未发现新版本",
|
return Text(
|
||||||
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
TranslationLoader.lanKeys!.haveNewVersion!.tr + logic.state.showNewVersion.value,
|
||||||
)
|
style:
|
||||||
|
TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Text(
|
||||||
|
'已是最新版本'.tr,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 30.h,
|
height: 30.h,
|
||||||
),
|
),
|
||||||
Text(
|
Obx(() {
|
||||||
"${TranslationLoader.lanKeys!.currentVersion!.tr}:1.0.0",
|
return Text(
|
||||||
style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
'${TranslationLoader.lanKeys!.currentVersion!.tr}:${logic.state.showVersion.value}',
|
||||||
),
|
style:
|
||||||
|
TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||||
|
);
|
||||||
|
}),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 40.h,
|
height: 40.h,
|
||||||
),
|
),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
return !logic.state.otaUpdateIng.value
|
final bool show = !logic.state.otaUpdateIng.value &&
|
||||||
|
logic.state.isShowUpDataBtn.value;
|
||||||
|
return show
|
||||||
? SubmitBtn(
|
? SubmitBtn(
|
||||||
btnName: TranslationLoader.lanKeys!.upgrade!.tr,
|
btnName: TranslationLoader.lanKeys!.upgrade!.tr,
|
||||||
onClick: () {})
|
onClick: () {
|
||||||
: SizedBox();
|
logic.downloadTheFile();
|
||||||
|
})
|
||||||
|
: const SizedBox();
|
||||||
}),
|
}),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 10.h,
|
height: 10.h,
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
class LockEscalationState {
|
class LockEscalationState {
|
||||||
var otaUpdateIng = false.obs;
|
RxBool otaUpdateIng = false.obs;
|
||||||
var otaProgress = 0.00.obs;
|
RxDouble otaProgress = 0.00.obs;
|
||||||
|
RxBool isShowUpDataBtn = false.obs;
|
||||||
|
RxString showVersion = '1.0.0'.obs;
|
||||||
|
RxString showNewVersion = '1.0.0'.obs;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,48 @@
|
|||||||
|
class FwVersionEntity {
|
||||||
|
FwVersionEntity({this.errorCode, this.description, this.errorMsg, this.data});
|
||||||
|
|
||||||
|
FwVersionEntity.fromJson(Map<String, dynamic> json) {
|
||||||
|
errorCode = json['errorCode'];
|
||||||
|
description = json['description'];
|
||||||
|
errorMsg = json['errorMsg'];
|
||||||
|
if (json['data'] is Map) {
|
||||||
|
data = Data.fromJson(json['data']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int? errorCode;
|
||||||
|
String? description;
|
||||||
|
String? errorMsg;
|
||||||
|
Data? data;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['errorCode'] = errorCode;
|
||||||
|
data['description'] = description;
|
||||||
|
data['errorMsg'] = errorMsg;
|
||||||
|
data['data'] = this.data;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Data {
|
||||||
|
Data.fromJson(Map<String, dynamic> json) {
|
||||||
|
isUpdate = json['isUpdate'];
|
||||||
|
downloadUrl = json['downloadUrl'];
|
||||||
|
description = json['description'];
|
||||||
|
}
|
||||||
|
|
||||||
|
int? isUpdate;
|
||||||
|
String? downloadUrl;
|
||||||
|
String? description;
|
||||||
|
String? version;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['isUpdate'] = isUpdate;
|
||||||
|
data['downloadUrl'] = downloadUrl;
|
||||||
|
data['description'] = description;
|
||||||
|
data['version'] = version;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
@ -64,7 +63,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// 上传数据获取锁设置
|
// 上传数据获取锁设置
|
||||||
if (reply is UpdataLockSetReply && (state.ifCurrentScreen.value == true)) {
|
if (reply is UpdataLockSetReply &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyUpdataLockSetReply(reply);
|
_replyUpdataLockSetReply(reply);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -128,11 +128,13 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey =
|
final List<String>? privateKey =
|
||||||
await Storage.getStringList(saveBluePrivateKey);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? publicKey =
|
final List<String>? publicKey =
|
||||||
await Storage.getStringList(saveBluePublicKey);
|
await Storage.getStringList(saveBluePublicKey);
|
||||||
final List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
final List<int> publicKeyDataList =
|
||||||
|
changeStringListToIntList(publicKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
@ -217,16 +219,19 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
// 上传数据获取锁设置解析
|
// 上传数据获取锁设置解析
|
||||||
Future<void> _replyUpdataLockSetReply(Reply reply) async {
|
Future<void> _replyUpdataLockSetReply(Reply reply) async {
|
||||||
final int status = reply.data[2];
|
final int status = reply.data[2];
|
||||||
switch(status){
|
switch (status) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
//成功
|
//成功
|
||||||
dismissEasyLoading();
|
dismissEasyLoading();
|
||||||
cancelBlueConnetctToastTimer();
|
cancelBlueConnetctToastTimer();
|
||||||
|
|
||||||
_lockDataUpload(uploadType:1, recordType:0, records:reply.data.sublist(7, reply.data.length));
|
_lockDataUpload(
|
||||||
|
uploadType: 1,
|
||||||
|
recordType: 0,
|
||||||
|
records: reply.data.sublist(7, reply.data.length));
|
||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<int> token = reply.data.sublist(3, 7);
|
final List<int> token = reply.data.sublist(3, 7);
|
||||||
final List<String> saveStrList = changeIntListToStringList(token);
|
final List<String> saveStrList = changeIntListToStringList(token);
|
||||||
Storage.setStringList(saveBlueToken, saveStrList);
|
Storage.setStringList(saveBlueToken, saveStrList);
|
||||||
@ -294,11 +299,13 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
if (connectionState == BluetoothConnectionState.connected) {
|
if (connectionState == BluetoothConnectionState.connected) {
|
||||||
final List<String>? privateKey =
|
final List<String>? privateKey =
|
||||||
await Storage.getStringList(saveBluePrivateKey);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? publicKey =
|
final List<String>? publicKey =
|
||||||
await Storage.getStringList(saveBluePublicKey);
|
await Storage.getStringList(saveBluePublicKey);
|
||||||
final List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
final List<int> publicKeyDataList =
|
||||||
|
changeStringListToIntList(publicKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
@ -358,14 +365,16 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
if (connectionState == BluetoothConnectionState.connected) {
|
if (connectionState == BluetoothConnectionState.connected) {
|
||||||
final List<String>? privateKey =
|
final List<String>? privateKey =
|
||||||
await Storage.getStringList(saveBluePrivateKey);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
|
|
||||||
final List<String>? publicKey =
|
final List<String>? publicKey =
|
||||||
await Storage.getStringList(saveBluePublicKey);
|
await Storage.getStringList(saveBluePublicKey);
|
||||||
final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
|
final List<int> getPublicKeyList =
|
||||||
|
changeStringListToIntList(publicKey!);
|
||||||
|
|
||||||
state.settingUpSupportFeatures = type;
|
state.settingUpSupportFeatures = type;
|
||||||
|
|
||||||
@ -404,7 +413,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
|
|
||||||
// 获取锁设置信息
|
// 获取锁设置信息
|
||||||
Future<LockSetInfoEntity> getLockSettingInfoData() async {
|
Future<LockSetInfoEntity> getLockSettingInfoData() async {
|
||||||
final LockSetInfoEntity entity = await ApiRepository.to.getLockSettingInfoData(
|
final LockSetInfoEntity entity =
|
||||||
|
await ApiRepository.to.getLockSettingInfoData(
|
||||||
lockId: state.lockId.toString(),
|
lockId: state.lockId.toString(),
|
||||||
);
|
);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
@ -425,6 +435,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
state.lockSettingInfo.value.bluetoothBroadcast!;
|
state.lockSettingInfo.value.bluetoothBroadcast!;
|
||||||
state.isOpenExceptionWarnings.value =
|
state.isOpenExceptionWarnings.value =
|
||||||
state.lockSettingInfo.value.bluetoothBroadcast!;
|
state.lockSettingInfo.value.bluetoothBroadcast!;
|
||||||
|
state.isUnlockReminder.value =
|
||||||
|
state.lockSettingInfo.value.unlockReminder!;
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
@ -432,7 +444,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
// 开启考勤获取是否有公司
|
// 开启考勤获取是否有公司
|
||||||
Future<void> openCheckingInData(
|
Future<void> openCheckingInData(
|
||||||
BlockSetCheckInCallback blockSetCheckInCallback) async {
|
BlockSetCheckInCallback blockSetCheckInCallback) async {
|
||||||
final CheckingInInfoDataEntity entity = await ApiRepository.to.openCheckingInData(
|
final CheckingInInfoDataEntity entity =
|
||||||
|
await ApiRepository.to.openCheckingInData(
|
||||||
lockId: state.lockSetInfoData.value.lockId.toString(),
|
lockId: state.lockSetInfoData.value.lockId.toString(),
|
||||||
);
|
);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
@ -459,15 +472,15 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
|
|
||||||
// 设置是否打开开锁提醒
|
// 设置是否打开开锁提醒
|
||||||
Future<void> setLockPickingReminder() async {
|
Future<void> setLockPickingReminder() async {
|
||||||
final LoginEntity entity = await ApiRepository.to.setLockPickingReminderData(
|
final LoginEntity entity =
|
||||||
|
await ApiRepository.to.setLockPickingReminderData(
|
||||||
lockId: state.lockSetInfoData.value.lockId!,
|
lockId: state.lockSetInfoData.value.lockId!,
|
||||||
unlockReminder: state.isLockPickingReminder.value == 1 ? 0 : 1,
|
unlockReminder: state.isUnlockReminder.value == 1 ? 0 : 1,
|
||||||
);
|
);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
state.isLockPickingReminder.value =
|
state.isUnlockReminder.value =
|
||||||
(state.isLockPickingReminder.value == 1 ? 0 : 1);
|
(state.isUnlockReminder.value == 1 ? 0 : 1);
|
||||||
state.lockSettingInfo.value.unlockReminderPush =
|
state.lockSettingInfo.value.unlockReminder = state.isUnlockReminder.value;
|
||||||
state.isLockPickingReminder.value;
|
|
||||||
showToast('设置成功'.tr, something: () {
|
showToast('设置成功'.tr, something: () {
|
||||||
eventBus.fire(RefreshLockListInfoDataEvent());
|
eventBus.fire(RefreshLockListInfoDataEvent());
|
||||||
});
|
});
|
||||||
@ -519,7 +532,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
ShowTipView().showIosTipWithContentDialog('删除锁后,所有信息都会一起删除,确定删除锁吗?'.tr,
|
ShowTipView().showIosTipWithContentDialog('删除锁后,所有信息都会一起删除,确定删除锁吗?'.tr,
|
||||||
() {
|
() {
|
||||||
// 删除锁
|
// 删除锁
|
||||||
ShowTipView().showTFViewAlertDialog(state.passwordTF, '请输入登录密码'.tr, '请输入登录密码'.tr, checkLoginPassword);
|
ShowTipView().showTFViewAlertDialog(
|
||||||
|
state.passwordTF, '请输入登录密码'.tr, '请输入登录密码'.tr, checkLoginPassword);
|
||||||
});
|
});
|
||||||
} else if (state.lockBasicInfo.value.keyRight == 1) {
|
} else if (state.lockBasicInfo.value.keyRight == 1) {
|
||||||
// 授权管理员弹框提示
|
// 授权管理员弹框提示
|
||||||
@ -597,7 +611,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
Future<void> getUpdataLockSet() async {
|
Future<void> getUpdataLockSet() async {
|
||||||
// showBlueConnetctToastTimer(action: (){
|
// showBlueConnetctToastTimer(action: (){
|
||||||
// });
|
// });
|
||||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
|
(BluetoothConnectionState connectionState) async {
|
||||||
if (connectionState == BluetoothConnectionState.connected) {
|
if (connectionState == BluetoothConnectionState.connected) {
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
@ -614,7 +629,8 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
|
|
||||||
// 公共的上传锁设置
|
// 公共的上传锁设置
|
||||||
Future<void> updataLockSet(List<int> token) async {
|
Future<void> updataLockSet(List<int> token) async {
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||||
@ -626,26 +642,21 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
token: token,
|
token: token,
|
||||||
needAuthor: 1,
|
needAuthor: 1,
|
||||||
signKey: signKeyDataList,
|
signKey: signKeyDataList,
|
||||||
privateKey: getPrivateKeyList
|
privateKey: getPrivateKeyList);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 锁数据上传服务器
|
// 锁数据上传服务器
|
||||||
Future<void> _lockDataUpload({
|
Future<void> _lockDataUpload(
|
||||||
required int uploadType,
|
{required int uploadType,
|
||||||
required int recordType,
|
required int recordType,
|
||||||
required List records
|
required List records}) async {
|
||||||
}) async{
|
|
||||||
final LoginEntity entity = await ApiRepository.to.lockDataUpload(
|
final LoginEntity entity = await ApiRepository.to.lockDataUpload(
|
||||||
lockId: CommonDataManage().currentKeyInfo.lockId!,
|
lockId: CommonDataManage().currentKeyInfo.lockId!,
|
||||||
uploadType:uploadType,
|
uploadType: uploadType,
|
||||||
recordType: recordType,
|
recordType: recordType,
|
||||||
records:records,
|
records: records,
|
||||||
isUnShowLoading: true
|
isUnShowLoading: true);
|
||||||
);
|
if (entity.errorCode!.codeIsSuccessful) {}
|
||||||
if(entity.errorCode!.codeIsSuccessful){
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -659,7 +670,6 @@ class LockSetLogic extends BaseGetXController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
|
|
||||||
_replySubscription.cancel();
|
_replySubscription.cancel();
|
||||||
_passCurrentLockInformationEvent!.cancel();
|
_passCurrentLockInformationEvent!.cancel();
|
||||||
// _scanListDiscoveredDeviceSubscription.cancel();
|
// _scanListDiscoveredDeviceSubscription.cancel();
|
||||||
|
|||||||
@ -653,9 +653,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
activeColor: CupertinoColors.activeBlue,
|
activeColor: CupertinoColors.activeBlue,
|
||||||
trackColor: CupertinoColors.systemGrey5,
|
trackColor: CupertinoColors.systemGrey5,
|
||||||
thumbColor: CupertinoColors.white,
|
thumbColor: CupertinoColors.white,
|
||||||
value: state.isLockPickingReminder.value == 1,
|
value: state.isUnlockReminder.value == 1,
|
||||||
onChanged: (bool value) {
|
onChanged: (bool value) {
|
||||||
setState(logic.setLockPickingReminder);
|
logic.setLockPickingReminder();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@ -15,13 +14,13 @@ class LockSetState {
|
|||||||
final lockId = 0.obs;
|
final lockId = 0.obs;
|
||||||
|
|
||||||
var isOnlyOneData = false.obs;
|
var isOnlyOneData = false.obs;
|
||||||
var isAttendance = 0.obs;// 是否开启考勤
|
var isAttendance = 0.obs; // 是否开启考勤
|
||||||
var isOpenLockNeedOnline = 0.obs;// APP开锁时是否需联网
|
var isOpenLockNeedOnline = 0.obs; // APP开锁时是否需联网
|
||||||
|
|
||||||
var isLockPickingReminder = 0.obs;// 是否开启开锁提醒
|
var isUnlockReminder = 0.obs; // 是否开启开锁提醒
|
||||||
var isOpenBlueBroadcast = 0.obs;// 是否开启蓝牙广播
|
var isOpenBlueBroadcast = 0.obs; // 是否开启蓝牙广播
|
||||||
var isOpenExceptionWarnings = 0.obs;// 是否开启异常警告
|
var isOpenExceptionWarnings = 0.obs; // 是否开启异常警告
|
||||||
var isOpenStayWarn = 0.obs;// 是否开启逗留警告
|
var isOpenStayWarn = 0.obs; // 是否开启逗留警告
|
||||||
|
|
||||||
var passwordTF = TextEditingController();
|
var passwordTF = TextEditingController();
|
||||||
|
|
||||||
@ -34,4 +33,4 @@ class LockSetState {
|
|||||||
lockId.value = map["lockId"];
|
lockId.value = map["lockId"];
|
||||||
isOnlyOneData.value = map["isOnlyOneData"];
|
isOnlyOneData.value = map["isOnlyOneData"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,12 +2,17 @@ import 'package:get/get.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/palm/addPalmType/addPalmType_state.dart';
|
import 'package:star_lock/main/lockDetail/palm/addPalmType/addPalmType_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/dateTool.dart';
|
import 'package:star_lock/tools/dateTool.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
import '../../../../appRouters.dart';
|
import '../../../../appRouters.dart';
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
|
|
||||||
class AddPalmTypeLogic extends BaseGetXController {
|
class AddPalmTypeLogic extends BaseGetXController {
|
||||||
AddPalmTypeState state = AddPalmTypeState();
|
AddPalmTypeState state = AddPalmTypeState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 添加指纹
|
// 添加指纹
|
||||||
void addPalmData() async {
|
void addPalmData() async {
|
||||||
var palmType = 0; // 永久:1;限时2,单次3,循环:4
|
var palmType = 0; // 永久:1;限时2,单次3,循环:4
|
||||||
|
|||||||
@ -57,14 +57,14 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
if (state.selectType.value == "1") {
|
if (state.selectType.value == '1') {
|
||||||
state.beginTime.value = DateTool().dateToYMDHNString(
|
state.beginTime.value = DateTool().dateToYMDHNString(
|
||||||
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
||||||
state.endTime.value = DateTool().dateToYMDHNString(
|
state.endTime.value = DateTool().dateToYMDHNString(
|
||||||
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间
|
||||||
} else {
|
} else {
|
||||||
state.beginTime.value = ""; //默认为当前时间
|
state.beginTime.value = ''; //默认为当前时间
|
||||||
state.endTime.value = ""; //默认为当前时间
|
state.endTime.value = ''; //默认为当前时间
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
Container(height: 10.h),
|
Container(height: 10.h),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: titleStr,
|
leftTitel: titleStr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: getTFWidget(rightTitle)),
|
rightWidget: getTFWidget(rightTitle)),
|
||||||
Container(height: 10.h),
|
Container(height: 10.h),
|
||||||
@ -174,7 +174,7 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
children: [
|
children: [
|
||||||
Obx(() => CommonItem(
|
Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
||||||
rightTitle: "${state.beginTime.value}\n${state.endTime.value}",
|
rightTitle: '${state.beginTime.value}\n${state.endTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -195,10 +195,10 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
}
|
}
|
||||||
})),
|
})),
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.weekdaysList.isNotEmpty ? true : false,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效日",
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(",").toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -221,9 +221,9 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.effectiveDateTime.value.isNotEmpty,
|
visible: state.effectiveDateTime.value.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效时间".tr,
|
leftTitel: '有效时间'.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${state.effectiveDateTime.value}-${state.failureDateTime.value}",
|
'${state.effectiveDateTime.value}-${state.failureDateTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
||||||
@ -255,8 +255,8 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
? true
|
? true
|
||||||
: false,
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "是否为管理员".tr,
|
leftTitel: '是否为管理员'.tr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isTipsImg: false,
|
isTipsImg: false,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: SizedBox(
|
rightWidget: SizedBox(
|
||||||
@ -268,13 +268,13 @@ class _AddPalmTypePageState extends State<AddPalmTypePage> {
|
|||||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
if (state.nameController.text.isEmpty) {
|
if (state.nameController.text.isEmpty) {
|
||||||
logic.showToast("请输入姓名");
|
logic.showToast('请输入姓名');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logic.checkPalmNameDuplicated(state.nameController.text);
|
logic.checkPalmNameDuplicated(state.nameController.text);
|
||||||
} else {
|
} else {
|
||||||
// Get.toNamed(Routers.selectLockTypePage);
|
// Get.toNamed(Routers.selectLockTypePage);
|
||||||
logic.showToast("演示模式");
|
logic.showToast('演示模式');
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -6,13 +6,12 @@ import 'package:star_lock/blue/io_type.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/palm/palmDetail/palmDetail_state.dart';
|
import 'package:star_lock/main/lockDetail/palm/palmDetail/palmDetail_state.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
import 'package:star_lock/tools/eventBusEventManage.dart';
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import '../../../../blue/blue_manage.dart';
|
import '../../../../blue/blue_manage.dart';
|
||||||
// import '../../../../blue/io_protocol/io_addICCard.dart';
|
|
||||||
import '../../../../blue/io_reply.dart';
|
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 '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
import '../../../../tools/dateTool.dart';
|
import '../../../../tools/dateTool.dart';
|
||||||
import '../../../../tools/storage.dart';
|
import '../../../../tools/storage.dart';
|
||||||
@ -20,6 +19,10 @@ import '../../../../tools/storage.dart';
|
|||||||
class PalmDetailLogic extends BaseGetXController {
|
class PalmDetailLogic extends BaseGetXController {
|
||||||
PalmDetailState state = PalmDetailState();
|
PalmDetailState state = PalmDetailState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekDay.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
// 监听设备返回的数据
|
// 监听设备返回的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
|
|||||||
@ -34,14 +34,14 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppColors.mainBackgroundColor,
|
backgroundColor: AppColors.mainBackgroundColor,
|
||||||
appBar: TitleAppBar(
|
appBar: TitleAppBar(
|
||||||
barTitle: "手掌详情",
|
barTitle: '手掌详情',
|
||||||
haveBack: true,
|
haveBack: true,
|
||||||
backgroundColor: AppColors.mainColor,
|
backgroundColor: AppColors.mainColor,
|
||||||
),
|
),
|
||||||
body: ListView(
|
body: ListView(
|
||||||
children: [
|
children: [
|
||||||
Obx(() => CommonItem(
|
Obx(() => CommonItem(
|
||||||
leftTitel: "手掌号",
|
leftTitel: '手掌号',
|
||||||
rightTitle: state.typeNumber.value,
|
rightTitle: state.typeNumber.value,
|
||||||
isHaveDirection: false,
|
isHaveDirection: false,
|
||||||
isHaveLine: true)),
|
isHaveLine: true)),
|
||||||
@ -72,14 +72,14 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
var data = await Get.toNamed(
|
var data = await Get.toNamed(
|
||||||
Routers.otherTypeKeyChangeDatePage,
|
Routers.otherTypeKeyChangeDatePage,
|
||||||
arguments: {
|
arguments: {
|
||||||
"pushType": 0,
|
'pushType': 0,
|
||||||
"fingerprintItemData":
|
'fingerprintItemData':
|
||||||
state.fingerprintItemData.value,
|
state.fingerprintItemData.value,
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
state.starDate.value = data["beginTimeTimestamp"];
|
state.starDate.value = data['beginTimeTimestamp'];
|
||||||
state.endDate.value = data["endTimeTimestamp"];
|
state.endDate.value = data['endTimeTimestamp'];
|
||||||
state.keyType.value = 2;
|
state.keyType.value = 2;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -88,68 +88,68 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
var data = await Get.toNamed(
|
var data = await Get.toNamed(
|
||||||
Routers.otherTypeKeyChangeValidityDatePage,
|
Routers.otherTypeKeyChangeValidityDatePage,
|
||||||
arguments: {
|
arguments: {
|
||||||
"pushType": 0,
|
'pushType': 0,
|
||||||
"fingerprintItemData":
|
'fingerprintItemData':
|
||||||
state.fingerprintItemData.value,
|
state.fingerprintItemData.value,
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
state.starDate.value = data["starDate"];
|
state.starDate.value = data['starDate'];
|
||||||
state.endDate.value = data["endDate"];
|
state.endDate.value = data['endDate'];
|
||||||
state.starTime.value = data["starTime"];
|
state.starTime.value = data['starTime'];
|
||||||
state.endTime.value = data["endTime"];
|
state.endTime.value = data['endTime'];
|
||||||
state.weekDay.value = data["weekDay"];
|
state.weekDay.value = data['weekDay'];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}))),
|
}))),
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.keyType.value == 4 ? true : false,
|
visible: state.keyType.value == 4 ,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
|
||||||
rightTitle: state.weekDay.value.join(','),
|
rightTitle: logic.weekDayStr.join(','),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var data = await Get.toNamed(
|
var data = await Get.toNamed(
|
||||||
Routers.otherTypeKeyChangeValidityDatePage,
|
Routers.otherTypeKeyChangeValidityDatePage,
|
||||||
arguments: {
|
arguments: {
|
||||||
"pushType": 0,
|
'pushType': 0,
|
||||||
"fingerprintItemData":
|
'fingerprintItemData':
|
||||||
state.fingerprintItemData.value,
|
state.fingerprintItemData.value,
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
state.starDate.value = data["starDate"];
|
state.starDate.value = data['starDate'];
|
||||||
state.endDate.value = data["endDate"];
|
state.endDate.value = data['endDate'];
|
||||||
state.starTime.value = data["starTime"];
|
state.starTime.value = data['starTime'];
|
||||||
state.endTime.value = data["endTime"];
|
state.endTime.value = data['endTime'];
|
||||||
state.weekDay.value = data["weekDay"];
|
state.weekDay.value = data['weekDay'];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})))),
|
})))),
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.keyType.value == 4 ? true : false,
|
visible: state.keyType.value == 4 ? true : false,
|
||||||
child: Obx(() => CommonItem(
|
child: Obx(() => CommonItem(
|
||||||
leftTitel: "有效时间",
|
leftTitel: '有效时间',
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${DateTool().dateToHNString(state.starTime.value)}-${DateTool().dateToHNString(state.endTime.value)}",
|
'${DateTool().dateToHNString(state.starTime.value)}-${DateTool().dateToHNString(state.endTime.value)}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var data = await Get.toNamed(
|
var data = await Get.toNamed(
|
||||||
Routers.otherTypeKeyChangeValidityDatePage,
|
Routers.otherTypeKeyChangeValidityDatePage,
|
||||||
arguments: {
|
arguments: {
|
||||||
"pushType": 0,
|
'pushType': 0,
|
||||||
"fingerprintItemData":
|
'fingerprintItemData':
|
||||||
state.fingerprintItemData.value,
|
state.fingerprintItemData.value,
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
state.starDate.value = data["starDate"];
|
state.starDate.value = data['starDate'];
|
||||||
state.endDate.value = data["endDate"];
|
state.endDate.value = data['endDate'];
|
||||||
state.starTime.value = data["starTime"];
|
state.starTime.value = data['starTime'];
|
||||||
state.endTime.value = data["endTime"];
|
state.endTime.value = data['endTime'];
|
||||||
state.weekDay.value = data["validityValue"];
|
state.weekDay.value = data['validityValue'];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})))),
|
})))),
|
||||||
@ -166,7 +166,7 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
|
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
// Get.toNamed(Routers.keyOperationRecordPage, arguments: {
|
// Get.toNamed(Routers.keyOperationRecordPage, arguments: {
|
||||||
@ -199,11 +199,11 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
return ShowTFView(
|
return ShowTFView(
|
||||||
title:
|
title:
|
||||||
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}",
|
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}",
|
||||||
tipTitle: "",
|
tipTitle: '',
|
||||||
controller: state.changeNameController,
|
controller: state.changeNameController,
|
||||||
sureClick: () {
|
sureClick: () {
|
||||||
if (state.changeNameController.text.isEmpty) {
|
if (state.changeNameController.text.isEmpty) {
|
||||||
logic.showToast("请输入姓名");
|
logic.showToast('请输入姓名');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Get.back();
|
Get.back();
|
||||||
@ -222,8 +222,8 @@ class _PalmDetailPageState extends State<PalmDetailPage> with RouteAware {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return ShowIosTipView(
|
return ShowIosTipView(
|
||||||
title: "提示",
|
title: '提示',
|
||||||
tipTitle: "确定要删除吗?",
|
tipTitle: '确定要删除吗?',
|
||||||
sureClick: () async {
|
sureClick: () async {
|
||||||
Get.back();
|
Get.back();
|
||||||
String? idStr = await Storage.getUid();
|
String? idStr = await Storage.getUid();
|
||||||
|
|||||||
@ -25,13 +25,16 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
// 获取解析后的数据
|
// 获取解析后的数据
|
||||||
late StreamSubscription<Reply> _replySubscription;
|
late StreamSubscription<Reply> _replySubscription;
|
||||||
void _initReplySubscription() {
|
void _initReplySubscription() {
|
||||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
_replySubscription =
|
||||||
|
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||||
// 添加卡片开始(重置锁里面所有卡)
|
// 添加卡片开始(重置锁里面所有卡)
|
||||||
if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
|
if ((reply is SenderCustomPasswordsReply) &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyAddPassword(reply);
|
_replyAddPassword(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((reply is SenderResetPasswordsReply) && (state.ifCurrentScreen.value == true)) {
|
if ((reply is SenderResetPasswordsReply) &&
|
||||||
|
(state.ifCurrentScreen.value == true)) {
|
||||||
_replyResetPassword(reply);
|
_replyResetPassword(reply);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -49,10 +52,13 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<int> token = reply.data.sublist(5, 9);
|
final List<int> token = reply.data.sublist(5, 9);
|
||||||
@ -95,10 +101,13 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
//无权限
|
//无权限
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<int> token = reply.data.sublist(5, 9);
|
final List<int> token = reply.data.sublist(5, 9);
|
||||||
@ -131,11 +140,14 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
(BluetoothConnectionState deviceConnectionState) async {
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
@ -182,11 +194,14 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||||
(BluetoothConnectionState deviceConnectionState) async {
|
(BluetoothConnectionState deviceConnectionState) async {
|
||||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
final List<String>? signKey =
|
||||||
|
await Storage.getStringList(saveBlueSignKey);
|
||||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||||
|
|
||||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
final List<String>? privateKey =
|
||||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
await Storage.getStringList(saveBluePrivateKey);
|
||||||
|
final List<int> getPrivateKeyList =
|
||||||
|
changeStringListToIntList(privateKey!);
|
||||||
|
|
||||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||||
@ -255,26 +270,16 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
state.itemDataList.addAll(entity.data!.itemList!);
|
state.itemDataList.addAll(entity.data!.itemList!);
|
||||||
// 更新页码
|
// 更新页码
|
||||||
pageNo++;
|
pageNo++;
|
||||||
|
|
||||||
// if (pageNo == 1) {
|
|
||||||
// state.itemDataList.value.clear();
|
|
||||||
// state.itemDataList.value = entity.data!.itemList!;
|
|
||||||
// pageNo++;
|
|
||||||
// } else {
|
|
||||||
// if (entity.data!.itemList!.isNotEmpty) {
|
|
||||||
// state.itemDataList.value.addAll(entity.data!.itemList!);
|
|
||||||
// pageNo++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
//密码钥匙重置请求
|
//密码钥匙重置请求
|
||||||
Future<void> resetPasswordKeyListRequest() async {
|
Future<void> resetPasswordKeyListRequest() async {
|
||||||
final PasswordKeyListEntity entity = await ApiRepository.to.keyboardPwdReset(
|
final PasswordKeyListEntity entity = await ApiRepository.to
|
||||||
lockId: state.keyInfo.value.lockId.toString(),
|
.keyboardPwdReset(
|
||||||
passwordKey: state.encrpyKey);
|
lockId: state.keyInfo.value.lockId.toString(),
|
||||||
|
passwordKey: state.encrpyKey);
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
showToast('重置成功'.tr, something: () {
|
showToast('重置成功'.tr, something: () {
|
||||||
pageNo = 1;
|
pageNo = 1;
|
||||||
@ -390,8 +395,9 @@ class PasswordKeyListLogic extends BaseGetXController {
|
|||||||
StreamSubscription? _getPasswordListRefreshUIEvent;
|
StreamSubscription? _getPasswordListRefreshUIEvent;
|
||||||
void _getPasswordListRefreshUIAction() {
|
void _getPasswordListRefreshUIAction() {
|
||||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||||
_getPasswordListRefreshUIEvent =
|
_getPasswordListRefreshUIEvent = eventBus
|
||||||
eventBus.on<GetPasswordListRefreshUI>().listen((GetPasswordListRefreshUI event) {
|
.on<GetPasswordListRefreshUI>()
|
||||||
|
.listen((GetPasswordListRefreshUI event) {
|
||||||
mockNetworkDataRequest(isRefresh: true);
|
mockNetworkDataRequest(isRefresh: true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -354,7 +354,7 @@ class _PasswordKeyPerpetualPageState extends State<PasswordKeyPerpetualPage>
|
|||||||
return Column(
|
return Column(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: '有效日',
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.loopModeStr.value,
|
rightTitle: state.loopModeStr.value,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
|
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
|
import 'package:star_lock/tools/pickers/time_picker/time_utils.dart';
|
||||||
|
|
||||||
import 'addRemoteControl_state.dart';
|
import 'addRemoteControl_state.dart';
|
||||||
|
|
||||||
class AddRemoteControlLoigc extends BaseGetXController{
|
class AddRemoteControlLoigc extends BaseGetXController{
|
||||||
AddRemoteControlState state = AddRemoteControlState();
|
AddRemoteControlState state = AddRemoteControlState();
|
||||||
|
|
||||||
|
List<dynamic> get weekDayStr {
|
||||||
|
return state.weekdaysList.map((e) => TimeUtils.translateWeekday(e)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
|
|
||||||
|
|||||||
@ -130,7 +130,7 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
children: [
|
children: [
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: titleStr,
|
leftTitel: titleStr,
|
||||||
rightTitle: "",
|
rightTitle: '',
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
rightWidget: getTFWidget(rightTitle)),
|
rightWidget: getTFWidget(rightTitle)),
|
||||||
Container(height: 10.h),
|
Container(height: 10.h),
|
||||||
@ -161,8 +161,8 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
rightTitle: state.timeLimitEndTime.value,
|
rightTitle: state.timeLimitEndTime.value,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
PDuration selectDate =
|
PDuration selectDate = PDuration.parse(
|
||||||
PDuration.parse(DateTime.tryParse(state.timeLimitEndTime.value));
|
DateTime.tryParse(state.timeLimitEndTime.value));
|
||||||
Pickers.showDatePicker(context,
|
Pickers.showDatePicker(context,
|
||||||
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
|
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
|
||||||
state.timeLimitEndTime.value =
|
state.timeLimitEndTime.value =
|
||||||
@ -181,7 +181,7 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
Obx(() => CommonItem(
|
Obx(() => CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${state.cycleBeginTime.value}\n${state.cycleEndTime.value}",
|
'${state.cycleBeginTime.value}\n${state.cycleEndTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -202,10 +202,10 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
}
|
}
|
||||||
})),
|
})),
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.weekdaysList.isNotEmpty ? true : false,
|
visible: state.weekdaysList.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效日".tr,
|
leftTitel: '有效日'.tr,
|
||||||
rightTitle: state.weekdaysList.value.join(",").toString(),
|
rightTitle: logic.weekDayStr.join(',').toString(),
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
@ -228,9 +228,9 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.effectiveDateTime.value.isNotEmpty,
|
visible: state.effectiveDateTime.value.isNotEmpty,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: "有效时间".tr,
|
leftTitel: '有效时间'.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
"${state.effectiveDateTime.value}-${state.failureDateTime.value}",
|
'${state.effectiveDateTime.value}-${state.failureDateTime.value}',
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () async {
|
action: () async {
|
||||||
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
|
||||||
@ -270,14 +270,14 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if (isDemoMode == false) {
|
if (isDemoMode == false) {
|
||||||
if (state.nameController.text.isEmpty) {
|
if (state.nameController.text.isEmpty) {
|
||||||
logic.showToast("请输入姓名");
|
logic.showToast('请输入姓名');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logic.showToast("请确保在设备附近");
|
logic.showToast('请确保在设备附近');
|
||||||
// logic.addFingerprintsData();
|
// logic.addFingerprintsData();
|
||||||
} else {
|
} else {
|
||||||
// Get.toNamed(Routers.selectLockTypePage);
|
// Get.toNamed(Routers.selectLockTypePage);
|
||||||
logic.showToast("演示模式");
|
logic.showToast('演示模式');
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
@ -307,7 +307,7 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
height: 20.h,
|
height: 20.h,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
"操作成功,密码为",
|
'操作成功,密码为',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 32.sp,
|
fontSize: 32.sp,
|
||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
@ -317,7 +317,7 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
height: 10.h,
|
height: 10.h,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
"62689876",
|
'62689876',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 60.sp,
|
fontSize: 60.sp,
|
||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
@ -423,15 +423,15 @@ class _AddRemoteControlPageState extends State<AddRemoteControlPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
final List<ItemView> _itemTabs = <ItemView>[
|
final List<ItemView> _itemTabs = <ItemView>[
|
||||||
ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: "0"),
|
ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: '0'),
|
||||||
ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: "1"),
|
ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: '1'),
|
||||||
ItemView(
|
ItemView(
|
||||||
title: TranslationLoader.lanKeys!.circulation!.tr, selectType: "2"),
|
title: TranslationLoader.lanKeys!.circulation!.tr, selectType: '2'),
|
||||||
];
|
];
|
||||||
|
|
||||||
final List<ItemView> _fromCheckInTypeItemTabs = <ItemView>[
|
final List<ItemView> _fromCheckInTypeItemTabs = <ItemView>[
|
||||||
ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: "0"),
|
ItemView(title: TranslationLoader.lanKeys!.permanent!.tr, selectType: '0'),
|
||||||
ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: "1"),
|
ItemView(title: TranslationLoader.lanKeys!.timeLimit!.tr, selectType: '1'),
|
||||||
];
|
];
|
||||||
|
|
||||||
TabBar _tabBar() {
|
TabBar _tabBar() {
|
||||||
|
|||||||
@ -133,6 +133,7 @@ class LockListInfoItemEntity {
|
|||||||
LockFeature? lockFeature;
|
LockFeature? lockFeature;
|
||||||
LockSetting? lockSetting;
|
LockSetting? lockSetting;
|
||||||
int? hasGateway;
|
int? hasGateway;
|
||||||
|
int? appUnlockOnline;
|
||||||
String? mac;
|
String? mac;
|
||||||
|
|
||||||
LockListInfoItemEntity({
|
LockListInfoItemEntity({
|
||||||
@ -169,6 +170,7 @@ class LockListInfoItemEntity {
|
|||||||
this.model,
|
this.model,
|
||||||
this.vendor,
|
this.vendor,
|
||||||
this.hasGateway,
|
this.hasGateway,
|
||||||
|
this.appUnlockOnline,
|
||||||
this.mac,
|
this.mac,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -212,6 +214,7 @@ class LockListInfoItemEntity {
|
|||||||
? LockSetting.fromJson(json['lockSetting'])
|
? LockSetting.fromJson(json['lockSetting'])
|
||||||
: null;
|
: null;
|
||||||
hasGateway = json['hasGateway'];
|
hasGateway = json['hasGateway'];
|
||||||
|
appUnlockOnline = json['appUnlockOnline'];
|
||||||
mac = json['mac'];
|
mac = json['mac'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,6 +259,7 @@ class LockListInfoItemEntity {
|
|||||||
data['lockSetting'] = lockSetting!.toJson();
|
data['lockSetting'] = lockSetting!.toJson();
|
||||||
}
|
}
|
||||||
data['hasGateway'] = hasGateway;
|
data['hasGateway'] = hasGateway;
|
||||||
|
data['appUnlockOnline'] = appUnlockOnline;
|
||||||
data['mac'] = mac;
|
data['mac'] = mac;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,12 +58,12 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
logic.pageNo = 1;
|
logic.pageNo = 1;
|
||||||
getHttpData();
|
getHttpData();
|
||||||
|
_initLoadDataAction();
|
||||||
|
setState(() {});
|
||||||
});
|
});
|
||||||
|
|
||||||
_initLoadDataAction();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class StarLockMineLogic extends BaseGetXController {
|
|||||||
final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
|
final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
|
||||||
if (entity.errorCode!.codeIsSuccessful) {
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
state.mineInfoData.value = entity.data!;
|
state.mineInfoData.value = entity.data!;
|
||||||
state.isVip.value = state.mineInfoData.value.isVip! == 0 ? false : true;
|
state.isVip.value = state.mineInfoData.value.isVip! == 1;
|
||||||
Storage.setBool(saveIsVip, state.isVip.value);
|
Storage.setBool(saveIsVip, state.isVip.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,7 +115,7 @@ class AdvancedFeaturesWebLogic extends BaseGetXController {
|
|||||||
if (canGoBack) {
|
if (canGoBack) {
|
||||||
await state.webBuyView.goBack();
|
await state.webBuyView.goBack();
|
||||||
} else if (state.allowReturn) {
|
} else if (state.allowReturn) {
|
||||||
Get.back();
|
Get.back(result: true);
|
||||||
} else {
|
} else {
|
||||||
if (_lastPressedAt == null ||
|
if (_lastPressedAt == null ||
|
||||||
DateTime.now().difference(_lastPressedAt!) >
|
DateTime.now().difference(_lastPressedAt!) >
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
|
||||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart';
|
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart';
|
||||||
|
import 'package:star_lock/tools/storage.dart';
|
||||||
|
|
||||||
import '../../../../network/api_repository.dart';
|
import '../../../../network/api_repository.dart';
|
||||||
import '../../../../tools/baseGetXController.dart';
|
import '../../../../tools/baseGetXController.dart';
|
||||||
@ -12,4 +14,18 @@ class ValueAddedServicesListLogic extends BaseGetXController {
|
|||||||
var entity = await ApiRepository.to.getServicePackageBuyUrl();
|
var entity = await ApiRepository.to.getServicePackageBuyUrl();
|
||||||
if (entity.errorCode!.codeIsSuccessful) {}
|
if (entity.errorCode!.codeIsSuccessful) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//用户信息
|
||||||
|
Future<void> getUserInfoRequest() async {
|
||||||
|
final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
|
||||||
|
if (entity.errorCode!.codeIsSuccessful) {
|
||||||
|
Storage.setBool(saveIsVip, entity.data!.isVip! == 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> onReady() async {
|
||||||
|
super.onReady();
|
||||||
|
getUserInfoRequest();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,14 +66,19 @@ class _ValueAddedServicesPageListState
|
|||||||
_valueAddedServicesItem(
|
_valueAddedServicesItem(
|
||||||
Image.asset('images/mine/icon_mine_valueAddedServices_vip.png'),
|
Image.asset('images/mine/icon_mine_valueAddedServices_vip.png'),
|
||||||
TranslationLoader.lanKeys!.advancedFunction!.tr, () async {
|
TranslationLoader.lanKeys!.advancedFunction!.tr, () async {
|
||||||
bool? isVip = await Storage.getBool(saveIsVip);
|
final bool? isVip = await Storage.getBool(saveIsVip);
|
||||||
if (isVip == null || !isVip) {
|
if (isVip == null || !isVip) {
|
||||||
// if (CommonDataManage().currentKeyInfo.isLockOwner != 1) {
|
// if (CommonDataManage().currentKeyInfo.isLockOwner != 1) {
|
||||||
// logic.showToast('请先添加锁');
|
// logic.showToast('请先添加锁');
|
||||||
// } else {
|
// } else {
|
||||||
Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {
|
//刷新购买状态
|
||||||
'webBuyType': XSConstantMacro.webBuyTypeVip,
|
final result = await Get.toNamed(Routers.advancedFeaturesWebPage,
|
||||||
});
|
arguments: <String, int>{
|
||||||
|
'webBuyType': XSConstantMacro.webBuyTypeVip,
|
||||||
|
});
|
||||||
|
if (result != null && result.isNotEmpty) {
|
||||||
|
logic.getUserInfoRequest();
|
||||||
|
}
|
||||||
// }
|
// }
|
||||||
} else {
|
} else {
|
||||||
Get.toNamed(Routers.valueAddedServicesHighFunctionPage);
|
Get.toNamed(Routers.valueAddedServicesHighFunctionPage);
|
||||||
|
|||||||
@ -240,4 +240,5 @@ abstract class Api {
|
|||||||
final String lockDataUploadUrl = '/lockRecords/lockDataUpload'; // 锁数据上传
|
final String lockDataUploadUrl = '/lockRecords/lockDataUpload'; // 锁数据上传
|
||||||
final String getNoticeTemplateURL = '/key/getNoticeTemplate'; //获取短信或者邮箱模板
|
final String getNoticeTemplateURL = '/key/getNoticeTemplate'; //获取短信或者邮箱模板
|
||||||
final String appGetAppInfoURL = '/app/getAppInfo'; //获取APP基本信息
|
final String appGetAppInfoURL = '/app/getAppInfo'; //获取APP基本信息
|
||||||
|
final String appGetFwVersionURL = '/app/getFwVersion'; //获取固件信息
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,7 @@ class ApiProvider extends BaseProvider {
|
|||||||
String account,
|
String account,
|
||||||
String password,
|
String password,
|
||||||
String verificationCode,
|
String verificationCode,
|
||||||
|
Map deviceInfo,
|
||||||
) =>
|
) =>
|
||||||
post(
|
post(
|
||||||
registerUrl.toUrl,
|
registerUrl.toUrl,
|
||||||
@ -32,6 +33,7 @@ class ApiProvider extends BaseProvider {
|
|||||||
'password': password,
|
'password': password,
|
||||||
'verificationCode': verificationCode,
|
'verificationCode': verificationCode,
|
||||||
'platId': '2',
|
'platId': '2',
|
||||||
|
'deviceInfo': deviceInfo,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// post(
|
// post(
|
||||||
@ -65,7 +67,7 @@ class ApiProvider extends BaseProvider {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
Future<Response> login(String loginType, String password, String countryCode,
|
Future<Response> login(String loginType, String password, String countryCode,
|
||||||
String username) =>
|
String username, Map deviceInfo) =>
|
||||||
post(
|
post(
|
||||||
loginUrl.toUrl,
|
loginUrl.toUrl,
|
||||||
jsonEncode({
|
jsonEncode({
|
||||||
@ -74,7 +76,8 @@ class ApiProvider extends BaseProvider {
|
|||||||
'platId': '2',
|
'platId': '2',
|
||||||
'uniqueid': '477E6814-289D-402A-9F49-F89A8BD05D63',
|
'uniqueid': '477E6814-289D-402A-9F49-F89A8BD05D63',
|
||||||
'countryCode': countryCode,
|
'countryCode': countryCode,
|
||||||
'username': username
|
'username': username,
|
||||||
|
'deviceInfo': deviceInfo,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
Future<Response> resetPassword(
|
Future<Response> resetPassword(
|
||||||
@ -2127,6 +2130,17 @@ class ApiProvider extends BaseProvider {
|
|||||||
Future<Response<dynamic>> getAppInfo() =>
|
Future<Response<dynamic>> getAppInfo() =>
|
||||||
post(appGetAppInfoURL.toUrl, jsonEncode(<String, int>{}),
|
post(appGetAppInfoURL.toUrl, jsonEncode(<String, int>{}),
|
||||||
isShowErrMsg: false);
|
isShowErrMsg: false);
|
||||||
|
|
||||||
|
// 获取App固件信息
|
||||||
|
Future<Response<dynamic>> getFwVersion(String model, String currentVersion) =>
|
||||||
|
post(
|
||||||
|
appGetFwVersionURL.toUrl,
|
||||||
|
jsonEncode(<String, dynamic>{
|
||||||
|
'model': model,
|
||||||
|
'currentVersion': currentVersion,
|
||||||
|
}),
|
||||||
|
isUnShowLoading: true,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ExtensionString on String {
|
extension ExtensionString on String {
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma
|
|||||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
|
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart';
|
import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
|
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/version_entity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/messageWarn/lockUser/lockUser_entity.dart';
|
import 'package:star_lock/main/lockDetail/messageWarn/lockUser/lockUser_entity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_entity.dart';
|
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_entity.dart';
|
||||||
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/msgNotification/msgNotification_entity.dart';
|
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/msgNotification/msgNotification_entity.dart';
|
||||||
@ -98,9 +99,10 @@ class ApiRepository {
|
|||||||
required int countryCode,
|
required int countryCode,
|
||||||
required String account,
|
required String account,
|
||||||
required String password,
|
required String password,
|
||||||
required String verificationCode}) async {
|
required String verificationCode,
|
||||||
final res = await apiProvider.register(
|
required Map deviceInfo}) async {
|
||||||
receiverType, countryCode, account, password, verificationCode);
|
final res = await apiProvider.register(receiverType, countryCode, account,
|
||||||
|
password, verificationCode, deviceInfo);
|
||||||
return LoginEntity.fromJson(res.body);
|
return LoginEntity.fromJson(res.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,9 +126,10 @@ class ApiRepository {
|
|||||||
{required String loginType,
|
{required String loginType,
|
||||||
required String password,
|
required String password,
|
||||||
required String countryCode,
|
required String countryCode,
|
||||||
required String username}) async {
|
required String username,
|
||||||
final res =
|
required Map deviceInfo}) async {
|
||||||
await apiProvider.login(loginType, password, countryCode, username);
|
final res = await apiProvider.login(
|
||||||
|
loginType, password, countryCode, username, deviceInfo);
|
||||||
return LoginEntity.fromJson(res.body);
|
return LoginEntity.fromJson(res.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2154,8 +2157,15 @@ class ApiRepository {
|
|||||||
|
|
||||||
// 电子钥匙获取短信模板
|
// 电子钥匙获取短信模板
|
||||||
Future<GetAppInfo> getAppInfo() async {
|
Future<GetAppInfo> getAppInfo() async {
|
||||||
final Response<dynamic> res =
|
final Response<dynamic> res = await apiProvider.getAppInfo();
|
||||||
await apiProvider.getAppInfo();
|
|
||||||
return GetAppInfo.fromJson(res.body);
|
return GetAppInfo.fromJson(res.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取最新固件
|
||||||
|
Future<FwVersionEntity> getFwVersion(
|
||||||
|
{required String model, required String currentVersion}) async {
|
||||||
|
final Response<dynamic> res =
|
||||||
|
await apiProvider.getFwVersion(model, currentVersion);
|
||||||
|
return FwVersionEntity.fromJson(res.body);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:get/get_utils/get_utils.dart';
|
||||||
|
|
||||||
class TimeUtils {
|
class TimeUtils {
|
||||||
/// 年
|
/// 年
|
||||||
static List calcYears({int begin = 1900, int end = 2100}) =>
|
static List calcYears({int begin = 1900, int end = 2100}) =>
|
||||||
@ -14,7 +16,7 @@ class TimeUtils {
|
|||||||
static List calcDay(int year, int month, {int begin = 1, int end = 31}) {
|
static List calcDay(int year, int month, {int begin = 1, int end = 31}) {
|
||||||
begin = begin < 1 ? 1 : begin;
|
begin = begin < 1 ? 1 : begin;
|
||||||
|
|
||||||
int days = _calcDateCount(year, month);
|
final int days = _calcDateCount(year, month);
|
||||||
if (end > days) {
|
if (end > days) {
|
||||||
end = days;
|
end = days;
|
||||||
}
|
}
|
||||||
@ -37,11 +39,15 @@ class TimeUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static List _calcCount(begin, end) {
|
static List _calcCount(begin, end) {
|
||||||
int length = end - begin + 1;
|
final int length = end - begin + 1;
|
||||||
if (length == 0) return [begin];
|
if (length == 0) {
|
||||||
if (length < 0) return [];
|
return [begin];
|
||||||
|
}
|
||||||
|
if (length < 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
return List.generate(length, (index) => begin + index);
|
return List.generate(length, (int index) => begin + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算月份所对应天数
|
// 计算月份所对应天数
|
||||||
@ -68,7 +74,22 @@ class TimeUtils {
|
|||||||
return (v < 10) ? "0$v" : "$v";
|
return (v < 10) ? "0$v" : "$v";
|
||||||
}
|
}
|
||||||
|
|
||||||
// String _checkStr(String v) {
|
|
||||||
// return v == null ? "" : v;
|
static String translateWeekday(int number,[int index=1]) {
|
||||||
// }
|
final List<String> weekDays = <String>[
|
||||||
|
'一'.tr,
|
||||||
|
'二'.tr,
|
||||||
|
'三'.tr,
|
||||||
|
'四'.tr,
|
||||||
|
'五'.tr,
|
||||||
|
'六'.tr,
|
||||||
|
'日'.tr
|
||||||
|
];
|
||||||
|
final String days = weekDays[number- index];
|
||||||
|
return days; //
|
||||||
|
}
|
||||||
|
|
||||||
|
// String _checkStr(String v) {
|
||||||
|
// return v == null ? "" : v;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import 'dart:io';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:jpush_flutter/jpush_flutter.dart';
|
import 'package:jpush_flutter/jpush_flutter.dart';
|
||||||
|
import 'package:star_lock/flavors.dart';
|
||||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart';
|
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart';
|
||||||
import 'package:star_lock/network/api_repository.dart';
|
import 'package:star_lock/network/api_repository.dart';
|
||||||
import 'package:star_lock/tools/baseGetXController.dart';
|
import 'package:star_lock/tools/baseGetXController.dart';
|
||||||
@ -22,8 +23,15 @@ class XSJPushProvider {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String appKey;
|
||||||
|
if (F.isSKY) {
|
||||||
|
appKey = '7ff37d174c1a568a89e98dad';
|
||||||
|
} else {
|
||||||
|
appKey = '251fc8074820d122b6de58d2';
|
||||||
|
}
|
||||||
|
|
||||||
jpush.setup(
|
jpush.setup(
|
||||||
appKey: '251fc8074820d122b6de58d2',
|
appKey: appKey,
|
||||||
channel: 'flutter_channel',
|
channel: 'flutter_channel',
|
||||||
production: false,
|
production: false,
|
||||||
debug: true,
|
debug: true,
|
||||||
@ -34,25 +42,24 @@ class XSJPushProvider {
|
|||||||
);
|
);
|
||||||
|
|
||||||
addJPushEventHandler();
|
addJPushEventHandler();
|
||||||
bindDeviceID();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//极光推送事件处理方法
|
//极光推送事件处理方法
|
||||||
void addJPushEventHandler() {
|
void addJPushEventHandler() {
|
||||||
jpush.addEventHandler(
|
jpush.addEventHandler(
|
||||||
onReceiveNotification: (Map<String, dynamic> message) async {
|
onReceiveNotification: (Map<String, dynamic> message) async {
|
||||||
AppLog.log('onReceiveNotification: $message');
|
AppLog.log('onReceiveNotification: $message');
|
||||||
},
|
}, onOpenNotification: (Map<String, dynamic> message) async {
|
||||||
onOpenNotification: (Map<String, dynamic> message) async {
|
AppLog.log('onOpenNotification: $message');
|
||||||
AppLog.log('onOpenNotification: $message');
|
}, onReceiveMessage: (Map<String, dynamic> message) async {
|
||||||
},
|
AppLog.log('onReceiveMessage: $message');
|
||||||
onReceiveMessage: (Map<String, dynamic> message) async {
|
//这里接收自定义消息
|
||||||
AppLog.log('onReceiveMessage: $message');
|
}, onReceiveNotificationAuthorization:
|
||||||
},
|
(Map<String, dynamic> message) async {
|
||||||
onReceiveNotificationAuthorization: (Map<String, dynamic> message) async {
|
AppLog.log('onReceiveNotificationAuthorization: $message');
|
||||||
AppLog.log('onReceiveNotificationAuthorization: $message');
|
}, onInAppMessageShow: (Map<String, dynamic> message) async {
|
||||||
},
|
AppLog.log('onInAppMessageShow: $message');
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//绑定设备ID
|
//绑定设备ID
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user