main.dart 4.4 KB

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