Merge branch 'release' of gitee.com:starlock-cn/app-starlock into release

This commit is contained in:
Daisy 2024-06-11 17:55:05 +08:00
commit b3f0794f84
19 changed files with 344 additions and 216 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -1,5 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.star_lock"> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/> xmlns:tools="http://schemas.android.com/tools"
package="com.example.star_lock">
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@ -46,8 +51,16 @@
<!-- 相册权限 34适配 --> <!-- 相册权限 34适配 -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" /> <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<!-- 移除 QUERY_ALL_PACKAGES 权限 -->
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:node="remove" />
<application android:usesCleartextTraffic="true" android:label="@string/app_name" android:name="android.app.Application" android:icon="@mipmap/ic_launcher"> <application
android:name="android.app.Application"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true">
<meta-data <meta-data
android:name="flutterEmbedding" android:name="flutterEmbedding"
android:value="2" /> android:value="2" />
@ -60,20 +73,24 @@
<meta-data <meta-data
android:name="com.huawei.hms.client.cpid" android:name="com.huawei.hms.client.cpid"
android:value="1406555529261648640" /> android:value="1406555529261648640" />
<meta-data android:name="OPPO_APPKEY" <meta-data
android:name="OPPO_APPKEY"
android:value="OP-47f668c9943248118502aa58d066393b" /> android:value="OP-47f668c9943248118502aa58d066393b" />
<meta-data android:name="OPPO_APPID" <meta-data
android:name="OPPO_APPID"
android:value="OP-31726001" /> android:value="OP-31726001" />
<meta-data android:name="OPPO_APPSECRET" <meta-data
android:name="OPPO_APPSECRET"
android:value="OP-05723986bba64183a71530b496922450" /> android:value="OP-05723986bba64183a71530b496922450" />
<!-- 配置定位Service --> <!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService" /> <service android:name="com.amap.api.location.APSService" />
<!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能--> <!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能-->
<service android:name="cn.jpush.android.service.PluginOppoPushService" <service
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE" android:name="cn.jpush.android.service.PluginOppoPushService"
android:exported="true"> android:exported="true"
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
<intent-filter> <intent-filter>
<action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" /> <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" />
</intent-filter> </intent-filter>
@ -82,8 +99,8 @@
<!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能--> <!-- since JPushv3.6.8 oppov2.1.0 oppo 核心功能-->
<service <service
android:name="com.heytap.msp.push.service.DataMessageCallbackService" android:name="com.heytap.msp.push.service.DataMessageCallbackService"
android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE" android:exported="true"
android:exported="true"> android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE">
<intent-filter> <intent-filter>
<action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" /> <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" />
@ -91,20 +108,33 @@
<action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE" /> <action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE" />
</intent-filter> </intent-filter>
</service> <!--兼容Q版本--> </service> <!--兼容Q版本-->
<activity android:name="com.skychip.lock.MainActivity" android:exported="true" android:screenOrientation="portrait" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <activity
android:name="com.skychip.lock.MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/LaunchTheme"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as <!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. --> to determine the Window background behind the Flutter UI. -->
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"/> <meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="skysmartlock" /> <data android:scheme="skysmartlock" />
</intent-filter> </intent-filter>

View File

@ -102,15 +102,14 @@ class StarLockLoginLogic extends BaseGetXController {
super.onClose(); super.onClose();
} }
@override //
void onReady() { void flushedDeviceInfo(){
super.onReady();
XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) { XSConstantMacro().getDeviceInfoData().then((Map<String, dynamic> data) {
state.deviceInfoMap.value = data; state.deviceInfoMap.value = data;
}).catchError((error) { }).catchError((dynamic error) {
// //
AppLog.log('获取设备信息时出错: $error'); AppLog.log('获取设备信息时出错: $error');
}); });
} }
} }

View File

@ -29,6 +29,7 @@ import '../../../tools/storage.dart';
import '../../../translations/trans_lib.dart'; import '../../../translations/trans_lib.dart';
import '../lockOperatingRecord/keyOperationRecord_entity.dart'; import '../lockOperatingRecord/keyOperationRecord_entity.dart';
import '../lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart'; import '../lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart';
import '../lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_entity.dart';
import 'lockDetail_state.dart'; import 'lockDetail_state.dart';
import 'lockNetToken_entity.dart'; import 'lockNetToken_entity.dart';
@ -195,7 +196,7 @@ class LockDetailLogic extends BaseGetXController {
case 0x00: case 0x00:
// //
final int dataLength = (reply.data[5] << 8) + reply.data[6]; final int dataLength = (reply.data[5] << 8) + reply.data[6];
// AppLog.log("dataLength:$dataLength"); AppLog.log('dataLength:$dataLength');
if (dataLength > 0) { if (dataLength > 0) {
reply.data.removeRange(0, 7); reply.data.removeRange(0, 7);
// 17 // 17
@ -203,17 +204,18 @@ class LockDetailLogic extends BaseGetXController {
return; return;
} }
final List<List<int>> getList = splitList(reply.data, 17); final List<List<int>> getList = splitList(reply.data, 17);
// AppLog.log("getList:$getList"); AppLog.log('getList:$getList');
final List uploadList = []; final List uploadList = [];
for (int i = 0; i < getList.length; i++) { for (int i = 0; i < getList.length; i++) {
final List<int> indexList = getList[i]; final List<int> indexList = getList[i];
// AppLog.log("indexList:$indexList"); AppLog.log('indexList:$indexList');
final Map indexMap = {}; final Map indexMap = {};
indexMap['type'] = indexList[0].toString(); indexMap['type'] = indexList[0].toString();
int operateDate = 0; int operateDate = 0;
if (indexList[0] == 2) { if (indexList[0] == 2) {
final List<int> passwordData = reply.data.sublist(7, 17); final List<int> passwordData = indexList.sublist(7, 17);
final String password = utf8String(passwordData); final String password = utf8String(passwordData);
AppLog.log('passwordData:$passwordData password:$password');
indexMap['user'] = password.toString(); indexMap['user'] = password.toString();
} else { } else {
final int userNo = (indexList[1] * 256) + indexList[2]; final int userNo = (indexList[1] * 256) + indexList[2];
@ -222,10 +224,10 @@ class LockDetailLogic extends BaseGetXController {
indexMap['success'] = '1'; indexMap['success'] = '1';
final int time = ((0xff & indexList[(3)]) << 24 | final int time = (0xff & indexList[3]) << 24 |
(0xff & indexList[4]) << 16 | (0xff & indexList[4]) << 16 |
(0xff & indexList[5]) << 8 | (0xff & indexList[5]) << 8 |
(0xFF & indexList[6])); (0xFF & indexList[6]);
operateDate = time * 1000; operateDate = time * 1000;
indexMap['date'] = '$operateDate'; indexMap['date'] = '$operateDate';
uploadList.add(indexMap); uploadList.add(indexMap);
@ -384,7 +386,7 @@ class LockDetailLogic extends BaseGetXController {
// //
Future<void> uploadElectricQuantityRequest() async { Future<void> uploadElectricQuantityRequest() async {
final KeyOperationRecordEntity entity = await ApiRepository.to final UploadElectricQuantityEntity entity = await ApiRepository.to
.uploadElectricQuantity( .uploadElectricQuantity(
electricQuantity: state.electricQuantity.value.toString(), electricQuantity: state.electricQuantity.value.toString(),
electricQuantityStandby: electricQuantityStandby:

View File

@ -23,7 +23,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
if (reply is SenderReferEventRecordTimeReply) { if (reply is SenderReferEventRecordTimeReply) {
_replyReferEventRecordTime(reply); _replyReferEventRecordTime(reply);
} }
@ -33,12 +33,12 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
Future<void> _replyReferEventRecordTime(Reply reply) async { Future<void> _replyReferEventRecordTime(Reply reply) async {
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
int status = reply.data[2]; final int status = reply.data[2];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
int dataLength = (reply.data[5] << 8) + reply.data[6]; final int dataLength = (reply.data[5] << 8) + reply.data[6];
AppLog.log("dataLength:$dataLength"); AppLog.log('dataLength:$dataLength');
// var dataLength = reply.data[5]; // var dataLength = reply.data[5];
if (dataLength > 0) { if (dataLength > 0) {
reply.data.removeRange(0, 7); reply.data.removeRange(0, 7);
@ -46,32 +46,32 @@ class LockOperatingRecordLogic extends BaseGetXController {
if(reply.data.length < 17){ if(reply.data.length < 17){
return; return;
} }
var getList = splitList(reply.data, 17); final List<List<int>> getList = splitList(reply.data, 17);
AppLog.log("getList:$getList"); AppLog.log('getList:$getList');
var uploadList = []; final List uploadList = [];
for (int i = 0; i < getList.length; i++) { for (int i = 0; i < getList.length; i++) {
var indexList = getList[i]; final List<int> indexList = getList[i];
AppLog.log("indexList:$indexList"); AppLog.log('indexList:$indexList');
var indexMap = {}; final Map indexMap = {};
indexMap["type"] = indexList[0].toString(); indexMap['type'] = indexList[0].toString();
if(indexList[0] == 2){ if(indexList[0] == 2){
var passwordData = indexList.sublist(7, 17); final List<int> passwordData = indexList.sublist(7, 17);
var password = utf8String(passwordData); final String password = utf8String(passwordData);
AppLog.log("password:$password passwordData:$passwordData"); AppLog.log('password:$password passwordData:$passwordData');
indexMap["user"] = password; indexMap['user'] = password;
}else{ }else{
int userNo = (indexList[1]*256) + indexList[2]; final int userNo = (indexList[1]*256) + indexList[2];
indexMap["user"] = userNo.toString(); indexMap['user'] = userNo.toString();
} }
indexMap["success"] = "1"; indexMap['success'] = '1';
int time = ((0xff & indexList[(3)]) << 24 | final int time = (0xff & indexList[3]) << 24 |
(0xff & indexList[4]) << 16 | (0xff & indexList[4]) << 16 |
(0xff & indexList[5]) << 8 | (0xff & indexList[5]) << 8 |
(0xFF & indexList[6])); (0xFF & indexList[6]);
indexMap["date"] = "${time * 1000}"; indexMap['date'] = '${time * 1000}';
uploadList.add(indexMap); uploadList.add(indexMap);
} }
lockRecordUploadData(uploadList); lockRecordUploadData(uploadList);
@ -99,14 +99,14 @@ class LockOperatingRecordLogic extends BaseGetXController {
}); });
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async {
if (connectionStateState == BluetoothConnectionState.connected) { if (connectionStateState == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey); final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
var publicKey = await Storage.getStringList(saveBluePublicKey); final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> getPublicKeyList = changeStringListToIntList(publicKey!); final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
IoSenderManage.senderReferEventRecordTimeCommand( IoSenderManage.senderReferEventRecordTimeCommand(
keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
@ -131,7 +131,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
Future<KeyOperationRecordEntity> mockNetworkDataRequest() async { Future<KeyOperationRecordEntity> mockNetworkDataRequest() async {
KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordList( final KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordList(
lockId:CommonDataManage().currentKeyInfo.lockId.toString(), lockId:CommonDataManage().currentKeyInfo.lockId.toString(),
pageNo:pageNo.toString(), pageNo:pageNo.toString(),
recordType:'', recordType:'',
@ -161,7 +161,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
void getLockRecordLastUploadDataTime() async { void getLockRecordLastUploadDataTime() async {
LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to final LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to
.getLockRecordLastUploadDataTime( .getLockRecordLastUploadDataTime(
lockId: CommonDataManage().currentKeyInfo.lockId.toString()); lockId: CommonDataManage().currentKeyInfo.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
@ -172,7 +172,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
void lockRecordUploadData(List list) async { void lockRecordUploadData(List list) async {
KeyOperationRecordEntity entity = await ApiRepository.to final KeyOperationRecordEntity entity = await ApiRepository.to
.lockRecordUploadData(lockId: CommonDataManage().currentKeyInfo.lockId.toString(), records: list); .lockRecordUploadData(lockId: CommonDataManage().currentKeyInfo.lockId.toString(), records: list);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
if(state.ifHaveNext == true){ if(state.ifHaveNext == true){
@ -186,9 +186,9 @@ class LockOperatingRecordLogic extends BaseGetXController {
// //
void clearOperationRecordRequest() async { void clearOperationRecordRequest() async {
KeyOperationRecordEntity entity = await ApiRepository.to.clearOperationRecord(CommonDataManage().currentKeyInfo.lockId.toString()); final KeyOperationRecordEntity entity = await ApiRepository.to.clearOperationRecord(CommonDataManage().currentKeyInfo.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("清除数据成功", something: (){ showToast('清除数据成功', something: (){
pageNo = 1; pageNo = 1;
mockNetworkDataRequest(); mockNetworkDataRequest();
}); });
@ -201,7 +201,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
super.onReady(); super.onReady();
// //
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
// _initReplySubscription(); // _initReplySubscription();
@ -215,7 +215,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
super.onInit(); super.onInit();
// //
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
getLockRecordLastUploadDataTime(); getLockRecordLastUploadDataTime();
// senderReferEventRecordTime(); // senderReferEventRecordTime();
@ -230,7 +230,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
super.onClose(); super.onClose();
// //
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
_replySubscription.cancel(); _replySubscription.cancel();
// _getDoorLockLogListRefreshUIEvent?.cancel(); // _getDoorLockLogListRefreshUIEvent?.cancel();

View File

@ -0,0 +1,43 @@
class UploadElectricQuantityEntity {
UploadElectricQuantityEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
UploadElectricQuantityEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
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;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
Data({this.electricQuantityDate});
Data.fromJson(Map<String, dynamic> json) {
electricQuantityDate = json['electricQuantityDate'];
}
int? electricQuantityDate;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['electricQuantityDate'] = electricQuantityDate;
return data;
}
}

View File

@ -1,10 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockTime/getServerDatetime_entity.dart';
import '../../../../../app_settings/app_settings.dart';
import '../../../../../blue/blue_manage.dart'; import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_getStarLockStatusInfo.dart'; import '../../../../../blue/io_protocol/io_getStarLockStatusInfo.dart';
import '../../../../../blue/io_reply.dart'; import '../../../../../blue/io_reply.dart';
@ -13,10 +12,10 @@ import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart'; import '../../../../../blue/sender_manage.dart';
import '../../../../../network/api_repository.dart'; import '../../../../../network/api_repository.dart';
import '../../../../../tools/baseGetXController.dart'; import '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/dateTool.dart';
import '../../../../../tools/eventBusEventManage.dart'; import '../../../../../tools/eventBusEventManage.dart';
import '../../../../../tools/storage.dart'; import '../../../../../tools/storage.dart';
import '../../../lockOperatingRecord/keyOperationRecord_entity.dart';
import 'uploadElectricQuantity_entity.dart';
import 'uploadElectricQuantity_state.dart'; import 'uploadElectricQuantity_state.dart';
class UploadElectricQuantityLogic extends BaseGetXController { class UploadElectricQuantityLogic extends BaseGetXController {
@ -25,13 +24,16 @@ class UploadElectricQuantityLogic extends BaseGetXController {
// //
Future<void> uploadElectricQuantityRequest( Future<void> uploadElectricQuantityRequest(
String electricQuantity, String electricQuantityStandby) async { String electricQuantity, String electricQuantityStandby) async {
final KeyOperationRecordEntity entity = await ApiRepository.to final UploadElectricQuantityEntity entity = await ApiRepository.to
.uploadElectricQuantity( .uploadElectricQuantity(
electricQuantity: electricQuantity, electricQuantity: electricQuantity,
electricQuantityStandby: electricQuantityStandby, electricQuantityStandby: electricQuantityStandby,
lockId: state.lockSetInfoData.value.lockId.toString(), lockId: state.lockSetInfoData.value.lockId.toString(),
isUnShowLoading: false); isUnShowLoading: false);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.uploadElectricQuantityDate.value = entity.data!.electricQuantityDate!;
state.lockSetInfoData.value.lockBasicInfo!.electricQuantityDate = state.uploadElectricQuantityDate.value;
showToast('锁电量更新成功'.tr, something: () { showToast('锁电量更新成功'.tr, something: () {
eventBus eventBus
.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); .fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value));
@ -64,8 +66,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: state.serverTime, utcTimeStamp: 0,
unixTimeStamp: getLocalTime(), unixTimeStamp: 0,
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -114,10 +116,6 @@ class UploadElectricQuantityLogic extends BaseGetXController {
state.lockSetInfoData.value.lockBasicInfo!.electricQuantityStandby = state.lockSetInfoData.value.lockBasicInfo!.electricQuantityStandby =
battRemCapStandby; battRemCapStandby;
state.uploadElectricQuantityDate.value =
DateTime.now().millisecondsSinceEpoch;
state.lockSetInfoData.value.lockBasicInfo!.electricQuantityDate =
DateTime.now().millisecondsSinceEpoch;
uploadElectricQuantityRequest( uploadElectricQuantityRequest(
battRemCap.toString(), battRemCapStandby.toString()); battRemCap.toString(), battRemCapStandby.toString());
break; break;
@ -130,8 +128,8 @@ class UploadElectricQuantityLogic extends BaseGetXController {
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: state.serverTime, utcTimeStamp: 0,
unixTimeStamp: getLocalTime(), unixTimeStamp: 0,
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -143,21 +141,21 @@ class UploadElectricQuantityLogic extends BaseGetXController {
} }
} }
// // //
Future<void> getServerDatetime() async { // Future<void> getServerDatetime() async {
final GetServerDatetimeEntity entity = await ApiRepository.to.getServerDatetimeData(isUnShowLoading:false); // final GetServerDatetimeEntity entity = await ApiRepository.to.getServerDatetimeData(isUnShowLoading:false);
if (entity.errorCode!.codeIsSuccessful) { // if (entity.errorCode!.codeIsSuccessful) {
state.serverTime = entity.data!.date! ~/ 1000; // state.serverTime = entity.data!.date! ~/ 1000;
getStarLockStatus(); // getStarLockStatus();
} // }
} // }
//
int getLocalTime(){ // int getLocalTime(){
final DateTime now = DateTime.now(); // final DateTime now = DateTime.now();
final Duration timeZoneOffset = now.timeZoneOffset; // final Duration timeZoneOffset = now.timeZoneOffset;
AppLog.log('timeZoneOffset.inSeconds:$timeZoneOffset.inSeconds'); // AppLog.log('timeZoneOffset.inSeconds:$timeZoneOffset.inSeconds');
return state.serverTime + timeZoneOffset.inSeconds; // return state.serverTime + timeZoneOffset.inSeconds;
} // }
@override @override
void onReady() { void onReady() {

View File

@ -94,7 +94,7 @@ class _UploadElectricQuantityPageState extends State<UploadElectricQuantityPage>
// margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w), // margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w),
padding: EdgeInsets.only(top: 20.w, bottom: 20.w), padding: EdgeInsets.only(top: 20.w, bottom: 20.w),
onClick: () { onClick: () {
logic.getServerDatetime(); logic.getStarLockStatus();
}), }),
], ],
), ),

View File

@ -23,5 +23,5 @@ class UploadElectricQuantityState {// 0普通状态可用 1不可用
RxBool ifCurrentScreen = true.obs; // , RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs; RxInt sureBtnState = 0.obs;
int serverTime = 0;// UTC+0 // int serverTime = 0;// UTC+0
} }

View File

@ -64,8 +64,8 @@ class LockTimeLogic extends BaseGetXController{
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: 0, utcTimeStamp: state.serverTime,
unixTimeStamp: 0, unixTimeStamp: getLocalTime(),
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -82,7 +82,7 @@ class LockTimeLogic extends BaseGetXController{
switch(status){ switch(status){
case 0x00: case 0x00:
// //
final String dataEime = DateTool().dateToYMDHNString('${state.differentialTime}'); final String dataEime = DateTool().dateToYMDHNString('${state.serverTime}');
state.dateTime.value = dataEime; state.dateTime.value = dataEime;
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
@ -92,6 +92,24 @@ class LockTimeLogic extends BaseGetXController{
break; break;
case 0x06: case 0x06:
// //
// 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!);
//
// final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
// final List<int> getSignKeyList = changeStringListToIntList(signKey!);
//
// IoSenderManage.senderTimingCommand(
// lockID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// nowTime: state.serverTime,
// token:getTokenList,
// needAuthor:1,
// signKey:getSignKeyList,
// privateKey:getPrivateKeyList,
// );
break; break;
default: default:
break; break;
@ -124,7 +142,7 @@ class LockTimeLogic extends BaseGetXController{
IoSenderManage.senderTimingCommand( IoSenderManage.senderTimingCommand(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUid(), userID:await Storage.getUid(),
nowTime: state.differentialTime, nowTime: state.serverTime,
token:getTokenList, token:getTokenList,
needAuthor:1, needAuthor:1,
signKey:getSignKeyList, signKey:getSignKeyList,
@ -156,8 +174,8 @@ class LockTimeLogic extends BaseGetXController{
IoSenderManage.senderGetStarLockStatuInfo( IoSenderManage.senderGetStarLockStatuInfo(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: await Storage.getUid(),
utcTimeStamp: 0, utcTimeStamp: state.serverTime,
unixTimeStamp: 0, unixTimeStamp: getLocalTime(),
isBeforeAddUser: false, isBeforeAddUser: false,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
@ -182,14 +200,25 @@ class LockTimeLogic extends BaseGetXController{
} }
// //
Future<void> getServerDatetime() async{ Future<void> getServerDatetime(bool isSendTime) async{
final GetServerDatetimeEntity entity = await ApiRepository.to.getServerDatetimeData(isUnShowLoading:false); final GetServerDatetimeEntity entity = await ApiRepository.to.getServerDatetimeData(isUnShowLoading:false);
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
state.differentialTime = entity.data!.date! ~/ 1000; state.serverTime = entity.data!.date! ~/ 1000;
// AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}"); // AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}");
if(isSendTime == false){
getStarLockStatus();
}else{
sendTiming(); sendTiming();
} }
} }
}
int getLocalTime(){
final DateTime now = DateTime.now();
final Duration timeZoneOffset = now.timeZoneOffset;
AppLog.log('timeZoneOffset.inSeconds:$timeZoneOffset.inSeconds');
return state.serverTime + timeZoneOffset.inSeconds;
}
@override @override
void onReady() { void onReady() {
@ -199,7 +228,8 @@ class LockTimeLogic extends BaseGetXController{
// getLockTimeFromGateway(); // getLockTimeFromGateway();
getStarLockStatus(); getServerDatetime(false);
} }
@override @override

View File

@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockTime/lockTime_state.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../tools/appRouteObserver.dart'; import '../../../../tools/appRouteObserver.dart';
import '../../../../tools/submitBtn.dart'; import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart'; import '../../../../tools/titleAppBar.dart';
@ -19,8 +19,8 @@ class LockTimePage extends StatefulWidget {
} }
class _LockTimePageState extends State<LockTimePage> with RouteAware{ class _LockTimePageState extends State<LockTimePage> with RouteAware{
final logic = Get.put(LockTimeLogic()); final LockTimeLogic logic = Get.put(LockTimeLogic());
final state = Get.find<LockTimeLogic>().state; final LockTimeState state = Get.find<LockTimeLogic>().state;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -33,13 +33,13 @@ class _LockTimePageState extends State<LockTimePage> with RouteAware{
body: Container( body: Container(
padding: EdgeInsets.all(30.w), padding: EdgeInsets.all(30.w),
child: Column( child: Column(
children: [ children: <Widget>[
SizedBox( SizedBox(
height: 50.h, height: 50.h,
), ),
Obx(() => Row( Obx(() => Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: <Widget>[
Text(state.dateTime.value, Text(state.dateTime.value,
style: TextStyle( style: TextStyle(
fontSize: 26.sp, color: AppColors.blackColor)), fontSize: 26.sp, color: AppColors.blackColor)),
@ -56,7 +56,7 @@ class _LockTimePageState extends State<LockTimePage> with RouteAware{
padding: EdgeInsets.only(top: 20.w, bottom: 20.w), padding: EdgeInsets.only(top: 20.w, bottom: 20.w),
onClick: () { onClick: () {
// logic.sendTiming(); // logic.sendTiming();
logic.getServerDatetime(); logic.getServerDatetime(true);
// logic.sendTiming(); // logic.sendTiming();
}), }),
SizedBox( SizedBox(

View File

@ -10,7 +10,6 @@ class LockTimeState{// 0普通状态(可用) 1连接中(不可用)
} }
Rx<LockSetInfoData> lockSetInfoData = LockSetInfoData().obs; Rx<LockSetInfoData> lockSetInfoData = LockSetInfoData().obs;
RxString dateTime = ''.obs; RxString dateTime = ''.obs;
int differentialTime = 0;
RxBool ifCurrentScreen = true.obs; // , RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs; RxInt sureBtnState = 0.obs;

View File

@ -73,6 +73,8 @@ class UploadDataLogic extends BaseGetXController{
state.uploadPasswordDataList.addAll(reply.data.sublist(9, reply.data.length)); state.uploadPasswordDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){ if(dataLength == 10){
// 10 // 10
state.uploadPasswordPage = state.uploadPasswordPage + 1;
final List<int> token = reply.data.sublist(3, 7); final List<int> token = reply.data.sublist(3, 7);
updataLockPasswordList(token, state.uploadPasswordPage); updataLockPasswordList(token, state.uploadPasswordPage);
}else{ }else{
@ -119,6 +121,8 @@ class UploadDataLogic extends BaseGetXController{
state.uploadCardDataList.addAll(reply.data.sublist(9, reply.data.length)); state.uploadCardDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){ if(dataLength == 10){
// 10 // 10
state.uploadCardPage = state.uploadCardPage + 1;
final List<int> token = reply.data.sublist(3, 7); final List<int> token = reply.data.sublist(3, 7);
updataLockCardList(token, state.uploadCardPage); updataLockCardList(token, state.uploadCardPage);
}else{ }else{
@ -163,6 +167,8 @@ class UploadDataLogic extends BaseGetXController{
state.uploadFingerprintDataList.addAll(reply.data.sublist(9, reply.data.length)); state.uploadFingerprintDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){ if(dataLength == 10){
// 10 // 10
state.uploadFingerprintPage = state.uploadFingerprintPage + 1;
final List<int> token = reply.data.sublist(3, 7); final List<int> token = reply.data.sublist(3, 7);
updataLockFingerprintList(token, state.uploadFingerprintPage); updataLockFingerprintList(token, state.uploadFingerprintPage);
}else{ }else{
@ -207,6 +213,8 @@ class UploadDataLogic extends BaseGetXController{
state.uploadFaceDataList.addAll(reply.data.sublist(9, reply.data.length)); state.uploadFaceDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){ if(dataLength == 10){
// 10 // 10
state.uploadFacePage = state.uploadFacePage + 1;
final List<int> token = reply.data.sublist(3, 7); final List<int> token = reply.data.sublist(3, 7);
updataLockFaceList(token, state.uploadFacePage); updataLockFaceList(token, state.uploadFacePage);
}else{ }else{
@ -251,6 +259,8 @@ class UploadDataLogic extends BaseGetXController{
state.uploadPalmVeinDataList.addAll(reply.data.sublist(9, reply.data.length)); state.uploadPalmVeinDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){ if(dataLength == 10){
// 10 // 10
state.uploadPalmVeinPage = state.uploadPalmVeinPage + 1;
final List<int> token = reply.data.sublist(3, 7); final List<int> token = reply.data.sublist(3, 7);
updataLockPalmVeinList(token, state.uploadPalmVeinPage); updataLockPalmVeinList(token, state.uploadPalmVeinPage);
}else{ }else{

View File

@ -93,8 +93,7 @@ class _PasswordKeyPerpetualPageState extends State<PasswordKeyPerpetualPage>
TranslationLoader.lanKeys!.pleaseNameYourPassword!.tr, TranslationLoader.lanKeys!.pleaseNameYourPassword!.tr,
state.nameController), state.nameController),
keyBottomWidget( keyBottomWidget(
'密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。' '密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。'.tr)
.tr)
], ],
), ),
); );

View File

@ -52,6 +52,14 @@ class LockMainLogic extends BaseGetXController {
if (Get.isRegistered<LockListLogic>()) { if (Get.isRegistered<LockListLogic>()) {
// //
Get.find<LockListLogic>().setLockListInfoGroupEntity(entity); Get.find<LockListLogic>().setLockListInfoGroupEntity(entity);
} else {
//
Future<dynamic>.delayed(200.milliseconds, () {
if (Get.isRegistered<LockListLogic>()) {
//
Get.find<LockListLogic>().setLockListInfoGroupEntity(entity);
}
});
} }
} }

View File

@ -54,9 +54,7 @@ class _StarLockMainPageState extends State<StarLockMainPage>
if (clearScanDevices) { if (clearScanDevices) {
BlueManage().scanDevices.clear(); BlueManage().scanDevices.clear();
} }
WidgetsBinding.instance.addPostFrameCallback((_) async {
setState(() {}); setState(() {});
});
} }
@override @override

View File

@ -60,6 +60,7 @@ import '../main/lockDetail/checkingIn/checkingInStaff/checkingInSetStaffList/che
import '../main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart'; import '../main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart';
import '../main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart'; import '../main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
import '../main/lockDetail/lockOperatingRecord/keyOperationRecord_entity.dart'; import '../main/lockDetail/lockOperatingRecord/keyOperationRecord_entity.dart';
import '../main/lockDetail/lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_entity.dart';
import '../main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart'; import '../main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart';
import '../main/lockDetail/lockSet/lockSet/checkingInInfoData_entity.dart'; import '../main/lockDetail/lockSet/lockSet/checkingInInfoData_entity.dart';
import '../main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart'; import '../main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart';
@ -341,14 +342,14 @@ class ApiRepository {
} }
// //
Future<KeyOperationRecordEntity> uploadElectricQuantity( Future<UploadElectricQuantityEntity> uploadElectricQuantity(
{required String? electricQuantity, {required String? electricQuantity,
required String? electricQuantityStandby, required String? electricQuantityStandby,
required String? lockId, required String? lockId,
required bool? isUnShowLoading}) async { required bool? isUnShowLoading}) async {
final res = await apiProvider.uploadElectricQuantity( final res = await apiProvider.uploadElectricQuantity(
electricQuantity!, electricQuantityStandby!, lockId!, isUnShowLoading!); electricQuantity!, electricQuantityStandby!, lockId!, isUnShowLoading!);
return KeyOperationRecordEntity.fromJson(res.body); return UploadElectricQuantityEntity.fromJson(res.body);
} }
// //

View File

@ -10,6 +10,7 @@ import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/login/login/starLock_login_logic.dart';
import 'package:star_lock/main.dart'; import 'package:star_lock/main.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/customer_tool.dart';
@ -30,6 +31,9 @@ class AppFirstEnterHandle {
} }
getAppInfo(); getAppInfo();
await privacySDKInitialization(); await privacySDKInitialization();
if (Get.isRegistered<StarLockLoginLogic>()) {
Get.find<StarLockLoginLogic>().flushedDeviceInfo();
}
break; break;
case isAgreePosition: // case isAgreePosition: //
if (getFlag != isAgreePosition) { if (getFlag != isAgreePosition) {
@ -87,7 +91,8 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL, "url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr "title": '用户协议'.tr
}); });
@ -101,7 +106,8 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL, "url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr "title": '隐私政策'.tr
}); });
@ -154,7 +160,8 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL, "url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr "title": '用户协议'.tr
}); });
@ -169,7 +176,8 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{ Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL, "url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr "title": '隐私政策'.tr
}); });

View File

@ -67,8 +67,11 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.57+2024060702xhj 线上环境,对外发布,提交测试 # 1.0.57+2024060702xhj 线上环境,对外发布,提交测试
# 1.0.58+2024060702xhj 线上环境,对外发布,提交测试 # 1.0.58+2024060702xhj 线上环境,对外发布,提交测试
# 1.0.59+2024060703xhj 线上环境,对外发布,提交测试 # 1.0.59+2024060703xhj 线上环境,对外发布,提交测试
# 1.0.60+2024061101xhj 线上环境,对外发布,提交测试
# 1.0.60+2024061102xhj 线上环境,对外发布,提交测试
# 1.0.61+2024061103xhj 线上环境,对外发布,提交测试:处理华为拒审
version: 1.0.59+2024060703 version: 1.0.61+2024061103
environment: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'