main.dart 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import 'package:cpt_main/router/component/main_service_provider.dart';
  2. import 'package:cs_resources/generated/l10n.dart';
  3. import 'package:cs_resources/theme/app_colors_theme.dart';
  4. import 'package:cs_resources/theme/theme_notifier.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter/services.dart';
  7. import 'package:flutter_localizations/flutter_localizations.dart';
  8. import 'package:hooks_riverpod/hooks_riverpod.dart';
  9. import 'package:initializer/app_initializer.dart';
  10. import 'package:plugin_basic/basic_export.dart';
  11. import 'package:plugin_basic/provider/app_config/app_config_service.dart';
  12. import 'package:plugin_basic/provider/global_provider_container.dart';
  13. import 'package:router/componentRouter/component_service_manager.dart';
  14. import 'package:cpt_profile/router/component/profile_service_provider.dart';
  15. import 'package:plugin_basic/obs/my_navigator_observer.dart';
  16. import 'package:widgets/dialog/custom_toast_widget.dart';
  17. import 'package:widgets/dialog/custom_error_widget.dart';
  18. import 'package:widgets/dialog/custom_failure_widget.dart';
  19. import 'package:widgets/dialog/custom_success_widget.dart';
  20. import 'package:widgets/dialog/custom_loading_widget.dart';
  21. import 'package:widgets/widget_export.dart';
  22. import 'package:cs_resources/theme/theme_config.dart';
  23. import 'router/page/app_page_router.dart';
  24. import 'router/component/app_service_provider.dart';
  25. void main() async {
  26. //交给初始化构造器去统一初始化
  27. await AppInitializer.initializeRunalone();
  28. //组件路由的注入
  29. final serviceManager = ComponentServiceManager()
  30. ..addServiceProvider(mainServiceProvider)
  31. ..addServiceProvider(appServiceProvider)
  32. ..addServiceProvider(profileServiceProvider);
  33. runApp(ProviderScope(
  34. parent: globalContainer,
  35. child: MyApp(),
  36. ));
  37. }
  38. class MyApp extends HookConsumerWidget {
  39. MyApp({Key? key}) : super(key: key) {
  40. /// 全局设置 EasyRefresh 的样式
  41. EasyRefresh.defaultHeaderBuilder = () => const ClassicHeader(
  42. dragText: 'Pull to refresh',
  43. armedText: 'Release ready',
  44. readyText: 'Refreshing...',
  45. processingText: 'Refreshing...',
  46. processedText: 'Succeeded',
  47. noMoreText: 'No more',
  48. failedText: 'Failed',
  49. messageText: 'Last updated at %T',
  50. textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
  51. messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
  52. iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
  53. backgroundColor: Colors.transparent,
  54. );
  55. EasyRefresh.defaultFooterBuilder = () => const ClassicFooter(
  56. dragText: 'Pull to load',
  57. armedText: 'Release ready',
  58. readyText: 'Loading...',
  59. processingText: 'Loading...',
  60. processedText: 'Succeeded',
  61. noMoreText: 'No more',
  62. failedText: 'Failed',
  63. showMessage: false,
  64. triggerOffset: 50,
  65. iconDimension: 22,
  66. textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
  67. messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
  68. iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
  69. backgroundColor: Colors.transparent,
  70. );
  71. /// SmartDialog 配置
  72. SmartDialog.config
  73. ..custom = SmartConfigCustom(
  74. maskColor: Colors.black.withOpacity(0.35),
  75. useAnimation: true,
  76. )
  77. ..attach = SmartConfigAttach(
  78. animationType: SmartAnimationType.scale,
  79. usePenetrate: false,
  80. )
  81. ..loading = SmartConfigLoading(
  82. backDismiss: true,
  83. clickMaskDismiss: true,
  84. )
  85. ..toast = SmartConfigToast(
  86. intervalTime: const Duration(milliseconds: 100),
  87. displayTime: const Duration(milliseconds: 2000),
  88. );
  89. }
  90. @override
  91. Widget build(BuildContext context, WidgetRef ref) {
  92. final themeMode = ref.watch(themeProvider);
  93. WidgetsBinding.instance.addPostFrameCallback((_) {
  94. AppConfigService.getInstance().initSize(context);
  95. });
  96. //设置全局的状态栏文本样式
  97. SystemChrome.setSystemUIOverlayStyle(ThemeConfig.systemUiOverlayStyleLightThemeWhite);
  98. //路由管理,状态管理,依赖管理一切都始于GetMaterialApp
  99. return KeyboardVisibilityBuilder(builder: (context, isKeyboardVisible) {
  100. return KeyboardDismissOnTap(
  101. dismissOnCapturedTaps: false,
  102. child: MaterialApp.router(
  103. title: 'PropertyManagementSystem',
  104. debugShowCheckedModeBanner: true,
  105. // theme: ThemeData(
  106. // colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
  107. // useMaterial3: false,
  108. // ),
  109. // Theme.of(context)
  110. //主题配置
  111. theme: ThemeData(
  112. colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
  113. useMaterial3: false,
  114. ).copyWith(extensions: [
  115. AppColorsTheme.light(),
  116. ]),
  117. darkTheme: ThemeData(
  118. colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple, brightness: Brightness.dark),
  119. useMaterial3: false,
  120. ).copyWith(extensions: [
  121. AppColorsTheme.dark(),
  122. ]),
  123. themeMode: themeMode == ThemeMode.system ? ThemeMode.system : themeMode,
  124. //国际化配置
  125. localizationsDelegates: const [
  126. S.delegate,
  127. GlobalMaterialLocalizations.delegate,
  128. GlobalCupertinoLocalizations.delegate,
  129. GlobalWidgetsLocalizations.delegate,
  130. ],
  131. //国际化英语为首选项
  132. supportedLocales: [const Locale('en', ''), ...S.delegate.supportedLocales],
  133. localeResolutionCallback: (locale, supportLocales) {
  134. // 中文 简繁体处理
  135. if (locale?.languageCode == 'zh') {
  136. if (locale?.scriptCode == 'Hant') {
  137. return const Locale('zh', 'HK'); //繁体
  138. } else {
  139. return const Locale('zh', 'CN'); //简体
  140. }
  141. }
  142. return null;
  143. },
  144. //AutoRouter的配置
  145. routerConfig: appRouter.config(
  146. navigatorObservers: () => [
  147. MyNavigatorObserver(),
  148. ],
  149. ),
  150. //SmartDialog初始化默认Loading与Toast
  151. builder: FlutterSmartDialog.init(
  152. toastBuilder: (String msg) {
  153. return CustomToastWidget(msg: msg);
  154. },
  155. loadingBuilder: (String msg) {
  156. return CustomLoadingWidget(msg: msg == 'loading...' ? 'Loading...' : msg);
  157. },
  158. notifyStyle: FlutterSmartNotifyStyle(
  159. successBuilder: (String msg) => CustomSuccessWidget(msg: msg),
  160. failureBuilder: (String msg) => CustomFailureWidget(msg: msg),
  161. errorBuilder: (String msg) => CustomErrorWidget(msg: msg),
  162. alertBuilder: (String msg) => CustomErrorWidget(msg: msg),
  163. warningBuilder: (String msg) => CustomErrorWidget(msg: msg),
  164. ),
  165. ),
  166. ),
  167. );
  168. });
  169. }
  170. }