main.dart 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import 'dart:async';
  2. import 'dart:isolate';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_localizations/flutter_localizations.dart';
  6. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  7. import 'package:logger/logger.dart';
  8. import 'package:lszlgl/network/base_dio.dart';
  9. import 'package:lszlgl/router/my_navigator.dart';
  10. import 'package:lszlgl/utils/location_utils.dart';
  11. import 'package:lszlgl/utils/sp_utils.dart';
  12. import 'config/reresh_config.dart';
  13. late Logger logger;
  14. void main() async {
  15. initReportException(() async {
  16. logger = Logger(printer: PrettyPrinter(methodCount: 0));
  17. SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(statusBarColor: Colors.transparent));
  18. SystemChrome.setPreferredOrientations([
  19. DeviceOrientation.portraitUp,
  20. DeviceOrientation.portraitDown,
  21. ]);
  22. BaseDio.get().init();
  23. await SPUtils.getInstance().init();
  24. RefreshConfig.get().initDefault();
  25. LocationUtils.updatePrivacyShow(true, true);
  26. LocationUtils.updatePrivacyAgree(true);
  27. LocationUtils.setApiKey('2c783509376e267b24d63b21681686fa', '');
  28. runApp(const MyApp());
  29. });
  30. }
  31. /// 初始化异常上报 封装[runZonedGuarded]
  32. void initReportException(Function() callback) {
  33. runZonedGuarded(() {
  34. // 初始化Flutter
  35. WidgetsFlutterBinding.ensureInitialized();
  36. // 隔离线程异常
  37. Isolate.current.addErrorListener(RawReceivePort((dynamic pair) {
  38. var isolateError = pair as List<dynamic>;
  39. onError(isolateError.first, isolateError.last);
  40. }).sendPort);
  41. // 捕获Flutter异常
  42. FlutterError.onError = (FlutterErrorDetails error) {
  43. FlutterError.presentError(error);
  44. onError(error.exception, error.stack);
  45. };
  46. // 回调外部方法
  47. callback.call();
  48. }, (error, stack) {
  49. // 捕获程序异常
  50. onError(error, stack);
  51. });
  52. }
  53. /// 上报异常
  54. Future<void> onError(Object exception, StackTrace? stack) async {
  55. if (stack == null) return;
  56. logger.e('error:${exception.runtimeType.toString()}\n${exception.toString()}\n${stack.toString()}');
  57. }
  58. class MyApp extends StatelessWidget {
  59. const MyApp({super.key});
  60. @override
  61. Widget build(BuildContext context) {
  62. return MaterialApp(
  63. title: '粮食质量管理',
  64. theme: ThemeData(
  65. colorScheme: ColorScheme.fromSeed(
  66. seedColor: Colors.blue,
  67. ),
  68. scaffoldBackgroundColor: const Color(0xFFF5F5F5),
  69. // navigationBarTheme: const NavigationBarThemeData(height: 56),
  70. appBarTheme: const AppBarTheme(
  71. centerTitle: true,
  72. foregroundColor: Colors.white,
  73. backgroundColor: Colors.transparent,
  74. systemOverlayStyle: SystemUiOverlayStyle.light,
  75. ),
  76. bottomSheetTheme: const BottomSheetThemeData(
  77. backgroundColor: Colors.white,
  78. modalBackgroundColor: Colors.white,
  79. surfaceTintColor: Colors.white,
  80. ),
  81. useMaterial3: true,
  82. ),
  83. builder: FlutterSmartDialog.init(),
  84. localizationsDelegates: const [
  85. GlobalMaterialLocalizations.delegate,
  86. GlobalCupertinoLocalizations.delegate,
  87. GlobalWidgetsLocalizations.delegate,
  88. ],
  89. supportedLocales: const [Locale('zh')],
  90. navigatorKey: MyNavigator.navigator,
  91. onGenerateRoute: MyNavigator.generateRoute,
  92. navigatorObservers: [
  93. MyNavigator.navigatorObs,
  94. MyNavigator.routeObs,
  95. FlutterSmartDialog.observer,
  96. ],
  97. );
  98. }
  99. }
  100. class MyHomePage extends StatefulWidget {
  101. const MyHomePage({super.key, required this.title});
  102. final String title;
  103. @override
  104. State<MyHomePage> createState() => _MyHomePageState();
  105. }
  106. class _MyHomePageState extends State<MyHomePage> {
  107. int _counter = 0;
  108. void _incrementCounter() {
  109. setState(() {
  110. _counter++;
  111. });
  112. }
  113. @override
  114. Widget build(BuildContext context) {
  115. return Scaffold(
  116. appBar: AppBar(
  117. backgroundColor: Theme.of(context).colorScheme.inversePrimary,
  118. title: Text(widget.title),
  119. ),
  120. body: Center(
  121. child: Column(
  122. mainAxisAlignment: MainAxisAlignment.center,
  123. children: <Widget>[
  124. const Text(
  125. 'You have pushed the button this many times:',
  126. ),
  127. Text(
  128. '$_counter',
  129. style: Theme.of(context).textTheme.headlineMedium,
  130. ),
  131. ],
  132. ),
  133. ),
  134. floatingActionButton: FloatingActionButton(
  135. onPressed: _incrementCounter,
  136. tooltip: 'Increment',
  137. child: const Icon(Icons.add),
  138. ),
  139. );
  140. }
  141. }