This commit is contained in:
魏少阳 2024-05-14 18:12:42 +08:00
commit 66a27c00b2
12 changed files with 195 additions and 148 deletions

View File

@ -322,7 +322,7 @@ SPEC CHECKSUMS:
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
fluttertoast: 9f2f8e81bb5ce18facb9748d7855bf5a756fe3db
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
fluwx: daa284756ce53442b3d0417ceeda66e981906811
google_maps_flutter_ios: d1318b4ff711612cab16862d7a87e31a7403d458
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
@ -351,4 +351,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 317f9473a5705c6fe4d79d95e81676f248048fdc
COCOAPODS: 1.15.2
COCOAPODS: 1.14.3

View File

@ -282,14 +282,17 @@ class BlueManage {
}
// String listStr = scanDevices
// // .where((element) =>
// // element.advertisementData.advName == 'TMH_dc8f928369ed')
// .where((element) =>
// element.advertisementData.advName == 'TMH_dc8f928369ed' ||
// element.device.platformName == 'TMH_dc8f928369ed')
// .map((e) => 'advName:${e.advertisementData.advName} '
// 'serviceUuids:${e.advertisementData.serviceUuids} '
// '是否被重置:${e.advertisementData.serviceUuids[0].toString()[31]}')
// .join(',')
// .toString();
// AppLog.log('--->扫描到的设备 ${listStr} ');
// if (listStr.trim() != '') {
// AppLog.log('--->扫描到的设备 ${listStr} ');
// }
scanDevicesCallBack(scanDevices);
// EventBusManager().eventBusFir(scanDevices);
@ -354,9 +357,14 @@ class BlueManage {
{bool isAddEquipment = false}) async {
connectDeviceName = deviceName;
List<ScanResult> devicesList = scanDevices;
if (isAddEquipment == false) {
bool isExistDevice = scanDevices.any((element) =>
element.device.platformName == connectDeviceName ||
element.advertisementData.advName == connectDeviceName);
if (isAddEquipment == false || isExistDevice == false) {
//使
startScan(10, (List<ScanResult> scanDevices) {
startScanSingle(deviceName, 10, (List<ScanResult> scanDevices) {
_connectDevice(scanDevices, deviceName, connectStateCallBack,
isAddEquipment: isAddEquipment);
});

View File

@ -228,20 +228,23 @@ class AuthorizedAdminLogic extends BaseGetXController {
//
Future<void> keyCheckFace() async {
AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace(
countryCode: int.parse(state.countryCode.value),
account: state.emailOrPhoneController.text);
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
//
state.isRequireAuth.value = true;
state.isAuthentication.value = true;
} else {
} else if (entity.errorCode == 432) {
//432--
ShowTipView().showBuyTipWithContentAlert(
ShowCupertinoAlertView().showBuyTipWithContentAlert(
titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: {'isShop': false});
});
} else if (entity.errorCode == 433) {
//
ShowCupertinoAlertView().showContactAdministratorBuyAlert();
}
}

View File

@ -185,20 +185,23 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
//
Future<void> keyCheckFace() async {
AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace(
countryCode: int.parse(state.countryCode),
account: state.emailOrPhoneController.text);
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
);
if (entity.errorCode!.codeIsSuccessful) {
//
state.isRequireAuth.value = true;
state.isAuthentication.value = true;
} else {
} else if (entity.errorCode == 432) {
//432--
ShowTipView().showBuyTipWithContentAlert(
ShowCupertinoAlertView().showBuyTipWithContentAlert(
titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: {'isShop': false});
});
} else if (entity.errorCode == 433) {
//
ShowCupertinoAlertView().showContactAdministratorBuyAlert();
}
}

View File

@ -643,8 +643,8 @@ class _LockDetailPageState extends State<LockDetailPage>
: false,
child: GestureDetector(
onTap: () {
ShowCupertinoAlertView()
.isToRemoteUnLockAlert((idCard, name) {
ShowCupertinoAlertView().isToRemoteUnLockAlert(
remoteUnlockAction: () {
if (state.keyInfos.value.hasGateway != 1) {
logic.showToast('附近没有可用网关');
}
@ -1316,7 +1316,9 @@ class _LockDetailPageState extends State<LockDetailPage>
//
isNeedRealNameAuthThenOpenLock() {
state.nextAuthTime.value = state.keyInfos.value.nextFaceValidateTime ?? 0;
if (state.keyInfos.value.faceAuthentication == 1 && state.nextAuthTime.value > 0 && DateTool().compareTimeIsOvertime(state.nextAuthTime.value) == true) {
if (state.keyInfos.value.faceAuthentication == 1 &&
state.nextAuthTime.value > 0 &&
DateTool().compareTimeIsOvertime(state.nextAuthTime.value) == true) {
AliyunRealNameAuthProvider(
getLockInfo: state.keyInfos.value,
onCertifyResultWithTime: ((bool isSuccess, int getNextAuthTime) {

View File

@ -4,6 +4,7 @@ import 'package:flutter/scheduler.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/main/lockMian/lockList/lockList_xhj_page.dart';
import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/submitBtn.dart';
@ -36,22 +37,21 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
final logic = Get.put(LockMainLogic());
final state = Get.find<LockMainLogic>().state;
Future<void> getHttpData() async {
Future<void> getHttpData({bool clearScanDevices = false}) async {
LockListInfoGroupEntity? lockListInfoGroupEntity =
await Storage.getLockMainListData();
if (lockListInfoGroupEntity != null) {
var localLockListInfoGroupEntity = lockListInfoGroupEntity;
logic.loadMainDataLogic(localLockListInfoGroupEntity).then((value) {
if (mounted) {
setState(() {});
}
});
await logic.loadMainDataLogic(localLockListInfoGroupEntity);
}
await logic.getStarLockInfo();
await Future.delayed(const Duration(milliseconds: 200));
if (clearScanDevices) {
BlueManage().scanDevices.clear();
}
if (mounted) {
setState(() {});
}
logic.getStarLockInfo().then((LockListInfoEntity value) {
if (mounted) {
setState(() {});
}
});
}
@override
@ -237,7 +237,7 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
void _initLoadDataAction() {
_teamEvent = eventBus.on<RefreshLockListInfoDataEvent>().listen((event) {
logic.pageNo = 1;
getHttpData();
getHttpData(clearScanDevices: event.clearScanDevices);
});
}

View File

@ -1,4 +1,3 @@
import 'dart:async';
import 'dart:math';
@ -31,8 +30,10 @@ class SaveLockLogic extends BaseGetXController {
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
if (reply is AddUserReply && state.ifCurrentScreen.value == true) {
_replyAddUserKey(reply);
}
@ -81,19 +82,19 @@ class SaveLockLogic extends BaseGetXController {
startDate: DateTime.now().millisecondsSinceEpoch,
expireDate: 0x11223344,
useCountLimit: 0xFFFF,
isRound:0,
isRound: 0,
weekRound: 0,
startHour: 0,
startHour: 0,
startMin: 0,
endHour: 0,
endMin: 0,
endMin: 0,
role: 255,
password: state.adminPassword,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: token,
isBeforeAddUser: true);
isBeforeAddUser: true);
break;
default:
// loading
@ -195,7 +196,7 @@ class SaveLockLogic extends BaseGetXController {
//
Future<void> addUserConnectBlue() async {
//
if(state.sureBtnState.value == 1){
if (state.sureBtnState.value == 1) {
return;
}
state.sureBtnState.value = 1;
@ -203,15 +204,16 @@ class SaveLockLogic extends BaseGetXController {
// showTitleEasyLoading("添加锁进行中 1/2");
showEasyLoading();
//
showBlueConnetctToastTimer(action: (){
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
});
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
BlueManage().bludSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -226,33 +228,33 @@ class SaveLockLogic extends BaseGetXController {
}
IoSenderManage.senderAddUser(
lockID: BlueManage().connectDeviceName,
authUserID:await Storage.getUid(),
keyID:"1",
userID:await Storage.getUid(),
openMode:1,
keyType:1,
startDate:DateTime.now().millisecondsSinceEpoch,
expireDate:0x11223344,
authUserID: await Storage.getUid(),
keyID: "1",
userID: await Storage.getUid(),
openMode: 1,
keyType: 1,
startDate: DateTime.now().millisecondsSinceEpoch,
expireDate: 0x11223344,
useCountLimit: 0xFFFF,
isRound:0,
isRound: 0,
weekRound: 0,
startHour: 0,
startHour: 0,
startMin: 0,
endHour: 0,
endMin: 0,
role:255,
password:state.adminPassword,
needAuthor:1,
publicKey:publicKeyDataList,
privateKey:getPrivateKeyList,
endMin: 0,
role: 255,
password: state.adminPassword,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
isBeforeAddUser: true);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
@ -352,7 +354,7 @@ class SaveLockLogic extends BaseGetXController {
// }, isAddEquipment: true);
// }
void bindBlueAdmin() async{
void bindBlueAdmin() async {
state.lockInfo["adminPwd"] = state.adminPassword;
var positionMap = {};
@ -402,7 +404,7 @@ class SaveLockLogic extends BaseGetXController {
// BlueManage().disconnect(BlueManage().connectDeviceMacAddress);
// eventBus.fire(RefreshLockListInfoDataEvent());
// Get.close(state.isFromMap == 1 ? 5 : 6);
}else{
} else {
state.sureBtnState.value = 0;
}
}
@ -457,8 +459,8 @@ class SaveLockLogic extends BaseGetXController {
// );
// }
void backAction(){
eventBus.fire(RefreshLockListInfoDataEvent());
void backAction() {
eventBus.fire(RefreshLockListInfoDataEvent(clearScanDevices: true));
BlueManage().disconnect();
Get.close(state.isFromMap == 1 ? 5 : 6);
}
@ -475,7 +477,6 @@ class SaveLockLogic extends BaseGetXController {
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
@ -484,5 +485,4 @@ class SaveLockLogic extends BaseGetXController {
_replySubscription.cancel();
super.onClose();
}
}

View File

@ -184,8 +184,7 @@ class ApiProvider extends BaseProvider {
'electricQuantityStandby': electricQuantityStandby,
'lockId': lockId,
}),
isUnShowLoading: isUnShowLoading
);
isUnShowLoading: isUnShowLoading);
Future<Response> modifyKeyName(
String keyId,
@ -265,17 +264,17 @@ class ApiProvider extends BaseProvider {
Future<Response> lockRecordList(
{required String lockId,
required String pageNo,
required String recordType,
required String searchStr,
required String startDate,
required String endDate,
required String keyboardPwdId,
required String cardId,
required String fingerprintId,
required String keyId,
required String faceId,
required String pageSize}) =>
required String pageNo,
required String recordType,
required String searchStr,
required String startDate,
required String endDate,
required String keyboardPwdId,
required String cardId,
required String fingerprintId,
required String keyId,
required String faceId,
required String pageSize}) =>
post(
keyOperationRecordURL.toUrl,
jsonEncode({
@ -809,10 +808,8 @@ class ApiProvider extends BaseProvider {
}));
//
Future<Response> getServerDatetimeLoadData() => post(
getServerDatetimeUrl.toUrl,
jsonEncode({}),
isUnShowLoading: true);
Future<Response> getServerDatetimeLoadData() =>
post(getServerDatetimeUrl.toUrl, jsonEncode({}), isUnShowLoading: true);
//
Future<Response> setLockDiagnoseData(
@ -1611,12 +1608,12 @@ class ApiProvider extends BaseProvider {
post(getUserInfoURL.toUrl, jsonEncode({'operatorUid': operatorUid}));
//
Future<Response> keyboardPwdReset(String lockId, List passwordKey) =>
post(keyboardPwdResetURL.toUrl,
jsonEncode({
'lockId': lockId,
'passwordKey': passwordKey,
}));
Future<Response> keyboardPwdReset(String lockId, List passwordKey) => post(
keyboardPwdResetURL.toUrl,
jsonEncode({
'lockId': lockId,
'passwordKey': passwordKey,
}));
//使
Future<Response> sendValidationCodeAuth(String countryCode, String account,
@ -2042,14 +2039,12 @@ class ApiProvider extends BaseProvider {
//
Future<Response> keyCheckFace(
int countryCode,
String account,
int lockId,
) =>
post(
isFaceAuthenticationURL.toUrl,
jsonEncode({
'countryCode': countryCode,
'account': account,
'lockId': lockId,
}));
// certifyId

View File

@ -219,19 +219,19 @@ class ApiRepository {
//-
Future<KeyOperationRecordEntity> lockRecordList({
required String lockId,
required String pageNo,
required String recordType,
required String searchStr,
required String startDate,
required String endDate,
required String keyboardPwdId,
required String cardId,
required String fingerprintId,
required String keyId,
required String faceId,
required String pageSize,
}) async {
required String lockId,
required String pageNo,
required String recordType,
required String searchStr,
required String startDate,
required String endDate,
required String keyboardPwdId,
required String cardId,
required String fingerprintId,
required String keyId,
required String faceId,
required String pageSize,
}) async {
final res = await apiProvider.lockRecordList(
lockId: lockId,
pageNo: pageNo,
@ -323,9 +323,9 @@ class ApiRepository {
//
Future<KeyOperationRecordEntity> uploadElectricQuantity(
{required String? electricQuantity,
required String? electricQuantityStandby,
required String? lockId,
required bool? isUnShowLoading}) async {
required String? electricQuantityStandby,
required String? lockId,
required bool? isUnShowLoading}) async {
final res = await apiProvider.uploadElectricQuantity(
electricQuantity!, electricQuantityStandby!, lockId!, isUnShowLoading!);
return KeyOperationRecordEntity.fromJson(res.body);
@ -2075,10 +2075,9 @@ class ApiRepository {
//
Future<AdvancedFunctionRecordEntity> keyCheckFace({
required int countryCode,
required String account,
required int lockId,
}) async {
final res = await apiProvider.keyCheckFace(countryCode, account);
final res = await apiProvider.keyCheckFace(lockId);
return AdvancedFunctionRecordEntity.fromJson(res.body);
}

View File

@ -7,13 +7,17 @@ EventBus eventBus = EventBus();
///
class RefreshLockListInfoDataEvent {
RefreshLockListInfoDataEvent();
//
bool clearScanDevices;
RefreshLockListInfoDataEvent({this.clearScanDevices = false});
}
///
class LockAddUserSucceedEvent {
int type; // 0 1token失效
List<int> dataList;
LockAddUserSucceedEvent(this.dataList, this.type);
}
@ -40,6 +44,7 @@ class RefreshCheckInListEvent {
///
class PassCurrentLockInformationEvent {
LockSetInfoData lockSetInfoData;
PassCurrentLockInformationEvent(this.lockSetInfoData);
}
@ -51,12 +56,14 @@ class OtherTypeRefreshListEvent {
/// number
class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
String number;
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
}
///
class ChangeLanguageBlockLastLanguageEvent {
String languageTitle;
ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
}
@ -69,36 +76,42 @@ class LockGroupEditGroupLockRefreshEvent {
class LockSetChangeSetRefreshLockDetailWithType {
int type; // 0 1 2 3 4 5
String setResult;
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
}
///
class GetTVDataRefreshUI {
List<int> tvList;
GetTVDataRefreshUI(this.tvList);
}
/// UDP接收状态然后刷新界面
class GetUDPStatusRefreshUI {
int udpStatus;
GetUDPStatusRefreshUI(this.udpStatus);
}
/// UDP接收状态然后刷新监控界面
class GetUDPStatusMonitorUI {
int udpStatus;
GetUDPStatusMonitorUI(this.udpStatus);
}
///
class GetFirstFrameGoPush {
bool isFirstFrame;
GetFirstFrameGoPush(this.isFirstFrame);
}
/// typeIndex
class GetPasswordTypeUpdateIndex {
int passwordType;
GetPasswordTypeUpdateIndex(this.passwordType);
}
@ -125,6 +138,7 @@ class AuthorizedAdminPageRefreshUI {
///
class DoorLockLogListRefreshUI {
DateTime getDoorLockLogTime;
DoorLockLogListRefreshUI(this.getDoorLockLogTime);
}
@ -141,4 +155,4 @@ class AuthorizedAdministratorListPageRefreshUI {
///
class MineInfoChangeRefreshUI {
MineInfoChangeRefreshUI();
}
}

View File

@ -276,7 +276,7 @@ class ShowCupertinoAlertView {
}
//
void isToRemoteUnLockAlert(AuthInfoCallback callback) {
void isToRemoteUnLockAlert({required Function remoteUnlockAction}) {
showCupertinoDialog(
context: Get.context!,
builder: (BuildContext context) {
@ -296,7 +296,7 @@ class ShowCupertinoAlertView {
CupertinoDialogAction(
onPressed: () {
//
callback(null, null);
remoteUnlockAction();
Get.back();
},
child: Text(
@ -309,4 +309,59 @@ class ShowCupertinoAlertView {
},
);
}
//
void showBuyTipWithContentAlert(
{required String titleStr, required Function sureClick}) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text(titleStr),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child:
Text('购买'.tr, style: TextStyle(color: AppColors.mainColor)),
onPressed: () {
Get.back();
sureClick();
},
),
],
);
},
);
}
//
void showContactAdministratorBuyAlert() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: const Text('实名认证为付费功能,请联系锁的管理员购买后再使用'),
actions: [
CupertinoDialogAction(
child: Text(
'确定'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: () {
Get.back();
},
),
],
);
},
);
}
}

View File

@ -122,36 +122,4 @@ class ShowTipView {
},
);
}
//
void showBuyTipWithContentAlert(
{required String titleStr, required Function sureClick}) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text(titleStr),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: () {
Get.back();
},
),
CupertinoDialogAction(
child:
Text('购买'.tr, style: TextStyle(color: AppColors.mainColor)),
onPressed: () {
Get.back();
sureClick();
},
),
],
);
},
);
}
}