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