1,修复实名认证完成后开锁动画不执行问题
2,更新检测是否认证完成后下次认证时间逻辑 3,电子钥匙模块新增部分国际化
This commit is contained in:
parent
1e8a1648eb
commit
6caeb5a5c2
@ -822,6 +822,7 @@
|
||||
"取消升级":"Cancel the upgrade",
|
||||
"固件传输中":"Firmware in transit",
|
||||
"关闭":"Shut down",
|
||||
"传输中'":"In transit"
|
||||
|
||||
"传输中'":"In transit",
|
||||
"操作记录":"Operation record",
|
||||
"修改姓名":"Modify name"
|
||||
}
|
||||
|
||||
@ -850,5 +850,7 @@
|
||||
"取消升级":"取消升级",
|
||||
"固件传输中":"固件传输中",
|
||||
"关闭":"关闭",
|
||||
"传输中'":"传输中"
|
||||
"传输中'":"传输中",
|
||||
"操作记录":"操作记录",
|
||||
"修改姓名":"修改姓名"
|
||||
}
|
||||
|
||||
@ -853,6 +853,7 @@
|
||||
"取消升级":"取消升级",
|
||||
"固件传输中":"固件传输中",
|
||||
"关闭":"关闭",
|
||||
"传输中'":"传输中"
|
||||
|
||||
"传输中'":"传输中",
|
||||
"操作记录":"操作记录",
|
||||
"修改姓名":"修改姓名"
|
||||
}
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
@ -20,7 +19,8 @@ class ElectronicKeyDetailPage extends StatefulWidget {
|
||||
const ElectronicKeyDetailPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<ElectronicKeyDetailPage> createState() => _ElectronicKeyDetailPageState();
|
||||
State<ElectronicKeyDetailPage> createState() =>
|
||||
_ElectronicKeyDetailPageState();
|
||||
}
|
||||
|
||||
class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
@ -35,18 +35,20 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
appBar: TitleAppBar(
|
||||
barTitle: TranslationLoader.lanKeys!.keyDetail!.tr,
|
||||
haveBack: true,
|
||||
actionsList: (state.keyType.value!=3) ? [
|
||||
IconButton(
|
||||
icon: Image.asset(
|
||||
'images/icon_bar_more.png',
|
||||
height: 30.h,
|
||||
width: 10.w,
|
||||
),
|
||||
onPressed: () {
|
||||
logic.openModalBottomSheet(context);
|
||||
},
|
||||
),
|
||||
]:null,
|
||||
actionsList: (state.keyType.value != 3)
|
||||
? [
|
||||
IconButton(
|
||||
icon: Image.asset(
|
||||
'images/icon_bar_more.png',
|
||||
height: 30.h,
|
||||
width: 10.w,
|
||||
),
|
||||
onPressed: () {
|
||||
logic.openModalBottomSheet(context);
|
||||
},
|
||||
),
|
||||
]
|
||||
: null,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: ListView(
|
||||
children: [
|
||||
@ -63,39 +65,54 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
allHeight: 70.h,
|
||||
// rightTitle:"2023.09.19 11:27\n2023.09.25 11:27",
|
||||
rightTitle: logic.getKeyTypeShowDateTime(),
|
||||
isHaveDirection: state.itemData.value.keyStatus! == XSConstantMacro.keyStatusExpired ? false : state.keyType.value == 3 ? false : true ,
|
||||
isHaveDirection: state.itemData.value.keyStatus! ==
|
||||
XSConstantMacro.keyStatusExpired
|
||||
? false
|
||||
: state.keyType.value == 3
|
||||
? false
|
||||
: true,
|
||||
isHaveLine: true,
|
||||
action: state.itemData.value.keyStatus! == XSConstantMacro.keyStatusExpired ? null :() async {
|
||||
if(state.keyType.value == 2 || state.keyType.value == 1){
|
||||
// 限时/永久
|
||||
var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if(data != null) {
|
||||
setState(() {
|
||||
state.starDate.value = data["beginTimeTimestamp"].toString();
|
||||
state.endDate.value = data["endTimeTimestamp"].toString();
|
||||
state.keyType.value = 2;
|
||||
});
|
||||
}
|
||||
}else if(state.keyType.value == 4){
|
||||
// 循环
|
||||
var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.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"];
|
||||
});
|
||||
}
|
||||
}
|
||||
})),
|
||||
action: state.itemData.value.keyStatus! ==
|
||||
XSConstantMacro.keyStatusExpired
|
||||
? null
|
||||
: () async {
|
||||
if (state.keyType.value == 2 ||
|
||||
state.keyType.value == 1) {
|
||||
// 限时/永久
|
||||
var data = await Get.toNamed(
|
||||
Routers.electronicKeyDetailChangeDate,
|
||||
arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if (data != null) {
|
||||
setState(() {
|
||||
state.starDate.value =
|
||||
data["beginTimeTimestamp"].toString();
|
||||
state.endDate.value =
|
||||
data["endTimeTimestamp"].toString();
|
||||
state.keyType.value = 2;
|
||||
});
|
||||
}
|
||||
} else if (state.keyType.value == 4) {
|
||||
// 循环
|
||||
var data = await Get.toNamed(
|
||||
Routers.electronicKeyPeriodValidityPage,
|
||||
arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.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"];
|
||||
});
|
||||
}
|
||||
}
|
||||
})),
|
||||
Obx(() => Visibility(
|
||||
visible: state.keyType.value == 4 ? true : false,
|
||||
child: Obx(() => CommonItem(
|
||||
@ -104,11 +121,13 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
isHaveDirection: true,
|
||||
isHaveLine: true,
|
||||
action: () async {
|
||||
var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if(data != null) {
|
||||
var data = await Get.toNamed(
|
||||
Routers.electronicKeyPeriodValidityPage,
|
||||
arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if (data != null) {
|
||||
setState(() {
|
||||
state.starDate.value = data["starDate"];
|
||||
state.endDate.value = data["endDate"];
|
||||
@ -122,14 +141,17 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
visible: state.keyType.value == 4 ? true : false,
|
||||
child: Obx(() => CommonItem(
|
||||
leftTitel: "有效时间".tr,
|
||||
rightTitle: "${DateTool().dateToHNString(state.starTime.value)}-${DateTool().dateToHNString(state.endTime.value)}",
|
||||
rightTitle:
|
||||
"${DateTool().dateToHNString(state.starTime.value)}-${DateTool().dateToHNString(state.endTime.value)}",
|
||||
isHaveDirection: true,
|
||||
action: () async {
|
||||
var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if(data != null) {
|
||||
var data = await Get.toNamed(
|
||||
Routers.electronicKeyPeriodValidityPage,
|
||||
arguments: {
|
||||
"pushType": 0,
|
||||
"itemData": state.itemData.value,
|
||||
});
|
||||
if (data != null) {
|
||||
setState(() {
|
||||
state.starDate.value = data["starDate"];
|
||||
state.endDate.value = data["endDate"];
|
||||
@ -150,33 +172,37 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
const SizedBox(height: 1),
|
||||
CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.senderTime!.tr,
|
||||
rightTitle: DateTool().dateToYMDHNString(
|
||||
state.itemData.value.sendDate.toString())),
|
||||
rightTitle: DateTool()
|
||||
.dateToYMDHNString(state.itemData.value.sendDate.toString())),
|
||||
Container(height: 10.h),
|
||||
Visibility(
|
||||
visible: state.itemData.value.keyRight == 1 ? true:false,
|
||||
visible: state.itemData.value.keyRight == 1 ? true : false,
|
||||
child: CommonItem(
|
||||
leftTitel: "仅管理自己创建的用户".tr,
|
||||
rightTitle: "",
|
||||
isHaveRightWidget: true,
|
||||
isHaveLine: true,
|
||||
rightWidget: SizedBox(
|
||||
width: 60.w,
|
||||
child: _onlyManageYouCreatesUserSwitch())),
|
||||
width: 60.w, child: _onlyManageYouCreatesUserSwitch())),
|
||||
),
|
||||
Visibility(// (state.keyInfo.value.lockSetting!.remoteUnlock == 1 ? true : false
|
||||
visible: CommonDataManage().currentKeyInfo.lockSetting!.remoteUnlock == 1 && state.itemData.value.keyRight != 1 ? true:false,
|
||||
Visibility(
|
||||
// (state.keyInfo.value.lockSetting!.remoteUnlock == 1 ? true : false
|
||||
visible:
|
||||
CommonDataManage().currentKeyInfo.lockSetting!.remoteUnlock ==
|
||||
1 &&
|
||||
state.itemData.value.keyRight != 1
|
||||
? true
|
||||
: false,
|
||||
child: CommonItem(
|
||||
leftTitel: "远程开锁".tr,
|
||||
rightTitle: "",
|
||||
isHaveRightWidget: true,
|
||||
isHaveLine: true,
|
||||
rightWidget: SizedBox(
|
||||
width: 60.w,
|
||||
child: _remoteUnlockingSwitch())),
|
||||
rightWidget:
|
||||
SizedBox(width: 60.w, child: _remoteUnlockingSwitch())),
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr,
|
||||
leftTitel: '实名认证'.tr,
|
||||
rightTitle: "",
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: SizedBox(
|
||||
@ -186,7 +212,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
: false))),
|
||||
Container(height: 10.h),
|
||||
CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
|
||||
leftTitel: '操作记录'.tr,
|
||||
rightTitle: "",
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
@ -198,7 +224,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
}),
|
||||
Container(height: 40.h),
|
||||
SubmitBtn(
|
||||
btnName: TranslationLoader.lanKeys!.delete!.tr,
|
||||
btnName: '删除'.tr,
|
||||
borderRadius: 20.w,
|
||||
isDelete: true,
|
||||
margin: EdgeInsets.only(
|
||||
@ -249,7 +275,8 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
value: state.onlyManageYouCreatesUser.value,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
state.onlyManageYouCreatesUser.value = !state.onlyManageYouCreatesUser.value;
|
||||
state.onlyManageYouCreatesUser.value =
|
||||
!state.onlyManageYouCreatesUser.value;
|
||||
logic.updateKeyDateRequest(1);
|
||||
});
|
||||
},
|
||||
@ -261,7 +288,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return ShowTFView(
|
||||
title: "${TranslationLoader.lanKeys!.amend!.tr} ${TranslationLoader.lanKeys!.name!.tr}",
|
||||
title: "修改姓名".tr,
|
||||
tipTitle: "请输入".tr,
|
||||
controller: state.changeNameController,
|
||||
sureClick: () {
|
||||
@ -277,5 +304,4 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
@ -237,9 +238,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
GestureDetector(
|
||||
onTap: state.openDoorBtnisUneable.value == true
|
||||
? () {
|
||||
setState(() {
|
||||
isNeedRealNameAuthThenOpenLock();
|
||||
});
|
||||
isNeedRealNameAuthThenOpenLock();
|
||||
}
|
||||
: null,
|
||||
onLongPressStart: state.openDoorBtnisUneable.value == true
|
||||
@ -580,9 +579,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
child: GestureDetector(
|
||||
onTap: state.openDoorBtnisUneable.value == true
|
||||
? () {
|
||||
setState(() {
|
||||
isNeedRealNameAuthThenOpenLock();
|
||||
});
|
||||
isNeedRealNameAuthThenOpenLock();
|
||||
}
|
||||
: null,
|
||||
onLongPressStart: state.openDoorBtnisUneable.value == true
|
||||
@ -1268,22 +1265,26 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
|
||||
//如果需要实名认证,需认证完成,方可开锁
|
||||
isNeedRealNameAuthThenOpenLock() {
|
||||
state.nextAuthTime.value = state.keyInfos.value.nextFaceValidateTime ?? 0;
|
||||
if (state.keyInfos.value.faceAuthentication == 1 &&
|
||||
state.keyInfos.value.nextFaceValidateTime! > 0 &&
|
||||
DateTool().compareTimeIsOvertime(
|
||||
state.keyInfos.value.nextFaceValidateTime!) ==
|
||||
true) {
|
||||
state.nextAuthTime.value > 0 &&
|
||||
DateTool().compareTimeIsOvertime(state.nextAuthTime.value) == true) {
|
||||
AliyunRealNameAuthProvider(
|
||||
getLockInfo: state.keyInfos.value,
|
||||
onCertifyResult: (bool isSuccess) {
|
||||
onCertifyResultWithTime: ((bool isSuccess, int getNextAuthTime) {
|
||||
state.nextAuthTime.value = getNextAuthTime;
|
||||
if (isSuccess) {
|
||||
// 认证成功,去开锁
|
||||
startOpenLock();
|
||||
setState(() {
|
||||
startOpenLock();
|
||||
});
|
||||
}
|
||||
}).initAliyunRealNameAuth();
|
||||
})).initAliyunRealNameAuth();
|
||||
} else {
|
||||
//无需认证,直接开锁
|
||||
startOpenLock();
|
||||
setState(() {
|
||||
startOpenLock();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@ class LockDetailState {
|
||||
|
||||
var operateDate = 0; // 按日期查询消息记录的时间戳
|
||||
var logCountPage = 10; // 蓝牙记录一页多少个
|
||||
var nextAuthTime = 0.obs; // 下次认证时间
|
||||
// LockDetailState() {
|
||||
// Map map = Get.arguments;
|
||||
// lockCount = map["lockCount"];
|
||||
|
||||
@ -33,6 +33,7 @@ import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRealName/fac
|
||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
|
||||
import 'package:star_lock/tools/aliyunRealNameAuth/realNameVertify_entity.dart';
|
||||
import 'package:star_lock/tools/aliyunRealNameAuth/serviceAuthResult_entity.dart';
|
||||
import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart';
|
||||
import '../common/safetyVerification/entity/SafetyVerificationEntity.dart';
|
||||
import '../login/login/entity/LoginEntity.dart';
|
||||
@ -2067,11 +2068,11 @@ class ApiRepository {
|
||||
}
|
||||
|
||||
// 检测certifyId是否完成认证
|
||||
Future<LockCertifyEntity> getServiceCheckCertify({
|
||||
Future<ServiceAuthResultEntity> getServiceCheckCertify({
|
||||
required String certifyId,
|
||||
required int keyId,
|
||||
}) async {
|
||||
final res = await apiProvider.getServiceCheckCertify(certifyId, keyId);
|
||||
return LockCertifyEntity.fromJson(res.body);
|
||||
return ServiceAuthResultEntity.fromJson(res.body);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
|
||||
import 'package:star_lock/network/api_repository.dart';
|
||||
import 'package:star_lock/tools/aliyunRealNameAuth/realNameVertify_entity.dart';
|
||||
import 'package:star_lock/tools/aliyunRealNameAuth/serviceAuthResult_entity.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
class AliyunRealNameAuthProvider {
|
||||
@ -14,10 +15,10 @@ class AliyunRealNameAuthProvider {
|
||||
var metainfosMap = {}; //认证信息
|
||||
var certifyId = ''; //认证ID
|
||||
var getLockInfo = LockListInfoItemEntity(); //锁信息
|
||||
final Function(bool) onCertifyResult; //认证结果
|
||||
final Function(bool, int) onCertifyResultWithTime; //认证结果及下次认证时间
|
||||
|
||||
AliyunRealNameAuthProvider(
|
||||
{required this.getLockInfo, required this.onCertifyResult});
|
||||
{required this.getLockInfo, required this.onCertifyResultWithTime});
|
||||
|
||||
//初始化
|
||||
initAliyunRealNameAuth() {
|
||||
@ -71,13 +72,14 @@ class AliyunRealNameAuthProvider {
|
||||
|
||||
// 检测certifyId是否完成认证
|
||||
Future<void> getServiceCheckCertify() async {
|
||||
var entity = await ApiRepository.to.getServiceCheckCertify(
|
||||
ServiceAuthResultEntity entity =
|
||||
await ApiRepository.to.getServiceCheckCertify(
|
||||
certifyId: certifyId,
|
||||
keyId: getLockInfo.keyId ?? 0,
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
// 如果认证成功,则调用回调函数,将结果传递给调用处
|
||||
onCertifyResult(true);
|
||||
onCertifyResultWithTime(true, entity.data!.nextFaceValidateTime!);
|
||||
} else {
|
||||
// 如果认证失败
|
||||
// await startVerify();
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
class ServiceAuthResultEntity {
|
||||
int? errorCode;
|
||||
String? description;
|
||||
String? errorMsg;
|
||||
Data? data;
|
||||
|
||||
ServiceAuthResultEntity(
|
||||
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||
|
||||
ServiceAuthResultEntity.fromJson(Map<String, dynamic> json) {
|
||||
errorCode = json['errorCode'];
|
||||
description = json['description'];
|
||||
errorMsg = json['errorMsg'];
|
||||
data = json['data'] != null ? Data.fromJson(json['data']) : null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['errorCode'] = errorCode;
|
||||
data['description'] = description;
|
||||
data['errorMsg'] = errorMsg;
|
||||
if (this.data != null) {
|
||||
data['data'] = this.data!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Data {
|
||||
int? nextFaceValidateTime;
|
||||
|
||||
Data({this.nextFaceValidateTime});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
nextFaceValidateTime = json['nextFaceValidateTime'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['nextFaceValidateTime'] = nextFaceValidateTime;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user