1,新增猫眼设置部分接口处理逻辑

2,退出登录新增推送deviceID以处理退出登录后仍可收到通知
This commit is contained in:
Daisy 2024-04-03 09:53:30 +08:00
parent b7fcb60f28
commit 76d212c933
13 changed files with 235 additions and 178 deletions

View File

@ -282,7 +282,7 @@ class DoorLockLogLogic extends BaseGetXController {
// senderReferEventRecordTime();
// senderReferEventRecordNumber();
testReadJsonData();
// testReadJsonData();
mockNetworkDataRequest();
}
}

View File

@ -6,6 +6,7 @@ import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart';
import 'package:star_lock/tools/advancedCalendar/src/widget.dart';
import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart';
import 'package:star_lock/tools/noData.dart';
import 'package:timelines/timelines.dart';
import '../../../app_settings/app_colors.dart';
@ -140,91 +141,93 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> {
color: Colors.white,
borderRadius: BorderRadius.circular(16.w),
),
child: Timeline.tileBuilder(
builder: TimelineTileBuilder.fromStyle(
contentsAlign: ContentsAlign.basic,
itemCount: timelineDataList.length,
contentsBuilder: (context, index) {
DoorLockLogDataItem timelineData = timelineDataList[index];
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(timelineData.operateDate!);
String formattedTime =
'${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
child: timelineDataList.isNotEmpty
? Timeline.tileBuilder(
builder: TimelineTileBuilder.fromStyle(
contentsAlign: ContentsAlign.basic,
itemCount: timelineDataList.length,
contentsBuilder: (context, index) {
DoorLockLogDataItem timelineData = timelineDataList[index];
DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
timelineData.operateDate!);
String formattedTime =
'${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
return Padding(
padding: EdgeInsets.only(left: 20.w, top: 20.h),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'$formattedTime ${timelineData.recordTypeName}',
textAlign: TextAlign.left,
style: TextStyle(
color: Colors.black,
fontSize: 24.sp,
fontWeight: FontWeight.w600,
),
),
SizedBox(
height: 10.h,
),
GestureDetector(
onTap: () {
Get.toNamed(Routers.videoLogDetailPage);
},
child: Stack(
return Padding(
padding: EdgeInsets.only(left: 20.w, top: 20.h),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
timelineData.imagesUrl != null
?
// Image.network(
// timelineData.imagesUrl!,
// width: 260.w,
// height: 260.h,
// )
Image(
image: const AssetImage(
'images/main/icon_lockDetail_monitoringvoiceFrist.png'),
width: 240.w,
height: 180.h,
fit: BoxFit.contain,
)
: Container(),
Positioned(
top: 150.h,
left: 10.w,
child: Image(
image: const AssetImage(
'images/main/icon_lockLog_play.png'),
width: 24.w,
height: 20.w,
Text(
'$formattedTime ${timelineData.recordTypeName}',
textAlign: TextAlign.left,
style: TextStyle(
color: Colors.black,
fontSize: 24.sp,
fontWeight: FontWeight.w600,
),
),
SizedBox(
height: 10.h,
),
GestureDetector(
onTap: () {
Get.toNamed(Routers.videoLogDetailPage);
},
child: Stack(
children: [
timelineData.imagesUrl != null
?
// Image.network(
// timelineData.imagesUrl!,
// width: 260.w,
// height: 260.h,
// )
Image(
image: const AssetImage(
'images/main/icon_lockDetail_monitoringvoiceFrist.png'),
width: 240.w,
height: 180.h,
fit: BoxFit.contain,
)
: Container(),
Positioned(
top: 150.h,
left: 10.w,
child: Image(
image: const AssetImage(
'images/main/icon_lockLog_play.png'),
width: 24.w,
height: 20.w,
),
),
],
),
),
SizedBox(
height: 20.h,
),
],
),
),
SizedBox(
height: 20.h,
),
],
);
},
),
);
},
),
theme: TimelineThemeData(
nodePosition: 0.04, //
connectorTheme: const ConnectorThemeData(
thickness: 1.0,
color: AppColors.greyLineColor,
indent: 0.5,
),
indicatorTheme: const IndicatorThemeData(
size: 8.0,
color: AppColors.greyLineColor,
position: 0.4,
),
),
),
theme: TimelineThemeData(
nodePosition: 0.04, //
connectorTheme: const ConnectorThemeData(
thickness: 1.0,
color: AppColors.greyLineColor,
indent: 0.5,
),
indicatorTheme: const IndicatorThemeData(
size: 8.0,
color: AppColors.greyLineColor,
position: 0.4,
),
),
)
: NoData(),
);
}
}

View File

@ -39,7 +39,9 @@ class _CatEyeSetPageState extends State<CatEyeSetPage> {
isHaveDirection: true,
action: () {
Get.toNamed(Routers.catEyeWorkModePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
'lockSetInfoData': state.lockSetInfoData.value,
'catEyeConfigata': state
.lockSetInfoData.value.lockSettingInfo!.catEyeConfig![0]
})?.then((value) {
if (value != null) {
state.selectCatEyeWorkMode.value = value;

View File

@ -9,20 +9,28 @@ class CatEyeWorkModeLogic extends BaseGetXController {
void updateCatEyeModeConfig() async {
var entity = await ApiRepository.to.updateCatEyeModeConfig(
lockId: state.lockSetInfoData.value.lockId!,
catEyeConfig: {
'catEyeMode': state.selectCatEyeWorkMode.value,
'catEyeModeConfig': {
'recordMode': state.recordMode.value,
'recordStartTime': state.recordStartTime.value,
'recordEndTime': state.recordEndTime.value,
'recordTime': state.recordTime.value,
'detectionDistance': state.detectionDistance.value,
'realTimeMode': state.realTimeMode.value,
catEyeConfig: [
{
'catEyeMode': state.selectCatEyeWorkMode.value,
'catEyeModeConfig': {
'recordMode': state.recordMode.value,
'recordStartTime': state.recordStartTime.value,
'recordEndTime': state.recordEndTime.value,
'recordTime': state.recordTime.value,
'detectionDistance': state.detectionDistance.value,
'realTimeMode': state.realTimeMode.value,
}
}
},
],
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('设置成功');
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
}

View File

@ -1,20 +1,38 @@
import 'package:get/get.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart';
class CatEyeWorkModeState {
var lockSetInfoData = LockSetInfoData().obs;
var selectCatEyeWorkMode = 0.obs; //
var boolList = [true, false, false, false].obs;
var boolList = [false, false, false, false].obs;
var recordMode = 0.obs; // 0 1
//recordStartTime与recordEndTime参数
var recordStartTime = 0.obs; // 1709715049775,
var recordEndTime = 0.obs; //1709715049775,
var recordTime = 0.obs; //
var recordTime = ''.obs; //
var detectionDistance = 0.obs; //
var realTimeMode = 0.obs; // 0 1
var catEyeConfigData = CatEyeConfig().obs;
CatEyeWorkModeState() {
Map map = Get.arguments;
lockSetInfoData.value = map["lockSetInfoData"];
catEyeConfigData.value = map['catEyeConfigata'];
selectCatEyeWorkMode.value = catEyeConfigData.value.catEyeMode!;
if (catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModePowerSaving) {
boolList[0] = true;
} else if (catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeStayCapture) {
boolList[1] = true;
} else if (catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeRealTimeMonitoring) {
boolList[2] = true;
} else if (catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeCustom) {
boolList[3] = true;
}
}
}

View File

@ -458,19 +458,27 @@ class LockSettingInfo {
int? motorTorsion;
int? stayWarn;
int? abnormalWarn;
List<CatEyeModeConfig>? catEyeConfig;
List<CatEyeConfig>? catEyeConfig;
int? faceSwitch; // 0: 1:
int? faceAutoLightScreen; // 0: 1:
int? faceInductionDistance; //
int? faceAntiMistakeOpen; // 0: 1:
int? autoLightScreen; //- 0: 1:
int? autoLightScreenTime; //-
int? dayNotOpenDoorSwitch; //N天未开门开关 (/)
int? dayNotOpenDoorValue; //N天未开门值
int? doorNotCloseSwitch; // (/)
int? lowElecNoticeSwitch; // (/)
int? doorbellNoticeSwitch; // (/)
int? someoneAtDoorSwitch; // (/)//
// List<CatEyeModeConfig>? catEyeConfigList;
// int? faceSwitch; // 0: 1:
// int? faceAutoLightScreen; // 0: 1:
// int? faceInductionDistance; //
// int? faceAntiMistakeOpen; // 0: 1:
// int? autoLightScreen; //- 0: 1:
// int? autoLightScreenTime; //-
// int? dayNotOpenDoorSwitch; //N天未开门开关 (/)
// int? dayNotOpenDoorValue; //N天未开门值
// int? doorNotCloseSwitch; // (/)
// int? lowElecNoticeSwitch; // (/)
// int? doorbellNoticeSwitch; // (/)
// int? someoneAtDoorSwitch; // (/)//
LockSettingInfo({
this.remoteUnlock,
@ -505,12 +513,12 @@ class LockSettingInfo {
this.faceAntiMistakeOpen,
this.autoLightScreen,
this.autoLightScreenTime,
this.dayNotOpenDoorSwitch,
this.dayNotOpenDoorValue,
this.doorNotCloseSwitch,
this.lowElecNoticeSwitch,
this.doorbellNoticeSwitch,
this.someoneAtDoorSwitch,
// this.dayNotOpenDoorSwitch,
// this.dayNotOpenDoorValue,
// this.doorNotCloseSwitch,
// this.lowElecNoticeSwitch,
// this.doorbellNoticeSwitch,
// this.someoneAtDoorSwitch,
});
LockSettingInfo.fromJson(Map<String, dynamic> json) {
@ -545,9 +553,9 @@ class LockSettingInfo {
stayWarn = json['stayWarn'];
abnormalWarn = json['abnormalWarn'];
if (json['catEyeConfig'] != null) {
catEyeConfig = <CatEyeModeConfig>[];
catEyeConfig = <CatEyeConfig>[];
json['catEyeConfig'].forEach((v) {
catEyeConfig!.add(CatEyeModeConfig.fromJson(v));
catEyeConfig!.add(CatEyeConfig.fromJson(v));
});
}
faceSwitch = json['faceSwitch'];
@ -556,12 +564,12 @@ class LockSettingInfo {
faceAntiMistakeOpen = json['faceAntiMistakeOpen'];
autoLightScreen = json['autoLightScreen'];
autoLightScreenTime = json['autoLightScreenTime'];
dayNotOpenDoorSwitch = json['dayNotOpenDoorSwitch'];
dayNotOpenDoorValue = json['dayNotOpenDoorValue'];
doorNotCloseSwitch = json['doorNotCloseSwitch'];
lowElecNoticeSwitch = json['lowElecNoticeSwitch'];
doorbellNoticeSwitch = json['doorbellNoticeSwitch'];
someoneAtDoorSwitch = json['someoneAtDoorSwitch'];
// dayNotOpenDoorSwitch = json['dayNotOpenDoorSwitch'];
// dayNotOpenDoorValue = json['dayNotOpenDoorValue'];
// doorNotCloseSwitch = json['doorNotCloseSwitch'];
// lowElecNoticeSwitch = json['lowElecNoticeSwitch'];
// doorbellNoticeSwitch = json['doorbellNoticeSwitch'];
// someoneAtDoorSwitch = json['someoneAtDoorSwitch'];
}
Map<String, dynamic> toJson() {
@ -603,12 +611,12 @@ class LockSettingInfo {
data['faceAntiMistakeOpen'] = faceAntiMistakeOpen;
data['autoLightScreen'] = autoLightScreen;
data['autoLightScreenTime'] = autoLightScreenTime;
data['dayNotOpenDoorSwitch'] = dayNotOpenDoorSwitch;
data['dayNotOpenDoorValue'] = dayNotOpenDoorValue;
data['doorNotCloseSwitch'] = doorNotCloseSwitch;
data['lowElecNoticeSwitch'] = lowElecNoticeSwitch;
data['doorbellNoticeSwitch'] = doorbellNoticeSwitch;
data['someoneAtDoorSwitch'] = someoneAtDoorSwitch;
// data['dayNotOpenDoorSwitch'] = dayNotOpenDoorSwitch;
// data['dayNotOpenDoorValue'] = dayNotOpenDoorValue;
// data['doorNotCloseSwitch'] = doorNotCloseSwitch;
// data['lowElecNoticeSwitch'] = lowElecNoticeSwitch;
// data['doorbellNoticeSwitch'] = doorbellNoticeSwitch;
// data['someoneAtDoorSwitch'] = someoneAtDoorSwitch;
return data;
}
@ -641,7 +649,7 @@ class PassageModeConfig {
}
class CatEyeConfig {
int? catEyeMode;
int? catEyeMode; //1 2 3 4
CatEyeModeConfig? catEyeModeConfig;
CatEyeConfig({this.catEyeMode, this.catEyeModeConfig});
@ -664,12 +672,12 @@ class CatEyeConfig {
}
class CatEyeModeConfig {
int? recordMode;
String? recordTime;
int? realTimeMode;
int? recordEndTime;
int? recordStartTime;
double? detectionDistance;
int? recordMode; // 0 1
String? recordTime; //
int? realTimeMode; // 0 1
int? recordEndTime; //-
int? recordStartTime; //-
int? detectionDistance; //
CatEyeModeConfig(
{this.recordMode,

View File

@ -10,7 +10,7 @@ class StarLockMineLogic extends BaseGetXController {
//
Future<void> userLogoutRequest() async {
LoginEntity entity = await ApiRepository.to.userLogout();
LoginEntity entity = await ApiRepository.to.userLogout(deviceld: '');
if (entity.errorCode!.codeIsSuccessful) {}
}

View File

@ -51,7 +51,10 @@ class MineSetLogic extends BaseGetXController {
//退
Future<void> userLogoutRequest() async {
LoginEntity entity = await ApiRepository.to.userLogout();
var getPushDeviceID = await Storage.getString(pushDeviceID);
LoginEntity entity =
await ApiRepository.to.userLogout(deviceld: getPushDeviceID!);
if (entity.errorCode!.codeIsSuccessful) {
UdpHelp().closeUDP();
logOut();

View File

@ -600,12 +600,13 @@ class ApiProvider extends BaseProvider {
'pageSize': pageSize,
}));
Future<Response> expireFingerprintList(String pageNo, String pageSize) => post(
expireFingerprintListURL.toUrl,
jsonEncode({
'pageNo': pageNo,
'pageSize': pageSize,
}));
Future<Response> expireFingerprintList(String pageNo, String pageSize) =>
post(
expireFingerprintListURL.toUrl,
jsonEncode({
'pageNo': pageNo,
'pageSize': pageSize,
}));
Future<Response> expireFaceList(String pageNo, String pageSize) => post(
expireFaceListURL.toUrl,
@ -1500,7 +1501,8 @@ class ApiProvider extends BaseProvider {
}));
//退
Future<Response> userLogout() => get(userLogoutURL.toUrl);
Future<Response> userLogout(String deviceld) =>
post(userLogoutURL.toUrl, jsonEncode({'deviceld': deviceld}));
//
Future<Response> deleteAccount(
@ -1657,12 +1659,13 @@ class ApiProvider extends BaseProvider {
}));
//
Future<Response> updateCatEyeModeConfig(int lockId, Map catEyeConfig) => post(
updateCatEyeConfigURL.toUrl,
jsonEncode({
'lockId': lockId,
'catEyeConfig': catEyeConfig,
}));
Future<Response> updateCatEyeModeConfig(int lockId, List catEyeConfig) =>
post(
updateCatEyeConfigURL.toUrl,
jsonEncode({
'lockId': lockId,
'catEyeConfig': catEyeConfig,
}));
//
Future<Response> updateAutoLightScreenConfig(

View File

@ -336,20 +336,27 @@ class ApiRepository {
//
Future<KeyOperationRecordEntity> updateKeyDate(
{
required String keyId,
required String lockId,
required String endDate,
required String startDate,
required List weekDays,
required int keyType,
required int startTime,
required int endTime,
required int isOnlyManageSelf,
required int remoteEnable
}) async {
{required String keyId,
required String lockId,
required String endDate,
required String startDate,
required List weekDays,
required int keyType,
required int startTime,
required int endTime,
required int isOnlyManageSelf,
required int remoteEnable}) async {
final res = await apiProvider.updateKeyDate(
keyId, lockId, endDate, startDate, weekDays, keyType, startTime, endTime, isOnlyManageSelf, remoteEnable);
keyId,
lockId,
endDate,
startDate,
weekDays,
keyType,
startTime,
endTime,
isOnlyManageSelf,
remoteEnable);
return KeyOperationRecordEntity.fromJson(res.body);
}
@ -538,10 +545,7 @@ class ApiRepository {
//
Future<ElectronicKeyListEntity> deleteElectronicKey(
{
required String keyId,
required int includeUnderlings
}) async {
{required String keyId, required int includeUnderlings}) async {
final res = await apiProvider.deleteElectronicKey(keyId, includeUnderlings);
return ElectronicKeyListEntity.fromJson(res.body);
}
@ -566,13 +570,15 @@ class ApiRepository {
}
//
Future<ElectronicKeyListEntity> setAdministrator({required String keyId}) async {
Future<ElectronicKeyListEntity> setAdministrator(
{required String keyId}) async {
final res = await apiProvider.setAdministrator(keyId);
return ElectronicKeyListEntity.fromJson(res.body);
}
//
Future<ElectronicKeyListEntity> cancelAdministrator({required String keyId}) async {
Future<ElectronicKeyListEntity> cancelAdministrator(
{required String keyId}) async {
final res = await apiProvider.cancelAdministrator(keyId);
return ElectronicKeyListEntity.fromJson(res.body);
}
@ -604,13 +610,15 @@ class ApiRepository {
}
//
Future<ExpireCardEntity> expireCardList(String pageNo, String pageSize) async {
Future<ExpireCardEntity> expireCardList(
String pageNo, String pageSize) async {
final res = await apiProvider.expireCardList(pageNo, pageSize);
return ExpireCardEntity.fromJson(res.body);
}
//
Future<ExpireFingerprintEntity> expireFingerprintList(String pageNo, String pageSize) async {
Future<ExpireFingerprintEntity> expireFingerprintList(
String pageNo, String pageSize) async {
final res = await apiProvider.expireFingerprintList(pageNo, pageSize);
return ExpireFingerprintEntity.fromJson(res.body);
}
@ -851,19 +859,17 @@ class ApiRepository {
//
Future<KeyDetailEntity> batchSendKey(
{
required String endDate,
required List keyGroupIdList,
required List lockIdList,
required String createUser,
required String isRemoteUnlock,
required String keyNameForAdmin,
required String receiverUsername,
required String startDate,
required String countryCode,
required String usernameType,
required List weekDays
}) async {
{required String endDate,
required List keyGroupIdList,
required List lockIdList,
required String createUser,
required String isRemoteUnlock,
required String keyNameForAdmin,
required String receiverUsername,
required String startDate,
required String countryCode,
required String usernameType,
required List weekDays}) async {
final res = await apiProvider.batchSendKey(
endDate,
keyGroupIdList,
@ -1467,8 +1473,8 @@ class ApiRepository {
}
// 退
Future<LoginEntity> userLogout() async {
final res = await apiProvider.userLogout();
Future<LoginEntity> userLogout({required String deviceld}) async {
final res = await apiProvider.userLogout(deviceld);
return LoginEntity.fromJson(res.body);
}
@ -1693,7 +1699,7 @@ class ApiRepository {
//
Future<VersionUndateEntity> updateCatEyeModeConfig(
{required int lockId, required Map catEyeConfig}) async {
{required int lockId, required List catEyeConfig}) async {
final res = await apiProvider.updateCatEyeModeConfig(lockId, catEyeConfig);
return VersionUndateEntity.fromJson(res.body);
}

View File

@ -3,6 +3,7 @@ import 'dart:typed_data';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/talk/udp/udp_manage.dart';
import 'package:star_lock/tools/storage.dart';
import '../../blue/io_tool/io_tool.dart';
import '../../tools/eventBusEventManage.dart';

View File

@ -20,6 +20,7 @@ const isAgreeCamera = "isAgreeCamera"; //是否同意获取相机/相册弹窗
const isShowUpdateVersion = "isShowUpdateVersion"; //
const saveLockAlias = "saveLockAlias"; //
const pushDeviceID = 'pushDeviceID'; //ID
const saveUserLoginData = "userLoginData";

View File

@ -43,6 +43,10 @@ class XSJPushProvider {
// Platform messages may fail, so we use a try/catch PlatformException.
jpush.getRegistrationID().then((rid) {
print("flutter get registration id : $rid");
Storage.setString(
pushDeviceID,
rid,
);
pushBindDeviceID(rid, Platform.isAndroid ? 10 : 20);
});
}