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') // implementation(name: 'HiPushSDK-7.0.61.303', ext: 'aar')
// VIVO // VIVO
implementation 'cn.jiguang.sdk.plugin:vivo:5.2.3' 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.** { *; } -keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.** -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.** { *; } -keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.** -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.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" android:name="android.permission.QUERY_ALL_PACKAGES"
tools:node="remove" /> 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 <application
android:name="android.app.Application" android:name="android.app.Application"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
@ -171,6 +179,18 @@
</intent-filter> </intent-filter>
</activity> </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> </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 androidx.core.content.FileProvider
import java.io.File import java.io.File
import com.umeng.commonsdk.UMConfigure
class MainActivity : FlutterActivity() { class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(flutterEngine!!) GeneratedPluginRegistrant.registerWith(flutterEngine!!)
// 初始化 Umeng SDK
UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null)
MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result -> MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result ->
if (call.method == "loadNativeShare") { if (call.method == "loadNativeShare") {
val map = call.arguments as Map<String, String> val map = call.arguments as Map<String, String>

View File

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

View File

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

View File

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

View File

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

View File

@ -133,6 +133,9 @@ class F {
static StarLockAMapKey get aMapKey { static StarLockAMapKey get aMapKey {
switch (appFlavor) { switch (appFlavor) {
case Flavor.local: case Flavor.local:
return const StarLockAMapKey(
androidKey: '9388ca47f9674b447a17eff82bc0e2ea',
iosKey: 'cdec0512564baa58be26b2e2ac5ef3b7');
case Flavor.dev: case Flavor.dev:
return const StarLockAMapKey( return const StarLockAMapKey(
androidKey: 'b56b681ee89f4db43a5aa1879ae8cbfe', 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/forgetPassword/starLock_forgetPassword_state.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.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 '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart'; import '../../tools/baseGetXController.dart';
import '../../tools/dateTool.dart';
import '../../tools/regularExpression.dart'; import '../../tools/regularExpression.dart';
import '../../tools/showTipView.dart'; import '../../tools/showTipView.dart';
import '../register/entity/checkIP_entity.dart'; import '../register/entity/checkIP_entity.dart';
@ -53,8 +55,20 @@ class StarLockForgetPasswordLogic extends BaseGetXController {
'B748F838-94EE-4BDB-A0E6-7B2D16849792', 'B748F838-94EE-4BDB-A0E6-7B2D16849792',
state.verificationCode.value); state.verificationCode.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('resetPassword_result', {
'account':state.phoneStr.value,
'date':DateTool().getNowDateWithType(1),
'resetPassword_res':'成功',
});
showToast('重置成功'.tr); showToast('重置成功'.tr);
Get.back(); 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/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart'; import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/baseGetXController.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 '../../main/lockMian/lockMain/lockMain_logic.dart';
import '../../mine/mine/starLockMine_logic.dart'; import '../../mine/mine/starLockMine_logic.dart';
import '../../network/api_repository.dart'; import '../../network/api_repository.dart';
import '../../tools/dateTool.dart';
import '../../tools/eventBusEventManage.dart'; import '../../tools/eventBusEventManage.dart';
import '../../tools/showTipView.dart'; import '../../tools/showTipView.dart';
import '../../tools/storage.dart'; import '../../tools/storage.dart';
@ -49,6 +51,12 @@ class StarLockLoginLogic extends BaseGetXController {
username: state.emailOrPhone.value, username: state.emailOrPhone.value,
deviceInfo: state.deviceInfoMap); deviceInfo: state.deviceInfoMap);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('login_result', {
'account':state.emailOrPhone.value,
'date':DateTool().getNowDateWithType(1),
'login_res':'成功',
});
Storage.saveLoginData(entity.data); Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1); Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI()); eventBus.fire(MineInfoChangeRefreshUI());
@ -57,6 +65,12 @@ class StarLockLoginLogic extends BaseGetXController {
} }
Get.offNamedUntil(Routers.starLockMain, (Route route) => false); Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); // 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/eventBusEventManage.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.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/regularExpression.dart'; import '../../tools/regularExpression.dart';
import '../../tools/showTipView.dart'; import '../../tools/showTipView.dart';
import 'entity/checkIP_entity.dart'; import 'entity/checkIP_entity.dart';
@ -59,12 +61,24 @@ class StarLockRegisterLogic extends BaseGetXController {
verificationCode: state.verificationCode.value, verificationCode: state.verificationCode.value,
deviceInfo: state.deviceInfoMap.value); deviceInfo: state.deviceInfoMap.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
UmengCommonSdk.onEvent('register_result', {
'account':state.phoneOrEmailStr.value,
'date':DateTool().getNowDateWithType(1),
'register_res':'成功',
});
Storage.saveLoginData(entity.data); Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1); Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI()); eventBus.fire(MineInfoChangeRefreshUI());
XSJPushProvider().initLocalNotification(isCancelLocalPush: false); XSJPushProvider().initLocalNotification(isCancelLocalPush: false);
Get.offNamedUntil(Routers.starLockMain, (Route route) => false); Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); // 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/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import 'app.dart'; import 'app.dart';
import 'app_settings/app_settings.dart'; import 'app_settings/app_settings.dart';
@ -73,6 +74,9 @@ Future<void> _setCommonServices() async {
// //
Future<void> privacySDKInitialization() async { Future<void> privacySDKInitialization() async {
UmengCommonSdk.initCommon('671244cf80464b33f6df9648', '671244ae80464b33f6df9646', 'Product');
UmengCommonSdk.setPageCollectionModeManual();
await Get.putAsync(() => PlatformInfoService().init()); await Get.putAsync(() => PlatformInfoService().init());
await BuglyTool.init(); await BuglyTool.init();
// JPush服务 // 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/NativeInteractionTool.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_transferPermissions.dart'; import '../../../../blue/io_protocol/io_transferPermissions.dart';
@ -34,86 +35,84 @@ class AuthorizedAdminLogic extends BaseGetXController {
int? keyId; int? keyId;
// //
late StreamSubscription<Reply> _replySubscription; // late StreamSubscription<Reply> _replySubscription;
// void _initReplySubscription() {
void _initReplySubscription() { // _replySubscription =
_replySubscription = // EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async { // //
// // if (reply is TransferPermissionsReply) {
if (reply is TransferPermissionsReply) { // final List<int> token = reply.data.sublist(2, 6);
final List<int> token = reply.data.sublist(2, 6); // final List<String> saveStrList = changeIntListToStringList(token);
final List<String> saveStrList = changeIntListToStringList(token); // Storage.setStringList(saveBlueToken, saveStrList);
Storage.setStringList(saveBlueToken, saveStrList); //
// final int status = reply.data[6];
final int status = reply.data[6]; // switch (status) {
// case 0x00:
switch (status) { // //
case 0x00: // break;
// // case 0x06:
break; // //
case 0x06: // final List<String>? privateKey =
// // await Storage.getStringList(saveBluePrivateKey);
final List<String>? privateKey = // final List<int> getPrivateKeyList =
await Storage.getStringList(saveBluePrivateKey); // changeStringListToIntList(privateKey!);
final List<int> getPrivateKeyList = //
changeStringListToIntList(privateKey!); // final List<String>? publicKey =
// await Storage.getStringList(saveBluePublicKey);
final List<String>? publicKey = // final List<int> publicKeyDataList =
await Storage.getStringList(saveBluePublicKey); // changeStringListToIntList(publicKey!);
final List<int> publicKeyDataList = //
changeStringListToIntList(publicKey!); // final List<String>? token =
// await Storage.getStringList(saveBlueToken);
final List<String>? token = // final List<int> getTokenList = changeStringListToIntList(token!);
await Storage.getStringList(saveBlueToken); //
final List<int> getTokenList = changeStringListToIntList(token!); // IoSenderManage.senderFactoryDataReset(
// lockID: BlueManage().connectDeviceName,
IoSenderManage.senderFactoryDataReset( // userID: await Storage.getUid(),
lockID: BlueManage().connectDeviceName, // keyID: '1',
userID: await Storage.getUid(), // needAuthor: 1,
keyID: '1', // publicKey: publicKeyDataList,
needAuthor: 1, // privateKey: getPrivateKeyList,
publicKey: publicKeyDataList, // token: getTokenList);
privateKey: getPrivateKeyList, // break;
token: getTokenList); // default:
break; // break;
default: // }
break; // }
} // });
} // }
});
}
// //
Future<void> transferPermissionsAction() async { // Future<void> transferPermissionsAction() async {
BlueManage().blueSendData(BlueManage().connectDeviceName, // BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState state) async { // (BluetoothConnectionState state) async {
if (state == BluetoothConnectionState.connected) { // if (state == BluetoothConnectionState.connected) {
final List<String>? privateKey = // final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey); // await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = // final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!); // changeStringListToIntList(privateKey!);
//
final List<String>? publicKey = // final List<String>? publicKey =
await Storage.getStringList(saveBluePublicKey); // await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList = // final List<int> publicKeyDataList =
changeStringListToIntList(publicKey!); // changeStringListToIntList(publicKey!);
//
final List<String>? token = await Storage.getStringList(saveBlueToken); // final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!); // final List<int> getTokenList = changeStringListToIntList(token!);
//
IoSenderManage.senderTransferPermissions( // IoSenderManage.senderTransferPermissions(
lockID: BlueManage().connectDeviceName, // lockID: BlueManage().connectDeviceName,
authUserID: await Storage.getUid(), // authUserID: await Storage.getUid(),
keyID: '1', // keyID: '1',
oldUserID: await Storage.getUid(), // oldUserID: await Storage.getUid(),
newUserID: '100002', // newUserID: '100002',
needAuthor: 1, // needAuthor: 1,
publicKey: publicKeyDataList, // publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
token: getTokenList); // token: getTokenList);
} // }
}); // });
} // }
// //
Future<void> sendElectronicKeyRequest() async { Future<void> sendElectronicKeyRequest() async {
@ -223,7 +222,15 @@ class AuthorizedAdminLogic extends BaseGetXController {
idCardNumber: state.isRequireAuth.value == true idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text ? state.idCardController.text
: ''); : '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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.createUser.value = 0;
state.isSendSuccess.value = true; state.isSendSuccess.value = true;
state.addUserId.value = entity.data!.receiverUser!.id.toString(); state.addUserId.value = entity.data!.receiverUser!.id.toString();
@ -238,6 +245,13 @@ class AuthorizedAdminLogic extends BaseGetXController {
state.createUser.value = 1; state.createUser.value = 1;
sendElectronicKeyRequest(); 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() { void onReady() {
super.onReady(); super.onReady();
_initReplySubscription(); // _initReplySubscription();
} }
@override @override
void onClose() { 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/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/card/addICCard/addICCard_entity.dart'; import 'package:star_lock/main/lockDetail/card/addICCard/addICCard_entity.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.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/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/bugly/bugly_tool.dart';
import '../../../../tools/dateTool.dart'; import '../../../../tools/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart'; import '../../../../tools/storage.dart';
@ -41,6 +43,11 @@ class AddICCardLogic extends BaseGetXController{
Future<void> _replyAddICCardBegin(Reply reply) async { Future<void> _replyAddICCardBegin(Reply reply) async {
final int status = reply.data[2]; final int status = reply.data[2];
BuglyTool.uploadException(
message: '添加卡开始,解析数据',
detail: '添加卡开始,解析数据 _replyAddICCardBegin:${reply.data}',
upload: false
);
switch(status){ switch(status){
case 0x00: case 0x00:
@ -101,10 +108,24 @@ class AddICCardLogic extends BaseGetXController{
Future<void> _replyAddICCardConfirmation(Reply reply) async { Future<void> _replyAddICCardConfirmation(Reply reply) async {
final int status = reply.data[2]; final int status = reply.data[2];
state.ifAddState.value = false; state.ifAddState.value = false;
BuglyTool.uploadException(
message: '添加卡结果,解析数据',
detail: '添加卡结果,解析数据 _replyAddICCardConfirmation:${reply.data}',
eventStr: '添加卡事件结果',
upload: true
);
final String getMobile = (await Storage.getMobile())!;
switch(status){ switch(status){
case 0x00: 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]){ switch(reply.data[5]){
case 0xff: case 0xff:
// //
@ -139,28 +160,69 @@ class AddICCardLogic extends BaseGetXController{
break; break;
default: 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; break;
} }
} }
// //
Future<void> senderAddICCard() async { 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); Get.close(1);
}); });
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){ if (deviceConnectionState == BluetoothConnectionState.connected){
cancelBlueConnetctToastTimer(); 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( IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:'1', keyID:'1',
userID:await Storage.getUid(), userID:await Storage.getUid(),
@ -182,6 +244,21 @@ class AddICCardLogic extends BaseGetXController{
isBeforeAddUser: false isBeforeAddUser: false
); );
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){ } 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){ if(state.ifCurrentScreen.value == true){
showBlueConnetctToast(); showBlueConnetctToast();
} }

View File

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

View File

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

View File

@ -68,4 +68,5 @@ class DoorLockLogState {
bool ifHaveNext = false; // bool ifHaveNext = false; //
int logCountPage = 10; // int logCountPage = 10; //
Rx<DateTime> currentSelectDate = DateTime.now().obs; 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/showCupertinoAlertView.dart';
import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.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 { class SendElectronicKeyViewLogic extends BaseGetXController {
SendElectronicKeyViewLogic(this.type); SendElectronicKeyViewLogic(this.type);
@ -180,7 +183,15 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
idCardNumber: state.isRequireAuth.value == true idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text ? state.idCardController.text
: ''); : '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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; emailOrPhone = state.emailOrPhoneController.text;
state.createUser.value = 0; state.createUser.value = 0;
state.isSendSuccess = true; state.isSendSuccess = true;
@ -190,6 +201,13 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
update(); update();
eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(ElectronicKeyListRefreshUI());
} else { } 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; emailOrPhone = null;
if (entity.errorCode == 425) { if (entity.errorCode == 425) {
// //

View File

@ -3,9 +3,11 @@ 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/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.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/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../blue/blue_manage.dart'; import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_reply.dart'; import '../../../../../blue/io_reply.dart';
@ -17,6 +19,7 @@ import '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/eventBusEventManage.dart'; import '../../../../../tools/eventBusEventManage.dart';
import '../../../../../tools/storage.dart'; import '../../../../../tools/storage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
import '../../../../tools/bugly/bugly_tool.dart';
import 'addFingerprint_state.dart'; import 'addFingerprint_state.dart';
class AddFingerprintLogic extends BaseGetXController { class AddFingerprintLogic extends BaseGetXController {
@ -44,8 +47,13 @@ class AddFingerprintLogic extends BaseGetXController {
} }
Future<void> _replyAddFingerprintBegin(Reply reply) async { 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){ switch(status){
case 0x00: case 0x00:
// //
@ -102,8 +110,12 @@ class AddFingerprintLogic extends BaseGetXController {
} }
Future<void> _replyAddFingerprintProcess(Reply reply) async { Future<void> _replyAddFingerprintProcess(Reply reply) async {
BuglyTool.uploadException(
message: '添加指纹过程,解析数据',
detail: '添加指纹过程,解析数据 _replyAddFingerprintProcess:${reply.data}',
upload: false
);
final int status = reply.data[2]; final int status = reply.data[2];
switch(status){ switch(status){
case 0x00: case 0x00:
// //
@ -154,13 +166,27 @@ class AddFingerprintLogic extends BaseGetXController {
Future<void> _replyAddFingerprintConfirmation(Reply reply) async { Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
final int status = reply.data[2]; final int status = reply.data[2];
final String getMobile = (await Storage.getMobile())!;
switch(status){ switch(status){
case 0x00: case 0x00:
// //
// var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString(); // var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
final List<int> fingerprintList = reply.data.sublist(reply.data.length - 2); UmengCommonSdk.onEvent('add_fingerprint', {
final String fingerprintNum = listChangInt(fingerprintList).toString(); 'lock_name':BlueManage().connectDeviceName,
state.regIndex.value++; '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){ if(state.fingerprintNumber.value == fingerprintNum){
return; return;
}else{ }else{
@ -177,6 +203,19 @@ class AddFingerprintLogic extends BaseGetXController {
break; break;
default: 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; state.ifAddState.value = false;
break; break;
} }
@ -184,7 +223,50 @@ class AddFingerprintLogic extends BaseGetXController {
// //
Future<void> senderAddFingerprint() async { 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); Get.close(1);
}); });
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
@ -219,6 +301,21 @@ class AddFingerprintLogic extends BaseGetXController {
isBeforeAddUser: false isBeforeAddUser: false
); );
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){ }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){ if(state.ifCurrentScreen.value == true){
showBlueConnetctToast(); showBlueConnetctToast();
} }
@ -277,6 +374,20 @@ class AddFingerprintLogic extends BaseGetXController {
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString()); 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/bugly/bugly_tool.dart';
import 'package:star_lock/tools/throttler.dart'; import 'package:star_lock/tools/throttler.dart';
import 'package:star_lock/widget/permission/permission_dialog.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 '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
@ -26,6 +27,7 @@ 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/commonDataManage.dart'; import '../../../tools/commonDataManage.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 '../lockOperatingRecord/keyOperationRecord_entity.dart';
@ -67,6 +69,16 @@ class LockDetailLogic extends BaseGetXController {
detail: '开锁结果,解析数据 _replyOpenLock:${reply.data}', detail: '开锁结果,解析数据 _replyOpenLock:${reply.data}',
upload: true); 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) { switch (status) {
case 0x00: case 0x00:
// //
@ -363,7 +375,15 @@ class LockDetailLogic extends BaseGetXController {
showBlueConnetctToastTimer( showBlueConnetctToastTimer(
outTimer: 20, 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(); resetOpenDoorState();
blueManageDisconnect(); blueManageDisconnect();
BuglyTool.uploadException( BuglyTool.uploadException(
@ -399,6 +419,16 @@ class LockDetailLogic extends BaseGetXController {
message: '蓝牙连接失败-开锁失败', message: '蓝牙连接失败-开锁失败',
detail: '蓝牙连接失败,断开连接, 开锁失败--OpenLockCommand:$command', detail: '蓝牙连接失败,断开连接, 开锁失败--OpenLockCommand:$command',
upload: true); 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) { if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast(); showBlueConnetctToast();
} }

View File

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

@ -84,6 +84,29 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
}, },
child: Column( child: Column(
children: <Widget>[ 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()), Expanded(child: _buildMainUI()),
], ],
), ),
@ -275,7 +298,6 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
@override @override
void didChangeDependencies() { void didChangeDependencies() {
super.didChangeDependencies(); super.didChangeDependencies();
/// ///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
} }
@ -299,7 +321,9 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
void didPop() { void didPop() {
super.didPop(); super.didPop();
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false; state.ifCurrentScreen.value = false;
} }
@ -315,7 +339,9 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> with
void didPushNext() { void didPushNext() {
super.didPushNext(); super.didPushNext();
logic.cancelBlueConnetctToastTimer(); logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false; 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:get/get.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.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/blue_manage.dart';
import '../../../../blue/io_protocol/io_factoryDataReset.dart'; import '../../../../blue/io_protocol/io_factoryDataReset.dart';
@ -19,6 +20,7 @@ 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/commonDataManage.dart'; import '../../../../tools/commonDataManage.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart'; import '../../../../tools/storage.dart';
import 'checkingInInfoData_entity.dart'; import 'checkingInInfoData_entity.dart';
@ -287,7 +289,16 @@ class LockSetLogic extends BaseGetXController {
showEasyLoading(); showEasyLoading();
showBlueConnetctToastTimer( showBlueConnetctToastTimer(
isShowBlueConnetctToast: false, 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(); dismissEasyLoading();
showDeletAlertTipDialog(); showDeletAlertTipDialog();
}); });
@ -316,6 +327,15 @@ class LockSetLogic extends BaseGetXController {
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: getTokenList); token: getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) { } 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(); dismissEasyLoading();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) { if (state.ifCurrentScreen.value == true) {
@ -568,7 +588,16 @@ class LockSetLogic extends BaseGetXController {
final LockListInfoEntity entity = await ApiRepository.to.deletOwnerLockData( final LockListInfoEntity entity = await ApiRepository.to.deletOwnerLockData(
lockId: state.lockSetInfoData.value.lockId!, lockId: state.lockSetInfoData.value.lockId!,
); );
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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 = ''; BlueManage().connectDeviceMacAddress = '';
final bool isOnlyOneData = state.isOnlyOneData.value == true; final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200)) await Future<dynamic>.delayed(const Duration(milliseconds: 200))
@ -578,6 +607,14 @@ class LockSetLogic extends BaseGetXController {
SchedulerBinding.instance.addPostFrameCallback((_) { SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent()); 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(), keyId: state.lockSetInfoData.value.lockBasicInfo!.keyId.toString(),
includeUnderlings: includeUnderlings:
state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0); state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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 = ''; BlueManage().connectDeviceMacAddress = '';
final bool isOnlyOneData = state.isOnlyOneData.value == true; final bool isOnlyOneData = state.isOnlyOneData.value == true;
await Future<dynamic>.delayed(const Duration(milliseconds: 200)) await Future<dynamic>.delayed(const Duration(milliseconds: 200))
@ -598,6 +644,14 @@ class LockSetLogic extends BaseGetXController {
SchedulerBinding.instance.addPostFrameCallback((_) { SchedulerBinding.instance.addPostFrameCallback((_) {
eventBus.fire(RefreshLockListInfoDataEvent()); 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/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/eventBusEventManage.dart'; import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_modelVendor.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/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart'; import '../../../../blue/sender_manage.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../../tools/bugly/bugly_tool.dart';
import '../../../../tools/commonDataManage.dart'; import '../../../../tools/commonDataManage.dart';
import '../../../../tools/dateTool.dart'; import '../../../../tools/dateTool.dart';
import '../../../../tools/storage.dart'; import '../../../../tools/storage.dart';
@ -178,7 +180,15 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
endDate: getFailureDateTime, endDate: getFailureDateTime,
addType: '1', addType: '1',
pwdRight: state.isAdministrator.value == true ? 1 : 0); pwdRight: state.isAdministrator.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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.isSendSuccess.value = true;
state.sendSucceedType.value = state.widgetType.value; state.sendSucceedType.value = state.widgetType.value;
state.pwdNameStr = state.nameController.text; state.pwdNameStr = state.nameController.text;
@ -189,6 +199,12 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
updatePWDNumberRequest(entity.data!.keyboardPwdId.toString()); updatePWDNumberRequest(entity.data!.keyboardPwdId.toString());
} }
} else { } 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}'); showToast('${entity.errorMsg}');
} }
} }
@ -228,11 +244,16 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// //
if ((reply is SenderCustomPasswordsReply) && if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
(state.ifCurrentScreen.value == true)) { BuglyTool.uploadException(
message: '添加密码结果,解析数据',
detail: '添加密码结果,解析数据:${reply.data}',
eventStr: '添加密码事件结果',
upload: true
);
final int status = reply.data[2]; final int status = reply.data[2];
switch (status) { switch (status) {
case 0x00: case 0x00:
@ -369,22 +390,60 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
} }
state.sureBtnState.value = 1; 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(); 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(); dismissEasyLoading();
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
}); });
BlueManage().blueSendData(BlueManage().connectDeviceName, BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async { (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) { if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? signKey = final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!); final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
await Storage.getStringList(saveBluePrivateKey); final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
@ -404,8 +463,22 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
signKey: signKeyDataList, signKey: signKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: getTokenList); token: getTokenList);
} else if (deviceConnectionState == } else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
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(); dismissEasyLoading();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0; 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/main/lockDetail/lockDetail/lockDetail_logic.dart';
import 'package:star_lock/mine/addLock/saveLock/entity/SaveLockEntity.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 '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
@ -17,6 +18,7 @@ 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/commonDataManage.dart'; import '../../../tools/commonDataManage.dart';
import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../tools/storage.dart'; import '../../../tools/storage.dart';
import 'saveLock_state.dart'; import 'saveLock_state.dart';
@ -404,8 +406,14 @@ class SaveLockLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.lockId = entity.data!.lockId!; 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(); backAction();
// await senderCustomPasswords(); // await senderCustomPasswords();
// BlueManage().disconnect(BlueManage().connectDeviceMacAddress); // BlueManage().disconnect(BlueManage().connectDeviceMacAddress);
@ -413,6 +421,14 @@ class SaveLockLogic extends BaseGetXController {
// Get.close(state.isFromMap == 1 ? 5 : 6); // Get.close(state.isFromMap == 1 ? 5 : 6);
} else { } else {
state.sureBtnState.value = 0; 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/showCupertinoAlertView.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/versionUndate/versionUndate_entity.dart'; import 'package:star_lock/versionUndate/versionUndate_entity.dart';
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../app_settings/app_settings.dart'; import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../talk/udp/udp_help.dart'; import '../../../talk/udp/udp_help.dart';
import '../../../tools/dateTool.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../tools/store_service.dart'; import '../../../tools/store_service.dart';
import '../../../translations/app_dept.dart'; import '../../../translations/app_dept.dart';
@ -130,7 +132,15 @@ class MineSetLogic extends BaseGetXController {
}); });
final LoginEntity entity = final LoginEntity entity =
await ApiRepository.to.userLogout(deviceld: getPushDeviceID); await ApiRepository.to.userLogout(deviceld: getPushDeviceID);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) { 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(); UdpHelp().closeUDP();
logOut(); logOut();
@ -140,6 +150,13 @@ class MineSetLogic extends BaseGetXController {
BlueManage().disconnect(); BlueManage().disconnect();
XSJPushProvider().initLocalNotification(isCancelLocalPush: true); XSJPushProvider().initLocalNotification(isCancelLocalPush: true);
Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false); 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, height: height,
child: ValueListenableBuilder<DateTime>( child: ValueListenableBuilder<DateTime>(
valueListenable: _controller, valueListenable: _controller,
builder: (_, DateTime selectedDate, __) { builder: (_, selectedDate, __) {
AppLog.log('****selectedDate: $selectedDate'); // AppLog.log('****selectedDate: $selectedDate');
eventBus.fire(DoorLockLogListRefreshUI(selectedDate));
return Stack( return Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: <Widget>[ children: <Widget>[
@ -253,6 +252,7 @@ class _AdvancedCalendarState extends State<AdvancedCalendar>
); );
} }
_monthViewCurrentPage.value = pageIndex; _monthViewCurrentPage.value = pageIndex;
AppLog.log('调用onPageChanged');
}, },
controller: _monthPageController, controller: _monthPageController,
physics: _animationController.value == 1.0 physics: _animationController.value == 1.0
@ -390,6 +390,8 @@ class _AdvancedCalendarState extends State<AdvancedCalendar>
void _handleDateChanged(DateTime date) { void _handleDateChanged(DateTime date) {
_controller.value = date; _controller.value = date;
AppLog.log('点击日期了');
eventBus.fire(DoorLockLogListRefreshUI(date));
} }
void _handleFinishDrag() async { void _handleFinishDrag() async {

View File

@ -65,6 +65,7 @@ class BuglyTool {
required String message, required String message,
required String detail, required String detail,
required bool upload, required bool upload,
String eventStr = '开门事件',
bool begin = false, bool begin = false,
Map? data, Map? data,
}) async { }) async {
@ -80,7 +81,7 @@ class BuglyTool {
// AppLog.log('message:${(await Storage.getMobile())!.isNotEmpty ? (await Storage.getMobile()) : (await Storage.getEmail())}+$time --- 开门事件 detail:$uploadStr'); // 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); // 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.79+2024083001测试开完锁数据上传功能 # 1.0.79+2024083001测试开完锁数据上传功能
# 1.0.81+2024092901添加开锁数据收集功能 # 1.0.81+2024092901添加开锁数据收集功能
# 1.0.82+2024093001优化开锁数据收集功能
# 1.0.85+2024120301完善网关功能 # 1.0.85+2024120301完善网关功能
# 1.0.85+2024120401修复网关问题打包给谢敬调试 # 1.0.85+2024120401修复网关问题打包给谢敬调试
@ -238,7 +239,7 @@ dependencies:
# audio_service: ^0.18.12 # audio_service: ^0.18.12
app_settings: ^5.1.1 app_settings: ^5.1.1
flutter_local_notifications: ^17.0.0 flutter_local_notifications: ^17.0.0
fluwx: ^4.5.5 fluwx: 4.5.5
system_settings: ^2.0.0 system_settings: ^2.0.0
expandable: ^5.0.1 expandable: ^5.0.1
colorfilter_generator: ^0.0.8 colorfilter_generator: ^0.0.8
@ -248,6 +249,7 @@ dependencies:
flutter_bugly: ^1.0.2 flutter_bugly: ^1.0.2
open_filex: ^4.4.0 open_filex: ^4.4.0
umeng_common_sdk: 1.2.7
dependency_overrides: dependency_overrides:
#强制设置google_maps_flutter_ios 为 2.5.2 #强制设置google_maps_flutter_ios 为 2.5.2