main.dart 4.9 KB

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