Merge branch 'bugly' into build-addGateway-20240814

# Conflicts:
#	android/app/src/main/AndroidManifest.xml
#	lib/login/login/starLock_login_logic.dart
#	lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
#	lib/main/lockDetail/doorLockLog/doorLockLog_page.dart
#	lib/main/lockDetail/lockDetail/lockDetail_logic.dart
#	lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_logic.dart
#	lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart
#	lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart
#	lib/mine/mineSet/mineSet/mineSet_logic.dart
#	lib/tools/advancedCalendar/src/widget.dart
#	pubspec.yaml
This commit is contained in:
魏少阳 2024-12-04 14:25:23 +08:00
commit 202c97e0d3
33 changed files with 1115 additions and 417 deletions

View File

@ -290,4 +290,8 @@ dependencies {
// implementation(name: 'HiPushSDK-7.0.61.303', ext: 'aar')
// VIVO
implementation 'cn.jiguang.sdk.plugin:vivo:5.2.3'
// Umeng统计
implementation 'com.umeng.umsdk:common:9.3.7'
implementation 'com.umeng.umsdk:asms:1.4.1'
}

View File

@ -131,4 +131,9 @@
-keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep public class com.tencent.bugly.**{*;}
-keep class com.umeng.** { *; }
-keep class com.umeng.**$* { *; }
-keep class com.umeng.message.** { *; }
-keep class com.umeng.message.**$* { *; }

View File

@ -131,4 +131,9 @@
-keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep public class com.tencent.bugly.**{*;}
-keep class com.umeng.** { *; }
-keep class com.umeng.**$* { *; }
-keep class com.umeng.message.** { *; }
-keep class com.umeng.message.**$* { *; }

View File

@ -128,4 +128,9 @@
}
-keep class com.tencent.mm.sdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-keep class com.umeng.** { *; }
-keep class com.umeng.**$* { *; }
-keep class com.umeng.message.** { *; }
-keep class com.umeng.message.**$* { *; }

View File

@ -56,6 +56,14 @@
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:node="remove" />
<uses-permission android:name="com.hihonor.permission.sec.SDK_LAUNCHER" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:name="android.app.Application"
android:icon="@mipmap/ic_launcher"
@ -171,6 +179,18 @@
</intent-filter>
</activity>
<meta-data
android:name="BUGLY_ENABLE_DEBUG"
android:value="true" />
<!-- 添加 Umeng SDK 的服务 -->
<service android:name="com.umeng.message.UmengIntentService" android:exported="false"/>
<receiver android:name="com.umeng.message.NotificationProxyBroadcastReceiver" android:exported="true" android:permission="android.permission.BROADCAST_PACKAGE_REMOVED">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<umeng_config>
<appkey>671244cf80464b33f6df9648</appkey>
<channel>Product</channel>
</umeng_config>

View File

@ -12,10 +12,16 @@ import android.bluetooth.BluetoothAdapter;
import androidx.core.content.FileProvider
import java.io.File
import com.umeng.commonsdk.UMConfigure
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(flutterEngine!!)
// 初始化 Umeng SDK
UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null)
MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result ->
if (call.method == "loadNativeShare") {
val map = call.arguments as Map<String, String>

View File

@ -30,6 +30,9 @@ flutter_ios_podfile_setup
target 'Runner' do
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
pod 'UMCommon'
pod 'UMDevice'
end
# Plugin Pods

View File

@ -148,6 +148,13 @@ PODS:
- system_settings (0.0.1):
- Flutter
- Toast (4.1.1)
- UMCommon (7.4.7):
- UMDevice
- UMDevice (3.4.0)
- umeng_common_sdk (0.0.1):
- Flutter
- UMCommon
- UMDevice
- url_launcher_ios (0.0.1):
- Flutter
- video_player_avfoundation (0.0.1):
@ -194,6 +201,9 @@ DEPENDENCIES:
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
- system_settings (from `.symlinks/plugins/system_settings/ios`)
- UMCommon
- UMDevice
- umeng_common_sdk (from `.symlinks/plugins/umeng_common_sdk/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
@ -221,6 +231,8 @@ SPEC REPOS:
- SDWebImage
- SwiftyGif
- Toast
- UMCommon
- UMDevice
- WechatOpenSDK-XCFramework
EXTERNAL SOURCES:
@ -292,6 +304,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/sqflite/darwin"
system_settings:
:path: ".symlinks/plugins/system_settings/ios"
umeng_common_sdk:
:path: ".symlinks/plugins/umeng_common_sdk/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
video_player_avfoundation:
@ -354,11 +368,14 @@ SPEC CHECKSUMS:
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
system_settings: 8f5cdbfa72c677fc8d665b863bcc20d393d87e9d
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7
UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82
umeng_common_sdk: a8abd7f86dfd013dbbeeae587ee143760c6582f2
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
PODFILE CHECKSUM: 317f9473a5705c6fe4d79d95e81676f248048fdc
PODFILE CHECKSUM: a4d4747e9f246a7c5b9d643d5efa33799112963a
COCOAPODS: 1.14.3

View File

@ -5,7 +5,7 @@
#import "XSFlutterManager.h"
#import <UserNotifications/UserNotifications.h>
#import <UMCommon/UMCommon.h>
@interface AppDelegate()
@ -19,6 +19,8 @@
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UMConfigure initWithAppkey:@"671244ae80464b33f6df9646" channel:@"Product"];
XSFlutterManager *VC = [[XSFlutterManager alloc] init];
self.window.rootViewController = VC;
[self.window makeKeyAndVisible];

View File

@ -73,6 +73,7 @@ class BlueManage {
List<int> lastTimeData = <int>[];
int? dataLen;
Timer? scanSingleTimer;
bool needScanSingle = false;
static BlueManage? _manager;
@ -141,7 +142,8 @@ class BlueManage {
}
///
Future<void> startScanSingle(String deviceName, int timeout, ScanDevicesCallBack scanDevicesCallBack) async {
Future<void> startScanSingle(String deviceName, int timeout,
ScanDevicesCallBack scanDevicesCallBack) async {
final DateTime start = DateTime.now();
FlutterBluePlus.isSupported.then((bool isAvailable) async {
if (isAvailable) {
@ -151,8 +153,7 @@ class BlueManage {
BuglyTool.uploadException(
message: '开始指定设备名称的扫描蓝牙设备',
detail: '调用方法是:startScanSingle 指定设备名称是:$deviceName',
upload: false
);
upload: false);
//android 3
final int divisor = Platform.isAndroid ? 3 : 1;
FlutterBluePlus.startScan(
@ -172,9 +173,9 @@ class BlueManage {
'扫描到的设备数:${results.length} 是否查找到 $isExit 以查找$milliseconds毫秒');
BuglyTool.uploadException(
message: '指定设备名称的扫描蓝牙设备 监听扫描结果',
detail: 'startScanSingle$deviceName 监听扫描结果 是否查找到 $isExit 以查找$milliseconds毫秒 扫描到的设备数:${results.length} results:$results',
upload: false
);
detail:
'startScanSingle$deviceName 监听扫描结果 是否查找到 $isExit 以查找$milliseconds毫秒 扫描到的设备数:${results.length} results:$results',
upload: false);
if (isExit) {
for (final ScanResult scanResult in results) {
if (((scanResult.advertisementData.serviceUuids.isNotEmpty
@ -198,21 +199,22 @@ class BlueManage {
}
BuglyTool.uploadException(
message: '遍历扫描到的结果跟缓存的结果对比,如果有最新的就更新缓存',
detail: 'startScanSingle deviceName:$deviceName 查询到的结果scanResult:$scanResult',
upload: false
);
detail:
'startScanSingle deviceName:$deviceName 查询到的结果scanResult:$scanResult',
upload: false);
}
}
completer.complete();
}
}, onError: (e) {
BuglyTool.uploadException(
message: '指定设备名称的扫描蓝牙设备 监听扫描结果失败',
detail: '打印失败问题 e${e.toString()}',
upload: false
);
AppLog.log('扫描失败:$e',);
BuglyTool.uploadException(
message: '指定设备名称的扫描蓝牙设备 监听扫描结果失败',
detail: '打印失败问题 e${e.toString()}',
upload: false);
AppLog.log(
'扫描失败:$e',
);
});
FlutterBluePlus.cancelWhenScanComplete(subscription);
await completer.future;
@ -222,8 +224,7 @@ class BlueManage {
BuglyTool.uploadException(
message: '指定设备名称的扫描蓝牙设备 内部逻辑整形失败',
detail: 'tartScanSingle内部逻辑整形失败 e:${e.toString()}',
upload: false
);
upload: false);
AppLog.log('扫描失败');
}
} else {
@ -311,26 +312,26 @@ class BlueManage {
if (bluetoothConnectionState != BluetoothConnectionState.connected) {
BuglyTool.uploadException(
message: '点击按钮 蓝牙未连接 下一步扫描连接蓝牙',
detail: 'blueSendData 蓝牙连接状态 bluetoothConnectionState$bluetoothConnectionState deviceName:$deviceName',
upload: false
);
detail:
'blueSendData 蓝牙连接状态 bluetoothConnectionState$bluetoothConnectionState deviceName:$deviceName',
upload: false);
_connect(deviceName, (BluetoothConnectionState state) {
stateCallBack(bluetoothConnectionState!);
}, isAddEquipment: isAddEquipment);
} else {
BuglyTool.uploadException(
message: '点击按钮 蓝牙已经连接 下一步扫描连接蓝牙',
detail: 'blueSendData 直接回调状态 蓝牙连接状态bluetoothConnectionState$bluetoothConnectionState deviceName:$deviceName',
upload: false
);
detail:
'blueSendData 直接回调状态 蓝牙连接状态bluetoothConnectionState$bluetoothConnectionState deviceName:$deviceName',
upload: false);
stateCallBack(bluetoothConnectionState!);
}
} else {
BuglyTool.uploadException(
message: '点击按钮 蓝牙未打开',
detail: 'blueSendData 蓝牙未打开--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
upload: false
);
detail:
'blueSendData 蓝牙未打开--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
upload: false);
try {
stateCallBack(BluetoothConnectionState.disconnected);
openBlue();
@ -338,17 +339,16 @@ class BlueManage {
AppLog.log('蓝牙打开失败');
BuglyTool.uploadException(
message: '点击按钮 蓝牙未打开 然后蓝牙打开失败',
detail: 'blueSendData 蓝牙打开失败--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
upload: false
);
detail:
'blueSendData 蓝牙打开失败--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
upload: false);
}
}
} else {
BuglyTool.uploadException(
message: '点击按钮 蓝牙状态不可用',
detail: 'blueSendData 蓝牙状态不可用--isAvailable:$isAvailable',
upload: false
);
upload: false);
stateCallBack(BluetoothConnectionState.disconnected);
AppLog.log('开始扫描 蓝牙不可用,不能进行蓝牙操作');
}
@ -365,38 +365,74 @@ class BlueManage {
// true是有缓存设备
final bool isExistDevice = isExistScanDevices(connectDeviceName);
//
final bool isCurrentDevice = CommonDataManage().currentKeyInfo.lockName == deviceName;
final bool isCurrentDevice =
CommonDataManage().currentKeyInfo.lockName == deviceName;
// mac地址
final String? mac = CommonDataManage().currentKeyInfo.mac;
AppLog.log('开始连接 是否存在缓存:$isExistDevice 是否是当前设备:$isCurrentDevice mac$mac');
if (GetPlatform.isAndroid && !isExistDevice && isCurrentDevice && mac != null) {
if (GetPlatform.isAndroid &&
!isExistDevice &&
isCurrentDevice &&
mac != null) {
// mac地址不为空
BuglyTool.uploadException(
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是_connect',
detail: '调用方法_connect deviceName:$deviceName GetPlatform.isAndroid:${GetPlatform.isAndroid} isExistDevice:$isExistDevice mac:$mac',
upload: false
);
scanSingleTimer?.cancel();
detail:
'调用方法_connect deviceName:$deviceName GetPlatform.isAndroid:${GetPlatform.isAndroid} isExistDevice:$isExistDevice mac:$mac needScanSingle$needScanSingle',
upload: false);
// scanSingleTimer?.cancel();
// android
await doNotSearchBLE(mac, connectStateCallBack, isAddEquipment: isAddEquipment);
//
scanSingleTimer = Timer(3.seconds, () {
scanSingleTimer?.cancel();
try {
if (!needScanSingle) {
BuglyTool.uploadException(
message:
'开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是_connect',
detail: '调用方法doNotSearchBLE直接连接,needScanSingle$needScanSingle',
upload: false);
await doNotSearchBLE(mac, connectStateCallBack,
isAddEquipment: isAddEquipment);
} else {
BuglyTool.uploadException(
message:
'开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是_connect',
detail:
'调用方法startScanSingle执行扫描函数,needScanSingle$needScanSingle',
upload: false);
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
_connectDevice(scanDevices, deviceName, connectStateCallBack,
isAddEquipment: isAddEquipment);
});
}
} catch (e) {
BuglyTool.uploadException(
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 3秒以后调用startScanSingle 上传记录当前方法是_connect',
detail: '_connect deviceName:$deviceName scanSingleTimer调用startScanSingle',
upload: false
);
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) => null);
});
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是_connect',
detail: '调用方法doNotSearchBLE发生异常执行扫描函数 startScanSingle异常信息$e',
upload: false);
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
_connectDevice(scanDevices, deviceName, connectStateCallBack,
isAddEquipment: isAddEquipment);
});
}
//
// scanSingleTimer = Timer(3.seconds, () {
// scanSingleTimer?.cancel();
// BuglyTool.uploadException(
// message:
// '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 3秒以后调用startScanSingle 上传记录当前方法是_connect',
// detail:
// '_connect deviceName:$deviceName scanSingleTimer调用startScanSingle',
// upload: false);
// startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) => null);
// });ƒ
} else if (isAddEquipment == false && isExistDevice == false) {
// 使
BuglyTool.uploadException(
message: '取消缓存直接使用,存在配对场景设备信息会更变 然后开始指定设备名称的扫描蓝牙设备 上传记录当前方法是_connect',
detail: '符合条件(isAddEquipment == false && isExistDevice == false) 下一步调用startScanSingle',
upload: false
);
message:
'取消缓存直接使用,存在配对场景设备信息会更变 然后开始指定设备名称的扫描蓝牙设备 上传记录当前方法是_connect',
detail:
'符合条件(isAddEquipment == false && isExistDevice == false) 下一步调用startScanSingle',
upload: false);
// AppLog.log('无存在设备需要扫描 deviceName:$deviceName isAddEquipment:$isAddEquipment');
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
@ -406,9 +442,9 @@ class BlueManage {
} else {
BuglyTool.uploadException(
message: '没有扫描直接调用连接设备 上传记录当前方法是_connect',
detail: '走这个方法是有缓存或者添加设备的时候以及不符合(GetPlatform.isAndroid && !isExistDevice && isCurrentDevice && mac != null) deviceName:$deviceName 直接调用_connectDevice',
upload: false
);
detail:
'走这个方法是有缓存或者添加设备的时候以及不符合(GetPlatform.isAndroid && !isExistDevice && isCurrentDevice && mac != null) deviceName:$deviceName 直接调用_connectDevice',
upload: false);
// AppLog.log('安卓或者iOS 存在设备不需要扫描 deviceName:$deviceName isAddEquipment:$isAddEquipment');
_connectDevice(devicesList, deviceName, connectStateCallBack,
isAddEquipment: isAddEquipment);
@ -417,18 +453,19 @@ class BlueManage {
//
bool isExistScanDevices(String connectDeviceName) {
final bool isExistDevice = scanDevices.any((ScanResult element) => element.device.platformName == connectDeviceName || element.advertisementData.advName == connectDeviceName);
final bool isExistDevice = scanDevices.any((ScanResult element) =>
element.device.platformName == connectDeviceName ||
element.advertisementData.advName == connectDeviceName);
return isExistDevice;
}
Future<void> _connectDevice(
List<ScanResult> devicesList,
String deviceName,
ConnectStateCallBack connectStateCallBack,
{
bool isAddEquipment = false, //
bool isReconnect = true, //
}) async {
ConnectStateCallBack connectStateCallBack, {
bool isAddEquipment = false, //
bool isReconnect = true, //
}) async {
//
// AppLog.log("devicesList:$devicesList");
@ -453,25 +490,27 @@ class BlueManage {
}
if (scanResult == null || connectDeviceMacAddress.isEmpty) {
BuglyTool.uploadException(
message: '扫描结果scanResult == null || connectDeviceMacAddress.isEmpty不往下执行 return 上传记录当前方法是_connectDevice',
detail: 'scanResult:$scanResult connectDeviceMacAddress$connectDeviceMacAddress',
upload: false
);
message:
'扫描结果scanResult == null || connectDeviceMacAddress.isEmpty不往下执行 return 上传记录当前方法是_connectDevice',
detail:
'scanResult:$scanResult connectDeviceMacAddress$connectDeviceMacAddress',
upload: false);
return;
}
AppLog.log('调用了停止扫描的方法');
await stopScan();
if ((scanResult.advertisementData.serviceUuids[0].toString()[31] == '0') && isAddEquipment == false) {
if ((scanResult.advertisementData.serviceUuids[0].toString()[31] == '0') &&
isAddEquipment == false) {
//
if (isReconnect == true) {
AppLog.log('该锁已被重置, 重新发送扫描命令');
BuglyTool.uploadException(
message: '该锁已被重置, 重新发送扫描命令startScanSingle 上传记录当前方法是_connectDevice',
detail: '添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接 该锁已被重置, 重新发送扫描命令 serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
upload: false
);
detail:
'添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接 该锁已被重置, 重新发送扫描命令 serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
upload: false);
scanDevices.clear();
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
@ -485,18 +524,18 @@ class BlueManage {
BuglyTool.uploadException(
message: '提示该锁已被重置, 回调断开连接, 清除缓存上传记录当前方法是_connectDevice',
detail: 'isReconnect:$isReconnect serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
upload: false
);
detail:
'isReconnect:$isReconnect serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
upload: false);
}
return;
}
BuglyTool.uploadException(
message: '从devicesList里面查到了设备 下一步连接设备 上传记录当前方法是_connectDevice',
detail: 'devicesList:$devicesList scanResult:${scanResult.toString()} bluetoothConnectDevice${bluetoothConnectDevice.toString()} connectDeviceMacAddress$connectDeviceMacAddress',
upload: false
);
detail:
'devicesList:$devicesList scanResult:${scanResult.toString()} bluetoothConnectDevice${bluetoothConnectDevice.toString()} connectDeviceMacAddress$connectDeviceMacAddress',
upload: false);
//
await bluetoothDeviceConnect(bluetoothConnectDevice!, connectStateCallBack);
@ -516,14 +555,13 @@ class BlueManage {
BuglyTool.uploadException(
message: '直接给蓝牙设备写入 上传记录当前方法是doNotSearchBLE',
detail: '直接给蓝牙设备写入 通过fromId方法创建一个BluetoothDevice masAdds$masAdds',
upload: false
);
}else{
upload: false);
} else {
BuglyTool.uploadException(
message: '直接给蓝牙设备写入 上传记录当前方法是doNotSearchBLE',
detail: '直接给蓝牙设备写入 用传入的bluetoothConnectDevice${bluetoothConnectDevice.toString()}连接 masAdds:$masAdds',
upload: false
);
detail:
'直接给蓝牙设备写入 用传入的bluetoothConnectDevice${bluetoothConnectDevice.toString()}连接 masAdds:$masAdds',
upload: false);
}
//
await bluetoothDeviceConnect(bluetoothConnectDevice!, connectStateCallBack,
@ -554,54 +592,60 @@ class BlueManage {
AppLog.log('$maxAttempts次后尝试连接失败');
BuglyTool.uploadException(
message: '连接三次超时断开连接 回调断开连接 上传记录当前方法是bluetoothDeviceConnect',
detail: 'bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} $maxAttempts次后尝试连接失败',
upload: false
);
detail:
'bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} $maxAttempts次后尝试连接失败',
upload: false);
needScanSingle = true;
connectStateCallBack(BluetoothConnectionState.disconnected);
}
if (bluetoothConnectionState == BluetoothConnectionState.connected) {
try {
final List<BluetoothService> services = await bluetoothConnectDevice.discoverServices();
needScanSingle = false;
final List<BluetoothService> services =
await bluetoothConnectDevice.discoverServices();
//
for (final BluetoothService service in services) {
if (service.uuid == _serviceIdConnect) {
for (final BluetoothCharacteristic characteristic in service.characteristics) {
if (characteristic.characteristicUuid == _characteristicIdSubscription) {
for (final BluetoothCharacteristic characteristic
in service.characteristics) {
if (characteristic.characteristicUuid ==
_characteristicIdSubscription) {
_subScribeToCharacteristic(characteristic);
bluetoothConnectionState = BluetoothConnectionState.connected;
connectStateCallBack(bluetoothConnectionState!);
BuglyTool.uploadException(
message: '订阅成功 上传记录当前方法是bluetoothDeviceConnect',
detail: '发现服务,连接成功,订阅数据 bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} ',
upload: false
);
} else{
detail:
'发现服务,连接成功,订阅数据 bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} ',
upload: false);
} else {
BuglyTool.uploadException(
message: '订阅失败 上传记录当前方法是bluetoothDeviceConnect',
detail: '失败原因: characteristic.characteristicUuid:${characteristic.characteristicUuid} != _characteristicIdSubscription:$_characteristicIdSubscription bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false
);
detail:
'失败原因: characteristic.characteristicUuid:${characteristic.characteristicUuid} != _characteristicIdSubscription:$_characteristicIdSubscription bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false);
}
}
}else{
} else {
BuglyTool.uploadException(
message: '订阅失败 上传记录当前方法是bluetoothDeviceConnect',
detail: '失败原因: service.uuid:${service.uuid} != _serviceIdConnect:$_serviceIdConnect bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false
);
detail:
'失败原因: service.uuid:${service.uuid} != _serviceIdConnect:$_serviceIdConnect bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false);
}
}
} on Exception catch (e) {
needScanSingle = true;
bluetoothConnectionState = BluetoothConnectionState.disconnected;
connectStateCallBack(bluetoothConnectionState!);
AppLog.log(
'发现设备时失败 e:$e bluetoothConnectionState:$bluetoothConnectionState');
BuglyTool.uploadException(
message: '发现服务时失败',
detail: '发现服务时报错原因e$e bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false
);
detail:
'发现服务时报错原因e$e bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
upload: false);
rethrow;
}
}

View File

@ -133,6 +133,9 @@ class F {
static StarLockAMapKey get aMapKey {
switch (appFlavor) {
case Flavor.local:
return const StarLockAMapKey(
androidKey: '9388ca47f9674b447a17eff82bc0e2ea',
iosKey: 'cdec0512564baa58be26b2e2ac5ef3b7');
case Flavor.dev:
return const StarLockAMapKey(
androidKey: 'b56b681ee89f4db43a5aa1879ae8cbfe',

View File

@ -6,9 +6,11 @@ import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_state.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart';
import '../../tools/dateTool.dart';
import '../../tools/regularExpression.dart';
import '../../tools/showTipView.dart';
import '../register/entity/checkIP_entity.dart';
@ -53,8 +55,20 @@ class StarLockForgetPasswordLogic extends BaseGetXController {
'B748F838-94EE-4BDB-A0E6-7B2D16849792',
state.verificationCode.value);
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('resetPassword_result', {
'account':state.phoneStr.value,
'date':DateTool().getNowDateWithType(1),
'resetPassword_res':'成功',
});
showToast('重置成功'.tr);
Get.back();
}else{
UmengCommonSdk.onEvent('resetPassword_result', {
'account':state.phoneStr.value,
'date':DateTool().getNowDateWithType(1),
'resetPassword_res':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -8,10 +8,12 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../main/lockMian/lockMain/lockMain_logic.dart';
import '../../mine/mine/starLockMine_logic.dart';
import '../../network/api_repository.dart';
import '../../tools/dateTool.dart';
import '../../tools/eventBusEventManage.dart';
import '../../tools/showTipView.dart';
import '../../tools/storage.dart';
@ -49,6 +51,12 @@ class StarLockLoginLogic extends BaseGetXController {
username: state.emailOrPhone.value,
deviceInfo: state.deviceInfoMap);
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('login_result', {
'account':state.emailOrPhone.value,
'date':DateTool().getNowDateWithType(1),
'login_res':'成功',
});
Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI());
@ -57,6 +65,12 @@ class StarLockLoginLogic extends BaseGetXController {
}
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //
}else{
UmengCommonSdk.onEvent('login_result', {
'account':state.emailOrPhone.value,
'date':DateTool().getNowDateWithType(1),
'login_res':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -12,9 +12,11 @@ import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart';
import '../../tools/dateTool.dart';
import '../../tools/regularExpression.dart';
import '../../tools/showTipView.dart';
import 'entity/checkIP_entity.dart';
@ -59,12 +61,24 @@ class StarLockRegisterLogic extends BaseGetXController {
verificationCode: state.verificationCode.value,
deviceInfo: state.deviceInfoMap.value);
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('register_result', {
'account':state.phoneOrEmailStr.value,
'date':DateTool().getNowDateWithType(1),
'register_res':'成功',
});
Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI());
XSJPushProvider().initLocalNotification(isCancelLocalPush: false);
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //
}else{
UmengCommonSdk.onEvent('register_result', {
'account':state.phoneOrEmailStr.value,
'date':DateTool().getNowDateWithType(1),
'register_res':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -17,6 +17,7 @@ import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/trans_lib.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import 'app.dart';
import 'app_settings/app_settings.dart';
@ -73,6 +74,9 @@ Future<void> _setCommonServices() async {
//
Future<void> privacySDKInitialization() async {
UmengCommonSdk.initCommon('671244cf80464b33f6df9648', '671244ae80464b33f6df9646', 'Product');
UmengCommonSdk.setPageCollectionModeManual();
await Get.putAsync(() => PlatformInfoService().init());
await BuglyTool.init();
// JPush服务

View File

@ -13,6 +13,7 @@ import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_transferPermissions.dart';
@ -34,86 +35,84 @@ class AuthorizedAdminLogic extends BaseGetXController {
int? keyId;
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
//
if (reply is TransferPermissionsReply) {
final List<int> token = reply.data.sublist(2, 6);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
final int status = reply.data[6];
switch (status) {
case 0x00:
//
break;
case 0x06:
//
final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? publicKey =
await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList =
changeStringListToIntList(publicKey!);
final List<String>? token =
await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderFactoryDataReset(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
keyID: '1',
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList);
break;
default:
break;
}
}
});
}
// late StreamSubscription<Reply> _replySubscription;
// void _initReplySubscription() {
// _replySubscription =
// EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// //
// if (reply is TransferPermissionsReply) {
// final List<int> token = reply.data.sublist(2, 6);
// final List<String> saveStrList = changeIntListToStringList(token);
// Storage.setStringList(saveBlueToken, saveStrList);
//
// final int status = reply.data[6];
// switch (status) {
// case 0x00:
// //
// break;
// case 0x06:
// //
// final List<String>? privateKey =
// await Storage.getStringList(saveBluePrivateKey);
// final List<int> getPrivateKeyList =
// changeStringListToIntList(privateKey!);
//
// final List<String>? publicKey =
// await Storage.getStringList(saveBluePublicKey);
// final List<int> publicKeyDataList =
// changeStringListToIntList(publicKey!);
//
// final List<String>? token =
// await Storage.getStringList(saveBlueToken);
// final List<int> getTokenList = changeStringListToIntList(token!);
//
// IoSenderManage.senderFactoryDataReset(
// lockID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(),
// keyID: '1',
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: getTokenList);
// break;
// default:
// break;
// }
// }
// });
// }
//
Future<void> transferPermissionsAction() async {
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState state) async {
if (state == BluetoothConnectionState.connected) {
final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? publicKey =
await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList =
changeStringListToIntList(publicKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderTransferPermissions(
lockID: BlueManage().connectDeviceName,
authUserID: await Storage.getUid(),
keyID: '1',
oldUserID: await Storage.getUid(),
newUserID: '100002',
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList);
}
});
}
// Future<void> transferPermissionsAction() async {
// BlueManage().blueSendData(BlueManage().connectDeviceName,
// (BluetoothConnectionState state) async {
// if (state == BluetoothConnectionState.connected) {
// final List<String>? privateKey =
// await Storage.getStringList(saveBluePrivateKey);
// final List<int> getPrivateKeyList =
// changeStringListToIntList(privateKey!);
//
// final List<String>? publicKey =
// await Storage.getStringList(saveBluePublicKey);
// final List<int> publicKeyDataList =
// changeStringListToIntList(publicKey!);
//
// final List<String>? token = await Storage.getStringList(saveBlueToken);
// final List<int> getTokenList = changeStringListToIntList(token!);
//
// IoSenderManage.senderTransferPermissions(
// lockID: BlueManage().connectDeviceName,
// authUserID: await Storage.getUid(),
// keyID: '1',
// oldUserID: await Storage.getUid(),
// newUserID: '100002',
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: getTokenList);
// }
// });
// }
//
Future<void> sendElectronicKeyRequest() async {
@ -223,7 +222,15 @@ class AuthorizedAdminLogic extends BaseGetXController {
idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text
: '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('add_authorizedAdmin', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'添加授权管理员成功',
});
state.createUser.value = 0;
state.isSendSuccess.value = true;
state.addUserId.value = entity.data!.receiverUser!.id.toString();
@ -238,6 +245,13 @@ class AuthorizedAdminLogic extends BaseGetXController {
state.createUser.value = 1;
sendElectronicKeyRequest();
});
}else{
UmengCommonSdk.onEvent('add_authorizedAdmin', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'添加授权管理员失败:${entity.errorMsg}',
});
}
}
}
@ -328,11 +342,11 @@ class AuthorizedAdminLogic extends BaseGetXController {
void onReady() {
super.onReady();
_initReplySubscription();
// _initReplySubscription();
}
@override
void onClose() {
_replySubscription.cancel();
// _replySubscription.cancel();
}
}

View File

@ -7,6 +7,7 @@ import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/card/addICCard/addICCard_entity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
@ -15,6 +16,7 @@ import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/bugly/bugly_tool.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
@ -41,6 +43,11 @@ class AddICCardLogic extends BaseGetXController{
Future<void> _replyAddICCardBegin(Reply reply) async {
final int status = reply.data[2];
BuglyTool.uploadException(
message: '添加卡开始,解析数据',
detail: '添加卡开始,解析数据 _replyAddICCardBegin:${reply.data}',
upload: false
);
switch(status){
case 0x00:
@ -101,10 +108,24 @@ class AddICCardLogic extends BaseGetXController{
Future<void> _replyAddICCardConfirmation(Reply reply) async {
final int status = reply.data[2];
state.ifAddState.value = false;
BuglyTool.uploadException(
message: '添加卡结果,解析数据',
detail: '添加卡结果,解析数据 _replyAddICCardConfirmation:${reply.data}',
eventStr: '添加卡事件结果',
upload: true
);
final String getMobile = (await Storage.getMobile())!;
switch(status){
case 0x00:
//
//
UmengCommonSdk.onEvent('add_card', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_card_result':'成功',
});
switch(reply.data[5]){
case 0xff:
//
@ -139,28 +160,69 @@ class AddICCardLogic extends BaseGetXController{
break;
default:
//
UmengCommonSdk.onEvent('add_card', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_card_result':reply.data[2],
});
break;
}
}
//
Future<void> senderAddICCard() async {
showBlueConnetctToastTimer(action: (){
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
final String command = SenderAddICCardWithTimeCycleCoercionCommand(
keyID:'1',
userID:await Storage.getUid(),
cardNo:0,
useCountLimit:0xffff,
operate:0, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
isForce:state.isCoerced.value == '1' ? 1 : 0, //
isRound:state.selectType.value == '2' ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
).toString();
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_card', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_card_result':'添加卡超时',
});
BuglyTool.uploadException(
message: '添加卡超时处理-添加卡失败',
detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
eventStr: '添加卡事件超时',
upload: true
);
Get.close(1);
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
cancelBlueConnetctToastTimer();
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:'1',
userID:await Storage.getUid(),
@ -182,6 +244,21 @@ class AddICCardLogic extends BaseGetXController{
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_card', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_card_result':'添加卡断开连接',
});
BuglyTool.uploadException(
message: '添加卡超时处理-添加卡失败',
detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
eventStr: '添加卡事件断开连接',
upload: true
);
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}

View File

@ -2,12 +2,16 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart';
import 'package:star_lock/main/lockDetail/lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_referEventRecordTime.dart';
@ -17,6 +21,7 @@ import '../../../blue/io_tool/manager_event_bus.dart';
import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/baseGetXController.dart';
import '../../../tools/bugly/bugly_tool.dart';
import '../../../tools/storage.dart';
import '../lockOperatingRecord/keyOperationRecord_entity.dart';
@ -38,8 +43,17 @@ class DoorLockLogLogic extends BaseGetXController {
//
Future<void> _replyReferEventRecordTime(Reply reply) async {
BuglyTool.uploadException(
message: '查询锁记录结果,解析数据',
detail: '查询锁记录结果,解析数据:${reply.data}',
eventStr: '查询锁记录事件结果',
upload: true
);
state.isLockReceiveResponse = true;
cancelBlueConnetctToastTimer();
final int status = reply.data[2];
switch (status) {
case 0x00:
//
@ -76,8 +90,8 @@ class DoorLockLogLogic extends BaseGetXController {
(0xff & indexList[4]) << 16 |
(0xff & indexList[5]) << 8 |
(0xFF & indexList[6]);
final operateDate = time * 1000;
final serverTime = state.currentDate;
final int operateDate = time * 1000;
final int serverTime = state.currentDate;
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
// AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}');
@ -100,31 +114,67 @@ class DoorLockLogLogic extends BaseGetXController {
break;
default:
//
dismissEasyLoading();
break;
}
}
// ()
Future<void> senderReferEventRecordTime() async {
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>? publicKey = await Storage.getStringList(saveBluePublicKey);
final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
final String command = SenderReferEventRecordTimeCommand(
keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
logsCount: state.logCountPage,
// time:DateTime.now().millisecondsSinceEpoch~/1000,
time: state.operateDate,
currentDate: state.currentDate,
token: getTokenList,
needAuthor: 1,
publicKey: getPublicKeyList,
privateKey: getPrivateKeyList,
).toString();
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
showBlueConnetctToastTimer(isShowBlueConnetctToast:true, action: () async {
cancelBlueConnetctToastTimer();
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('check_doorLockLog', {
'lockName':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'超时',
});
BuglyTool.uploadException(
message: '查询锁记录超时-查询锁记录失败',
detail: '添加密码超时,查询锁记录失败--senderReferEventRecordTimeCommand:$command',
eventStr: '查询锁记录事件超时',
upload: true
);
if(state.isLockReceiveResponse == false){
dismissEasyLoading();
}
});
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState connectionStateState) async {
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async {
if (connectionStateState == BluetoothConnectionState.connected) {
final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? publicKey =
await Storage.getStringList(saveBluePublicKey);
final List<int> getPublicKeyList =
changeStringListToIntList(publicKey!);
final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
IoSenderManage.senderReferEventRecordTimeCommand(
keyID: BlueManage().connectDeviceName,
@ -138,13 +188,26 @@ class DoorLockLogLogic extends BaseGetXController {
publicKey: getPublicKeyList,
privateKey: getPrivateKeyList,
);
} else if (connectionStateState ==
BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
} else if (connectionStateState == BluetoothConnectionState.disconnected) {
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('check_doorLockLog', {
'lockName':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'断开连接',
});
BuglyTool.uploadException(
message: '查询锁记录超时-查询锁记录失败',
detail: '添加密码超时,查询锁记录失败--senderReferEventRecordTimeCommand:$command',
eventStr: '查询锁记录事件断开连接',
upload: true
);
}
});
}
@ -174,19 +237,18 @@ class DoorLockLogLogic extends BaseGetXController {
///
StreamSubscription? _getDoorLockLogListRefreshUIEvent;
void _getDoorLockLogListRefreshUIAction() {
_getDoorLockLogListRefreshUIEvent = eventBus
.on<DoorLockLogListRefreshUI>()
.listen((DoorLockLogListRefreshUI event) {
_getDoorLockLogListRefreshUIEvent = eventBus.on<DoorLockLogListRefreshUI>().listen((DoorLockLogListRefreshUI event) {
state.currentSelectDate.value = event.getDoorLockLogTime;
// startDate为当天的0点
// startDate为当天的0点
state.startDate.value = DateTime(
state.currentSelectDate.value.year,
state.currentSelectDate.value.month,
state.currentSelectDate.value.day)
.millisecondsSinceEpoch;
// endDate为下一天的0点1
// endDate为下一天的0点1
state.endDate.value = DateTime(
state.currentSelectDate.value.year,
state.currentSelectDate.value.month,
@ -219,15 +281,30 @@ class DoorLockLogLogic extends BaseGetXController {
if (list.isEmpty) {
return;
}
final KeyOperationRecordEntity entity = await ApiRepository.to
.lockRecordUploadData(
lockId: state.keyInfos.value.lockId.toString(), records: list);
final KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordUploadData(lockId: state.keyInfos.value.lockId.toString(), records: list);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
if (state.ifHaveNext == true) {
showEasyLoading();
getLockRecordLastUploadDataTime();
} else {
UmengCommonSdk.onEvent('check_doorLockLog', {
'lockName':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'成功',
});
mockNetworkDataRequest(isRefresh: true);
}
dismissEasyLoading();
}else{
UmengCommonSdk.onEvent('check_doorLockLog', {
'lockName':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'上传数据接口失败',
});
dismissEasyLoading();
}
}
@ -265,9 +342,10 @@ class DoorLockLogLogic extends BaseGetXController {
//
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
getLockRecordLastUploadDataTime();
_initReplySubscription();
mockNetworkDataRequest(isRefresh: true);
// getLockRecordLastUploadDataTime();
_initReplySubscription();
}
}

View File

@ -88,7 +88,7 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
body: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
children: <Widget>[
topAdvancedCalendarWidget(),
Divider(
height: 1,
@ -126,6 +126,17 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
}else if(value == '清空记录'.tr){
ShowCupertinoAlertView().showClearOperationRecordAlert(
clearClick: () {
switch (value) {
case '读取记录':
{
state.isLockReceiveResponse = false;
logic.getLockRecordLastUploadDataTime();
}
break;
case '清空记录':
{
ShowCupertinoAlertView().showClearOperationRecordAlert(
clearClick: () {
logic.clearOperationRecordRequest();
});
}else if(value == '导出记录'.tr){
@ -198,7 +209,7 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
disabledColor: Colors.grey,
),
child: Stack(
children: [
children: <Widget>[
AdvancedCalendar(
controller: state.calendarControllerCustom,
events: state.events,
@ -384,7 +395,9 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
void didPop() {
super.didPop();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
}

View File

@ -68,4 +68,5 @@ class DoorLockLogState {
bool ifHaveNext = false; //
int logCountPage = 10; //
Rx<DateTime> currentSelectDate = DateTime.now().obs;
bool isLockReceiveResponse = false; //
}

View File

@ -17,6 +17,9 @@ import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../../blue/blue_manage.dart';
class SendElectronicKeyViewLogic extends BaseGetXController {
SendElectronicKeyViewLogic(this.type);
@ -180,7 +183,15 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text
: '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_electronic_key_result':'成功',
});
emailOrPhone = state.emailOrPhoneController.text;
state.createUser.value = 0;
state.isSendSuccess = true;
@ -190,6 +201,13 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
update();
eventBus.fire(ElectronicKeyListRefreshUI());
} else {
UmengCommonSdk.onEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_electronic_key_result':'${entity.errorCode}--${entity.errorMsg}',
});
emailOrPhone = null;
if (entity.errorCode == 425) {
//

View File

@ -3,9 +3,11 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_reply.dart';
@ -17,6 +19,7 @@ import '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/eventBusEventManage.dart';
import '../../../../../tools/storage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
import '../../../../tools/bugly/bugly_tool.dart';
import 'addFingerprint_state.dart';
class AddFingerprintLogic extends BaseGetXController {
@ -44,8 +47,13 @@ class AddFingerprintLogic extends BaseGetXController {
}
Future<void> _replyAddFingerprintBegin(Reply reply) async {
final int status = reply.data[2];
BuglyTool.uploadException(
message: '添加指纹开始,解析数据',
detail: '添加指纹开始,解析数据 _replyAddFingerprintBegin:${reply.data}',
upload: false
);
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -102,8 +110,12 @@ class AddFingerprintLogic extends BaseGetXController {
}
Future<void> _replyAddFingerprintProcess(Reply reply) async {
BuglyTool.uploadException(
message: '添加指纹过程,解析数据',
detail: '添加指纹过程,解析数据 _replyAddFingerprintProcess:${reply.data}',
upload: false
);
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -154,13 +166,27 @@ class AddFingerprintLogic extends BaseGetXController {
Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
final int status = reply.data[2];
final String getMobile = (await Storage.getMobile())!;
switch(status){
case 0x00:
//
// var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
final List<int> fingerprintList = reply.data.sublist(reply.data.length - 2);
final String fingerprintNum = listChangInt(fingerprintList).toString();
state.regIndex.value++;
UmengCommonSdk.onEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_fingerprint_result':'成功',
});
BuglyTool.uploadException(
message: '添加指纹确认结果,解析数据',
detail: '添加指纹确认结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}',
upload: false
);
final List<int> fingerprintList = reply.data.sublist(reply.data.length - 2);
final String fingerprintNum = listChangInt(fingerprintList).toString();
state.regIndex.value++;
if(state.fingerprintNumber.value == fingerprintNum){
return;
}else{
@ -177,6 +203,19 @@ class AddFingerprintLogic extends BaseGetXController {
break;
default:
//
UmengCommonSdk.onEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_fingerprint_result':'失败-${reply.data}',
});
BuglyTool.uploadException(
message: '添加指纹确认结果,解析数据',
detail: '添加指纹确认结果蓝牙返回失败结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}',
eventStr: '添加指纹事件蓝牙返回失败结果',
upload: true
);
state.ifAddState.value = false;
break;
}
@ -184,7 +223,50 @@ class AddFingerprintLogic extends BaseGetXController {
//
Future<void> senderAddFingerprint() async {
showBlueConnetctToastTimer(action: (){
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
final String command = SenderAddFingerprintWithTimeCycleCoercionCommand(
keyID:'1',
userID:await Storage.getUid(),
fingerNo:0,
useCountLimit:0xffff,
isForce:state.isCoerced.value == '1' ? 1 : 0, //
isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
operate: 0,
isRound:state.selectType.value == '2' ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value),
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
).toString();
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_fingerprint_result':'超时',
});
BuglyTool.uploadException(
message: '添加指纹超时处理-添加指纹失败',
detail: '添加指纹超时处理,断开连接,添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command',
eventStr: '添加指纹事件超时',
upload: true
);
Get.close(1);
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
@ -219,6 +301,21 @@ class AddFingerprintLogic extends BaseGetXController {
isBeforeAddUser: false
);
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_fingerprint_result':'断开',
});
BuglyTool.uploadException(
message: '添加指纹断开连接-添加指纹失败',
detail: '添加指纹断开连接-添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command',
eventStr: '添加指纹事件断开连接',
upload: true
);
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
@ -277,6 +374,20 @@ class AddFingerprintLogic extends BaseGetXController {
);
if(entity.errorCode!.codeIsSuccessful){
updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString());
BuglyTool.uploadException(
message: '添加指纹调用接口成功',
detail: '添加指纹调用接口成功',
eventStr: '添加指纹事件用接口成功',
upload: true
);
}else{
updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString());
BuglyTool.uploadException(
message: '添加指纹调用接口失败',
detail: '添加指纹调用接口添加指纹调用接口失败 - ${entity.errorMsg}',
eventStr: '添加指纹事件接口失败',
upload: true
);
}
}

View File

@ -14,6 +14,7 @@ import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/throttler.dart';
import 'package:star_lock/widget/permission/permission_dialog.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart';
@ -26,6 +27,7 @@ import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/baseGetXController.dart';
import '../../../tools/commonDataManage.dart';
import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart';
import '../lockOperatingRecord/keyOperationRecord_entity.dart';
@ -67,6 +69,16 @@ class LockDetailLogic extends BaseGetXController {
detail: '开锁结果,解析数据 _replyOpenLock:${reply.data}',
upload: true);
if(status != 6){
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('open_lock', {
'lock_name':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'${reply.data}',
});
}
switch (status) {
case 0x00:
//
@ -363,7 +375,15 @@ class LockDetailLogic extends BaseGetXController {
showBlueConnetctToastTimer(
outTimer: 20,
action: () {
action: () async {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('open_lock', {
'lock_name':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'超时',
});
resetOpenDoorState();
blueManageDisconnect();
BuglyTool.uploadException(
@ -399,6 +419,16 @@ class LockDetailLogic extends BaseGetXController {
message: '蓝牙连接失败-开锁失败',
detail: '蓝牙连接失败,断开连接, 开锁失败--OpenLockCommand:$command',
upload: true);
upload: true
);
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('open_lock', {
'lock_name':state.keyInfos.value.lockName!,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'open_lock_result':'断开连接',
});
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}

View File

@ -22,129 +22,129 @@ class LockOperatingRecordLogic extends BaseGetXController {
LockOperatingRecordState state = LockOperatingRecordState();
//
late StreamSubscription<Reply> _replySubscription;
// late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
if (reply is SenderReferEventRecordTimeReply) {
_replyReferEventRecordTime(reply);
}
});
}
// void _initReplySubscription() {
// _replySubscription =
// EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// if (reply is SenderReferEventRecordTimeReply) {
// _replyReferEventRecordTime(reply);
// }
// });
// }
//
Future<void> _replyReferEventRecordTime(Reply reply) async {
cancelBlueConnetctToastTimer();
final int status = reply.data[2];
switch (status) {
case 0x00:
//
final int dataLength = (reply.data[5] << 8) + reply.data[6];
AppLog.log('dataLength:$dataLength');
// var dataLength = reply.data[5];
if (dataLength > 0) {
reply.data.removeRange(0, 7);
// 8
if (reply.data.length < 17) {
return;
}
final List<List<int>> getList = splitList(reply.data, 17);
// AppLog.log("getList:$getList");
final List uploadList = [];
for (int i = 0; i < getList.length; i++) {
final List<int> indexList = getList[i];
// AppLog.log("indexList:$indexList");
final Map indexMap = {};
indexMap['type'] = indexList[0].toString();
final int userNo = (indexList[1] * 256) + indexList[2];
indexMap['user'] = userNo.toString();
// AppLog.log('userNouserNouserNouserNo:$userNo');
final List<int> passwordData = indexList.sublist(7, 17);
final String password = utf8String(passwordData);
indexMap['password'] = password.toString();
// AppLog.log('passwordpasswordpassword:$password');
indexMap['success'] = '1';
final int time = (0xff & indexList[3]) << 24 |
(0xff & indexList[4]) << 16 |
(0xff & indexList[5]) << 8 |
(0xFF & indexList[6]);
final operateDate = time * 1000;
final serverTime = state.currentDate;
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
continue;
}
indexMap['date'] = '$operateDate';
uploadList.add(indexMap);
}
if (dataLength == state.logCountPage) {
state.ifHaveNext = true;
} else {
state.ifHaveNext = false;
}
lockRecordUploadData(uploadList);
}
break;
case 0x06:
//
break;
default:
//
break;
}
}
// Future<void> _replyReferEventRecordTime(Reply reply) async {
// cancelBlueConnetctToastTimer();
// final int status = reply.data[2];
// switch (status) {
// case 0x00:
// //
// final int dataLength = (reply.data[5] << 8) + reply.data[6];
// AppLog.log('dataLength:$dataLength');
// // var dataLength = reply.data[5];
// if (dataLength > 0) {
// reply.data.removeRange(0, 7);
// // 8
// if (reply.data.length < 17) {
// return;
// }
// final List<List<int>> getList = splitList(reply.data, 17);
// // AppLog.log("getList:$getList");
// final List uploadList = [];
// for (int i = 0; i < getList.length; i++) {
// final List<int> indexList = getList[i];
// // AppLog.log("indexList:$indexList");
// final Map indexMap = {};
//
// indexMap['type'] = indexList[0].toString();
//
// final int userNo = (indexList[1] * 256) + indexList[2];
// indexMap['user'] = userNo.toString();
// AppLog.log('userNouserNouserNouserNo:$userNo');
//
// final List<int> passwordData = indexList.sublist(7, 17);
// final String password = utf8String(passwordData);
// indexMap['password'] = password.toString();
// AppLog.log('passwordpasswordpassword:$password');
//
// indexMap['success'] = '1';
//
// final int time = (0xff & indexList[3]) << 24 |
// (0xff & indexList[4]) << 16 |
// (0xff & indexList[5]) << 8 |
// (0xFF & indexList[6]);
// final operateDate = time * 1000;
// final serverTime = state.currentDate;
// if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
// DateTime.fromMillisecondsSinceEpoch(serverTime*1000))) {
// continue;
// }
// indexMap['date'] = '$operateDate';
// uploadList.add(indexMap);
// }
// if (dataLength == state.logCountPage) {
// state.ifHaveNext = true;
// } else {
// state.ifHaveNext = false;
// }
// lockRecordUploadData(uploadList);
// }
// break;
// case 0x06:
// //
//
// break;
// default:
// //
// break;
// }
// }
// ()
Future<void> senderReferEventRecordTime() async {
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
});
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState connectionStateState) async {
if (connectionStateState == BluetoothConnectionState.connected) {
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>? publicKey =
await Storage.getStringList(saveBluePublicKey);
final List<int> getPublicKeyList =
changeStringListToIntList(publicKey!);
IoSenderManage.senderReferEventRecordTimeCommand(
keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
logsCount: state.logCountPage,
// time:DateTime.now().millisecondsSinceEpoch~/1000,
time: state.operateDate,
currentDate: state.currentDate,
token: getTokenList,
needAuthor: 1,
publicKey: getPublicKeyList,
privateKey: getPrivateKeyList,
);
} else if (connectionStateState ==
BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
// Future<void> senderReferEventRecordTime() async {
// showEasyLoading();
// showBlueConnetctToastTimer(action: () {
// dismissEasyLoading();
// });
// BlueManage().blueSendData(BlueManage().connectDeviceName,
// (BluetoothConnectionState connectionStateState) async {
// if (connectionStateState == BluetoothConnectionState.connected) {
// 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>? publicKey =
// await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList =
// changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderReferEventRecordTimeCommand(
// keyID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(),
// logsCount: state.logCountPage,
// // time:DateTime.now().millisecondsSinceEpoch~/1000,
// time: state.operateDate,
// currentDate: state.currentDate,
// token: getTokenList,
// needAuthor: 1,
// publicKey: getPublicKeyList,
// privateKey: getPrivateKeyList,
// );
// } else if (connectionStateState ==
// BluetoothConnectionState.disconnected) {
// dismissEasyLoading();
// cancelBlueConnetctToastTimer();
// if (state.ifCurrentScreen.value == true) {
// showBlueConnetctToast();
// }
// }
// });
// }
//
Future<KeyOperationRecordEntity> mockNetworkDataRequest() async {
@ -181,48 +181,48 @@ class LockOperatingRecordLogic extends BaseGetXController {
}
//
Future<void> getLockRecordLastUploadDataTime() async {
final LockOperatingRecordGetLastRecordTimeEntity entity =
await ApiRepository.to.getLockRecordLastUploadDataTime(
lockId: CommonDataManage().currentKeyInfo.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) {
state.operateDate = entity.data!.operateDate! ~/ 1000;
state.currentDate = entity.data!.currentDate! ~/ 1000;
senderReferEventRecordTime();
}
}
// Future<void> getLockRecordLastUploadDataTime() async {
// final LockOperatingRecordGetLastRecordTimeEntity entity =
// await ApiRepository.to.getLockRecordLastUploadDataTime(
// lockId: CommonDataManage().currentKeyInfo.lockId.toString());
// if (entity.errorCode!.codeIsSuccessful) {
// state.operateDate = entity.data!.operateDate! ~/ 1000;
// state.currentDate = entity.data!.currentDate! ~/ 1000;
// senderReferEventRecordTime();
// }
// }
//
Future<void> lockRecordUploadData(List list) async {
if (list.isEmpty) {
return;
}
final KeyOperationRecordEntity entity = await ApiRepository.to
.lockRecordUploadData(
lockId: CommonDataManage().currentKeyInfo.lockId.toString(),
records: list);
if (entity.errorCode!.codeIsSuccessful) {
if (state.ifHaveNext == true) {
getLockRecordLastUploadDataTime();
} else {
pageNo = 1;
mockNetworkDataRequest();
}
}
}
// Future<void> lockRecordUploadData(List list) async {
// if(list.isEmpty){
// return;
// }
// final KeyOperationRecordEntity entity = await ApiRepository.to
// .lockRecordUploadData(
// lockId: CommonDataManage().currentKeyInfo.lockId.toString(),
// records: list);
// if (entity.errorCode!.codeIsSuccessful) {
// if (state.ifHaveNext == true) {
// getLockRecordLastUploadDataTime();
// } else {
// pageNo = 1;
// mockNetworkDataRequest();
// }
// }
// }
//
Future<void> clearOperationRecordRequest() async {
final KeyOperationRecordEntity entity = await ApiRepository.to
.clearOperationRecord(
CommonDataManage().currentKeyInfo.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) {
showToast('清除数据成功'.tr, something: () {
pageNo = 1;
mockNetworkDataRequest();
});
}
}
// Future<void> clearOperationRecordRequest() async {
// final KeyOperationRecordEntity entity = await ApiRepository.to
// .clearOperationRecord(
// CommonDataManage().currentKeyInfo.lockId.toString());
// if (entity.errorCode!.codeIsSuccessful) {
// showToast('清除数据成功', something: () {
// pageNo = 1;
// mockNetworkDataRequest();
// });
// }
// }
@override
Future<void> onReady() async {
@ -245,10 +245,10 @@ class LockOperatingRecordLogic extends BaseGetXController {
//
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
getLockRecordLastUploadDataTime();
// getLockRecordLastUploadDataTime();
// senderReferEventRecordTime();
// senderReferEventRecordNumber();
_initReplySubscription();
// _initReplySubscription();
}
}
@ -259,7 +259,7 @@ class LockOperatingRecordLogic extends BaseGetXController {
//
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
// _replySubscription.cancel();
// _getDoorLockLogListRefreshUIEvent?.cancel();
}
}

View File

@ -84,6 +84,29 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
},
child: Column(
children: <Widget>[
// (CommonDataManage().currentKeyInfo.isLockOwner == 1 ||
// CommonDataManage().currentKeyInfo.keyRight == 1)
// ? Column(
// children: [
// Container(
// padding: EdgeInsets.only(left:20.h, right: 20.h, top: 20.h),
// child: Text(
// TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr,
// textAlign: TextAlign.start,
// style: TextStyle(fontSize: 20.sp),
// ),
// ),
// KeySearchWidget(
// editingController: state.searchController,
// onSubmittedAction: () {
// logic.pageNo = 1;
// getHttpData();
// },
// ),
// ],
// )
// : Container(),
// SizedBox(height: 10.h),
Expanded(child: _buildMainUI()),
],
),
@ -275,7 +298,6 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
@override
void didChangeDependencies() {
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@ -299,7 +321,9 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
void didPop() {
super.didPop();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
}
@ -315,7 +339,9 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
void didPushNext() {
super.didPushNext();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
}

View File

@ -6,6 +6,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_factoryDataReset.dart';
@ -19,6 +20,7 @@ import '../../../../blue/sender_manage.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/commonDataManage.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import 'checkingInInfoData_entity.dart';
@ -287,7 +289,16 @@ class LockSetLogic extends BaseGetXController {
showEasyLoading();
showBlueConnetctToastTimer(
isShowBlueConnetctToast: false,
action: () {
action: () async {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'lock',
'delet_lock_result':'删除锁超时',
});
dismissEasyLoading();
showDeletAlertTipDialog();
});
@ -316,6 +327,15 @@ class LockSetLogic extends BaseGetXController {
privateKey: getPrivateKeyList,
token: getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'lock',
'delet_lock_result':'删除锁断开',
});
dismissEasyLoading();
cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) {
@ -568,7 +588,16 @@ class LockSetLogic extends BaseGetXController {
final LockListInfoEntity entity = await ApiRepository.to.deletOwnerLockData(
lockId: state.lockSetInfoData.value.lockId!,
);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'lock',
'delet_lock_result':'成功',
});
BlueManage().connectDeviceMacAddress = '';
final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200))
@ -578,6 +607,14 @@ class LockSetLogic extends BaseGetXController {
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());
});
}else{
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'lock',
'delet_lock_result':'${entity.errorCode}--${entity.errorMsg}',
});
}
}
@ -588,7 +625,16 @@ class LockSetLogic extends BaseGetXController {
keyId: state.lockSetInfoData.value.lockBasicInfo!.keyId.toString(),
includeUnderlings:
state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'key',
'delet_lock_result':'成功',
});
BlueManage().connectDeviceMacAddress = '';
final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200))
@ -598,6 +644,14 @@ class LockSetLogic extends BaseGetXController {
SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent());
});
}else{
UmengCommonSdk.onEvent('delet_lock', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'delet_type':'key',
'delet_lock_result':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -6,6 +6,7 @@ import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/pass
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_modelVendor.dart';
@ -15,6 +16,7 @@ import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/bugly/bugly_tool.dart';
import '../../../../tools/commonDataManage.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/storage.dart';
@ -178,7 +180,15 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
endDate: getFailureDateTime,
addType: '1',
pwdRight: state.isAdministrator.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'成功',
});
state.isSendSuccess.value = true;
state.sendSucceedType.value = state.widgetType.value;
state.pwdNameStr = state.nameController.text;
@ -189,6 +199,12 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
updatePWDNumberRequest(entity.data!.keyboardPwdId.toString());
}
} else {
UmengCommonSdk.onEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'${entity.errorMsg}',
});
showToast('${entity.errorMsg}');
}
}
@ -228,11 +244,16 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
//
if ((reply is SenderCustomPasswordsReply) &&
(state.ifCurrentScreen.value == true)) {
if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
BuglyTool.uploadException(
message: '添加密码结果,解析数据',
detail: '添加密码结果,解析数据:${reply.data}',
eventStr: '添加密码事件结果',
upload: true
);
final int status = reply.data[2];
switch (status) {
case 0x00:
@ -369,22 +390,60 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
}
state.sureBtnState.value = 1;
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
final String command = SenderCustomPasswordsCommand(
keyID: '1',
userID: await Storage.getUid(),
pwdNo: 0,
pwd: state.pwdController.text,
operate: 0,
isAdmin: state.isAdministrator.value == true ? 1 : 0,
useCountLimit: 0xffff,
startTime: startDate ~/ 1000,
endTime: endDate ~/ 1000,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList
).toString();
showEasyLoading();
showBlueConnetctToastTimer(action: () {
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'添加自定义密码超时',
});
BuglyTool.uploadException(
message: '添加密码超时处理-添加密码失败',
detail: '添加密码超时,添加密码失败--senderCustomPasswordsCommand:$command',
eventStr: '添加密码事件超时',
upload: true
);
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? signKey =
await Storage.getStringList(saveBlueSignKey);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
@ -404,8 +463,22 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'add_password_result':'添加自定义密码断开',
});
BuglyTool.uploadException(
message: '添加密码断开-添加密码失败',
detail: '添加密码断开,添加密码失败--senderCustomPasswordsCommand:$command',
eventStr: '添加密码事件断开连接',
upload: true
);
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;

View File

@ -6,6 +6,7 @@ import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_logic.dart';
import 'package:star_lock/mine/addLock/saveLock/entity/SaveLockEntity.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart';
@ -17,6 +18,7 @@ import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/baseGetXController.dart';
import '../../../tools/commonDataManage.dart';
import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart';
import 'saveLock_state.dart';
@ -404,8 +406,14 @@ class SaveLockLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) {
state.lockId = entity.data!.lockId!;
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('save_lock_result', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'save_lock_result':'成功',
});
backAction();
// await senderCustomPasswords();
// BlueManage().disconnect(BlueManage().connectDeviceMacAddress);
@ -413,6 +421,14 @@ class SaveLockLogic extends BaseGetXController {
// Get.close(state.isFromMap == 1 ? 5 : 6);
} else {
state.sureBtnState.value = 0;
final String getMobile = (await Storage.getMobile())!;
UmengCommonSdk.onEvent('save_lock_result', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'save_lock_result':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -13,12 +13,14 @@ import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/versionUndate/versionUndate_entity.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart';
import '../../../talk/udp/udp_help.dart';
import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart';
import '../../../tools/store_service.dart';
import '../../../translations/app_dept.dart';
@ -130,7 +132,15 @@ class MineSetLogic extends BaseGetXController {
});
final LoginEntity entity =
await ApiRepository.to.userLogout(deviceld: getPushDeviceID);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('logout', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'logout_result':'成功',
});
UdpHelp().closeUDP();
logOut();
@ -140,6 +150,13 @@ class MineSetLogic extends BaseGetXController {
BlueManage().disconnect();
XSJPushProvider().initLocalNotification(isCancelLocalPush: true);
Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false);
}else{
UmengCommonSdk.onEvent('logout', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
'logout_result':'${entity.errorCode}--${entity.errorMsg}',
});
}
}

View File

@ -232,9 +232,8 @@ class _AdvancedCalendarState extends State<AdvancedCalendar>
height: height,
child: ValueListenableBuilder<DateTime>(
valueListenable: _controller,
builder: (_, DateTime selectedDate, __) {
AppLog.log('****selectedDate: $selectedDate');
eventBus.fire(DoorLockLogListRefreshUI(selectedDate));
builder: (_, selectedDate, __) {
// AppLog.log('****selectedDate: $selectedDate');
return Stack(
alignment: Alignment.center,
children: <Widget>[
@ -253,6 +252,7 @@ class _AdvancedCalendarState extends State<AdvancedCalendar>
);
}
_monthViewCurrentPage.value = pageIndex;
AppLog.log('调用onPageChanged');
},
controller: _monthPageController,
physics: _animationController.value == 1.0
@ -390,6 +390,8 @@ class _AdvancedCalendarState extends State<AdvancedCalendar>
void _handleDateChanged(DateTime date) {
_controller.value = date;
AppLog.log('点击日期了');
eventBus.fire(DoorLockLogListRefreshUI(date));
}
void _handleFinishDrag() async {

View File

@ -65,6 +65,7 @@ class BuglyTool {
required String message,
required String detail,
required bool upload,
String eventStr = '开门事件',
bool begin = false,
Map? data,
}) async {
@ -80,7 +81,7 @@ class BuglyTool {
// AppLog.log('message:${(await Storage.getMobile())!.isNotEmpty ? (await Storage.getMobile()) : (await Storage.getEmail())}+$time --- 开门事件 detail:$uploadStr');
// FlutterBugly.uploadException(message: '${(await Storage.getMobile())!.isNotEmpty ? (await Storage.getMobile()) : (await Storage.getEmail())}+$time --- 开门事件', detail: uploadStr, data: data);
BuglyTool.uploadExceptionWithEvent(eventStr:'开门事件', detail: uploadStr);
BuglyTool.uploadExceptionWithEvent(eventStr:eventStr, detail: uploadStr);
}
}

View File

@ -100,6 +100,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.79+2024083001测试所有国家国际化功能
# 1.0.79+2024083001测试开完锁数据上传功能
# 1.0.81+2024092901添加开锁数据收集功能
# 1.0.82+2024093001优化开锁数据收集功能
# 1.0.85+2024120301完善网关功能
# 1.0.85+2024120401修复网关问题打包给谢敬调试
@ -238,7 +239,7 @@ dependencies:
# audio_service: ^0.18.12
app_settings: ^5.1.1
flutter_local_notifications: ^17.0.0
fluwx: ^4.5.5
fluwx: 4.5.5
system_settings: ^2.0.0
expandable: ^5.0.1
colorfilter_generator: ^0.0.8
@ -248,6 +249,7 @@ dependencies:
flutter_bugly: ^1.0.2
open_filex: ^4.4.0
umeng_common_sdk: 1.2.7
dependency_overrides:
#强制设置google_maps_flutter_ios 为 2.5.2