main.dart 4.1 KB

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