diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index afb5fd51..24086c3f 100755
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -22,7 +22,8 @@
-
+
+
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 0aeb6030..3ffb1e4d 100755
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -36,6 +36,7 @@ PODS:
- Flutter
- auto_orientation (0.0.1):
- Flutter
+ - Bugly (2.6.1)
- camera_avfoundation (0.0.1):
- Flutter
- connectivity_plus (0.0.1):
@@ -81,6 +82,9 @@ PODS:
- Flutter (1.0.0)
- flutter_blue_plus (0.0.1):
- Flutter
+ - flutter_bugly_plugin (0.0.1):
+ - Bugly
+ - Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_native_contact_picker (0.0.1):
@@ -170,6 +174,7 @@ DEPENDENCIES:
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`)
+ - flutter_bugly_plugin (from `.symlinks/plugins/flutter_bugly_plugin/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
@@ -205,6 +210,7 @@ SPEC REPOS:
- AMap3DMap
- AMapFoundation
- AMapLocation
+ - Bugly
- DKImagePickerController
- DKPhotoGallery
- GoogleMaps
@@ -248,6 +254,8 @@ EXTERNAL SOURCES:
:path: Flutter
flutter_blue_plus:
:path: ".symlinks/plugins/flutter_blue_plus/ios"
+ flutter_bugly_plugin:
+ :path: ".symlinks/plugins/flutter_bugly_plugin/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_native_contact_picker:
@@ -309,6 +317,7 @@ SPEC CHECKSUMS:
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
+ Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
camera_avfoundation: 759172d1a77ae7be0de08fc104cfb79738b8a59e
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
@@ -318,6 +327,7 @@ SPEC CHECKSUMS:
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96
+ flutter_bugly_plugin: d2db6d6641938269fa538575126e8ff530ee02c7
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
diff --git a/lib/app_settings/app_settings.dart b/lib/app_settings/app_settings.dart
index 04bbe53d..f03b8cf1 100755
--- a/lib/app_settings/app_settings.dart
+++ b/lib/app_settings/app_settings.dart
@@ -23,7 +23,8 @@ class AppLog {
// if(!_printLog)return;
// if(_onlyError && !error) return;
if (error) {
- msg = '----->>> $msg $stackTrace';
+ final bool stackTraceIsNull = stackTrace != null;
+ msg = '----->>> $msg ${stackTraceIsNull ? '\n$stackTrace' : ''}';
}
Get.log(msg);
}
diff --git a/lib/flavors.dart b/lib/flavors.dart
index 9d350755..2eb513d9 100755
--- a/lib/flavors.dart
+++ b/lib/flavors.dart
@@ -86,7 +86,7 @@ class F {
switch (appFlavor) {
case Flavor.local:
return 'https://ge.lock.star-lock.cn'; // 葛工
- // return 'http://192.168.1.15:8022'; // 谢工
+ // return 'http://192.168.1.15:8022'; // 谢工
case Flavor.dev:
return 'https://dev.lock.star-lock.cn';
case Flavor.pre:
@@ -95,7 +95,7 @@ class F {
return 'https://lock.skychip.top';
case Flavor.xhj:
return 'https://lock.xhjcn.ltd';
- // return 'https://pre.lock.star-lock.cn';
+ // return 'https://pre.lock.star-lock.cn';
default:
throw Exception('flavor[$name] apiPrefix not found');
}
@@ -125,4 +125,19 @@ class F {
throw Exception('flavor[$name] aMapKey not found');
}
}
+
+ // 是否是生产环境
+ static bool get isProductionEnv {
+ switch (appFlavor) {
+ case Flavor.local:
+ case Flavor.dev:
+ case Flavor.pre:
+ return false;
+ case Flavor.sky:
+ case Flavor.xhj:
+ return true;
+ default:
+ return false;
+ }
+ }
}
diff --git a/lib/main.dart b/lib/main.dart
index 8b2c3710..b0647eda 100755
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,9 +1,12 @@
import 'dart:async';
+import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
+import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:get/get.dart';
import 'package:star_lock/flavors.dart';
+import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/device_info_service.dart';
import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/translations/trans_lib.dart';
@@ -21,18 +24,9 @@ FutureOr main() async {
// 设置国际化信息
await _initTranslation();
- //错误日志监控
- FlutterError.onError = (FlutterErrorDetails details) async {
- AppLog.log('error:${details.exception.toString()}',
- stackTrace: details.stack, error: true);
- Zone.current.handleUncaughtError(details.exception, details.stack!);
- };
-
- //错误日志监控
- runZonedGuarded>(() async {
+ // bugly错误日志监控
+ BuglyTool.init(() {
runApp(const MyApp());
- }, (Object error, StackTrace stackTrace) async {
- AppLog.log('error:$error', stackTrace: stackTrace, error: true);
});
if (AppPlatform.isAndroid) {
diff --git a/lib/tools/bugly/bugly_tool.dart b/lib/tools/bugly/bugly_tool.dart
new file mode 100644
index 00000000..3864b1d2
--- /dev/null
+++ b/lib/tools/bugly/bugly_tool.dart
@@ -0,0 +1,51 @@
+import 'dart:async';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
+import 'package:star_lock/app_settings/app_settings.dart';
+import 'package:star_lock/flavors.dart';
+
+///
+/// 错误日志监控
+///
+///
+class BuglyTool {
+ static Future init(Function on) async {
+ if (F.isProductionEnv) {
+ //生产
+ await FlutterBuglyPlugin.init(
+ appIdAndroid: '73c99cca00',
+ appIdiOS: 'b25632a54f',
+ );
+ } else {
+ //测试
+ await FlutterBuglyPlugin.init(
+ appIdAndroid: '02fb541c1c',
+ appIdiOS: '618ab9feeb',
+ );
+ }
+
+ //错误日志监控
+ FlutterError.onError = (FlutterErrorDetails details) async {
+ AppLog.log('error:${details.exception.toString()}',
+ stackTrace: details.stack, error: true);
+ Zone.current.handleUncaughtError(
+ details.exception, details.stack ?? StackTrace.empty);
+ };
+
+ //错误日志监控
+ PlatformDispatcher.instance.onError = (Object error, StackTrace stack) {
+ FlutterBuglyPlugin.reportException(
+ exceptionName: error.toString(), reason: stack.toString());
+ AppLog.log('error:$error', stackTrace: stack, error: true);
+ return true;
+ };
+
+ //错误日志监控
+ runZonedGuarded>(() async => on(),
+ (Object error, StackTrace stackTrace) async {
+ AppLog.log('error:$error', stackTrace: stackTrace, error: true);
+ });
+ }
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index e9487b95..00210fe1 100755
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -191,6 +191,8 @@ dependencies:
expandable: ^5.0.1
colorfilter_generator: ^0.0.8
file_picker: ^5.3.1
+ # 错误日志监控
+ flutter_bugly_plugin: ^0.0.9
dependency_overrides: