main.dart 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import 'package:cpt_auth/router/auth_service_impl.dart';
  2. import 'package:cpt_auth/router/page_router.dart';
  3. import 'package:cpt_job/router/job_service_impl.dart';
  4. import 'package:cpt_labour/router/labour_service_impl.dart';
  5. import 'package:cpt_labour/router/page_router.dart';
  6. import 'package:cpt_report/router/report_service_impl.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:flutter/services.dart';
  9. import 'package:flutter_bugly/flutter_bugly.dart';
  10. import 'package:flutter_localizations/flutter_localizations.dart';
  11. import 'package:initializer/global_services_injection.dart';
  12. import 'package:initializer/app_initializer.dart';
  13. import 'package:plugin_basic/basic_export.dart';
  14. import 'package:router/componentRouter/auth_service.dart';
  15. import 'package:router/componentRouter/job_service.dart';
  16. import 'package:router/componentRouter/labour_service.dart';
  17. import 'package:router/componentRouter/report_service.dart';
  18. import 'package:shared/utils/log_utils.dart';
  19. import 'package:plugin_platform/engine/sp/sp_util.dart';
  20. import 'package:plugin_basic/constants/app_constant.dart';
  21. import 'package:cs_resources/local/theme/theme_config.dart';
  22. import 'package:cs_resources/local/language/translation_service.dart';
  23. import 'package:router/path/router_path.dart';
  24. import 'package:router/observer/getx_router_observer.dart';
  25. import 'package:plugin_basic/router/basic_page_router.dart';
  26. import 'package:widgets/dialog/custom_toast_widget.dart';
  27. import 'package:widgets/dialog/custom_error_widget.dart';
  28. import 'package:widgets/dialog/custom_failure_widget.dart';
  29. import 'package:widgets/dialog/custom_success_widget.dart';
  30. import 'package:widgets/dialog/custom_loading_widget.dart';
  31. import 'package:widgets/widget_export.dart';
  32. import 'router/page_router.dart';
  33. void main() {
  34. //运行App
  35. FlutterBugly.postCatchedException(() async {
  36. //交给初始化构造器去统一初始化
  37. AppInitializer.initialize();
  38. //全局自定义单例服务的注入
  39. GlobalServicesInjection.init(additionalDependencies: () {
  40. Get.lazyPut<AuthService>(() => AuthServiceImpl());
  41. Get.lazyPut<LabourService>(() => LabourServiceImpl());
  42. Get.lazyPut<JobService>(() => JobServiceImpl());
  43. Get.lazyPut<ReportService>(() => ReportServiceImpl());
  44. });
  45. runApp(MyApp());
  46. });
  47. }
  48. class MyApp extends StatelessWidget {
  49. MyApp({Key? key}) : super(key: key) {
  50. /// 全局设置 EasyRefresh 的样式
  51. EasyRefresh.defaultHeaderBuilder = () =>
  52. ClassicHeader(
  53. dragText: '下拉刷新'.tr,
  54. armedText: '释放刷新'.tr,
  55. readyText: '刷新中...'.tr,
  56. processingText: '刷新中...'.tr,
  57. processedText: '成功'.tr,
  58. noMoreText: '没有更多数据'.tr,
  59. failedText: '失败'.tr,
  60. messageText: '最近更新于 %T'.tr,
  61. );
  62. EasyRefresh.defaultFooterBuilder = () =>
  63. ClassicFooter(
  64. dragText: '上拉加载更多'.tr,
  65. armedText: '释放刷新'.tr,
  66. readyText: '加载中...'.tr,
  67. processingText: '加载中...'.tr,
  68. processedText: '成功'.tr,
  69. noMoreText: '没有更多数据'.tr,
  70. failedText: '成功'.tr,
  71. showMessage: false,
  72. triggerOffset: 50,
  73. iconDimension: 22,
  74. );
  75. /// SmartDialog 配置
  76. SmartDialog.config
  77. ..custom = SmartConfigCustom(
  78. maskColor: Colors.black.withOpacity(0.35),
  79. useAnimation: true,
  80. )
  81. ..attach = SmartConfigAttach(
  82. animationType: SmartAnimationType.scale,
  83. usePenetrate: false,
  84. )
  85. ..loading = SmartConfigLoading(
  86. backDismiss: true,
  87. clickMaskDismiss: true,
  88. )
  89. ..toast = SmartConfigToast(
  90. intervalTime: const Duration(milliseconds: 100),
  91. displayTime: const Duration(milliseconds: 2000),
  92. );
  93. }
  94. @override
  95. Widget build(BuildContext context) {
  96. int? darkModel = SPUtil.getInt(AppConstant.storagedarkmodel, defValue: 0);
  97. if (GetPlatform.isAndroid) {
  98. //根据SP存入的暗色模式,指定全局页面的状态栏,导航栏等设置
  99. switch (darkModel) {
  100. case 1:
  101. Log.d("main.dart - 指定亮色模式");
  102. SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleLightThemeBlack);
  103. break;
  104. case 2:
  105. Log.d("main.dart - 指定暗色模式");
  106. SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleDarkTheme);
  107. break;
  108. default:
  109. Brightness currentBrightness = MediaQuery
  110. .of(context)
  111. .platformBrightness;
  112. if (currentBrightness == Brightness.dark) {
  113. Log.d("main.dart - 跟随系统模式-暗色模式");
  114. SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleDarkTheme);
  115. } else {
  116. Log.d("main.dart - 跟随系统模式-亮色模式");
  117. SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleLightThemeBlack);
  118. }
  119. break;
  120. }
  121. }
  122. //路由管理,状态管理,依赖管理一切都始于GetMaterialApp
  123. return KeyboardVisibilityBuilder(builder: (context, isKeyboardVisible) {
  124. return KeyboardDismissOnTap(
  125. dismissOnCapturedTaps: true,
  126. child: GetMaterialApp(
  127. //顶部是否展示Debug图标
  128. debugShowCheckedModeBanner: true,
  129. //是否展示Log
  130. enableLog: true,
  131. //默认路由与路由表的加载
  132. initialRoute: RouterPath.SPLASH,
  133. getPages: PageRouter.routes + BasicPageRouter.routes /*+ LabourPageRouter.routes + AuthPageRouter.routes +*/,
  134. //对原生导航的兼容;SmartDialog路由配置生命周期处理
  135. navigatorObservers: [GetXRouterObserver(), FlutterSmartDialog.observer, routeObserver],
  136. //默认页面动画
  137. defaultTransition: Transition.rightToLeft,
  138. smartManagement: SmartManagement.keepFactory,
  139. //网页Title显示
  140. title: 'FlutterRoom'.tr,
  141. //样式相关
  142. theme: ThemeConfig.lightTheme,
  143. darkTheme: ThemeConfig.darkTheme,
  144. themeMode: darkModel == 1
  145. ? ThemeMode.light
  146. : darkModel == 2
  147. ? ThemeMode.dark
  148. : ThemeMode.system,
  149. //本地化相关
  150. locale: TranslationService.locale,
  151. fallbackLocale: TranslationService.fallbackLocale,
  152. localizationsDelegates: const [
  153. GlobalMaterialLocalizations.delegate,
  154. GlobalWidgetsLocalizations.delegate,
  155. GlobalCupertinoLocalizations.delegate,
  156. ],
  157. supportedLocales: const [
  158. Locale('zh', 'CH'),
  159. Locale('en', 'US'),
  160. ],
  161. translations: TranslationService(),
  162. //SmartDialog初始化默认Loading与Toast
  163. builder: FlutterSmartDialog.init(
  164. toastBuilder: (String msg) {
  165. return CustomToastWidget(msg: msg);
  166. },
  167. loadingBuilder: (String msg) {
  168. return CustomLoadingWidget(msg: msg == 'loading...' ? '加载中...'.tr : msg);
  169. },
  170. notifyStyle: FlutterSmartNotifyStyle(
  171. successBuilder: (String msg) => CustomSuccessWidget(msg: msg),
  172. failureBuilder: (String msg) => CustomFailureWidget(msg: msg),
  173. errorBuilder: (String msg) => CustomErrorWidget(msg: msg),
  174. alertBuilder: (String msg) => CustomErrorWidget(msg: msg),
  175. warningBuilder: (String msg) => CustomErrorWidget(msg: msg),
  176. ),
  177. ),
  178. ),
  179. );
  180. });
  181. }
  182. }