123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import 'package:cpt_main/router/component/main_service_provider.dart';
- import 'package:cs_resources/generated/l10n.dart';
- import 'package:cs_resources/theme/app_colors_theme.dart';
- import 'package:cs_resources/theme/theme_notifier.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:flutter_hooks/flutter_hooks.dart';
- import 'package:flutter_localizations/flutter_localizations.dart';
- import 'package:hooks_riverpod/hooks_riverpod.dart';
- import 'package:initializer/app_initializer.dart';
- import 'package:plugin_basic/basic_export.dart';
- import 'package:plugin_basic/constants/app_constant.dart';
- import 'package:plugin_basic/provider/app_config/app_config_service.dart';
- import 'package:plugin_basic/provider/global_provider_container.dart';
- import 'package:plugin_platform/engine/sp/sp_util.dart';
- import 'package:router/componentRouter/component_service_manager.dart';
- import 'package:cpt_profile/router/component/profile_service_provider.dart';
- import 'package:plugin_basic/obs/my_navigator_observer.dart';
- import 'package:shared/utils/device_utils.dart';
- import 'package:shared/utils/log_utils.dart';
- import 'package:widgets/dialog/custom_toast_widget.dart';
- import 'package:widgets/dialog/custom_error_widget.dart';
- import 'package:widgets/dialog/custom_failure_widget.dart';
- import 'package:widgets/dialog/custom_success_widget.dart';
- import 'package:widgets/dialog/custom_loading_widget.dart';
- import 'package:widgets/widget_export.dart';
- import 'package:cs_resources/theme/theme_config.dart';
- import 'router/page/app_page_router.dart';
- import 'router/component/app_service_provider.dart';
- import 'package:cpt_auth/router/component/auth_component_service.dart';
- import 'package:cpt_community/router/component/community_component_service.dart';
- import 'package:cpt_facility/router/component/facility_component_service.dart';
- import 'package:cpt_form/router/component/form_component_service.dart';
- import 'package:cpt_notice_board/router/component/notice_board_component_service.dart';
- import 'package:cpt_payment/router/component/payment_component_service.dart';
- import 'package:cpt_property/router/component/property_component_service.dart';
- import 'package:cpt_rewards/router/component/rewards_component_service.dart';
- import 'package:cpt_services/router/component/services_component_service.dart';
- void main() async {
- //交给初始化构造器去统一初始化
- await AppInitializer.initializeRunalone();
- //组件路由的注入
- final serviceManager = ComponentServiceManager()
- ..addServiceProvider(mainServiceProvider)
- ..addServiceProvider(authServiceProvider)
- ..addServiceProvider(appServiceProvider)
- ..addServiceProvider(communityServiceProvider)
- ..addServiceProvider(facilityServiceProvider)
- ..addServiceProvider(formServiceProvider)
- ..addServiceProvider(noticeBoardServiceProvider)
- ..addServiceProvider(paymentServiceProvider)
- ..addServiceProvider(propertyServiceProvider)
- ..addServiceProvider(rewardsServiceProvider)
- ..addServiceProvider(servicesServiceProvider)
- ..addServiceProvider(profileServiceProvider);
- runApp(ProviderScope(
- parent: globalContainer,
- child: MyApp(),
- ));
- }
- class MyApp extends HookConsumerWidget {
- MyApp({Key? key}) : super(key: key) {
- /// 全局设置 EasyRefresh 的样式
- EasyRefresh.defaultHeaderBuilder = () => const ClassicHeader(
- dragText: 'Pull to refresh',
- armedText: 'Release ready',
- readyText: 'Refreshing...',
- processingText: 'Refreshing...',
- processedText: 'Succeeded',
- noMoreText: 'No more',
- failedText: 'Failed',
- messageText: 'Last updated at %T',
- textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
- messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
- iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
- backgroundColor: Colors.transparent,
- );
- EasyRefresh.defaultFooterBuilder = () => const ClassicFooter(
- dragText: 'Pull to load',
- armedText: 'Release ready',
- readyText: 'Loading...',
- processingText: 'Loading...',
- processedText: 'Succeeded',
- noMoreText: 'No more',
- failedText: 'Failed',
- showMessage: false,
- triggerOffset: 50,
- iconDimension: 22,
- textStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 14),
- messageStyle: TextStyle(color: Color(0XFFAECAE5), fontSize: 12),
- iconTheme: IconThemeData(color: Color(0XFFAECAE5)),
- backgroundColor: Colors.transparent,
- );
- /// SmartDialog 配置
- SmartDialog.config
- ..custom = SmartConfigCustom(
- maskColor: Colors.black.withOpacity(0.35),
- useAnimation: true,
- )
- ..attach = SmartConfigAttach(
- animationType: SmartAnimationType.scale,
- usePenetrate: false,
- )
- ..loading = SmartConfigLoading(
- backDismiss: true,
- clickMaskDismiss: true,
- )
- ..toast = SmartConfigToast(
- intervalTime: const Duration(milliseconds: 100),
- displayTime: const Duration(milliseconds: 2000),
- );
- }
- @override
- Widget build(BuildContext context, WidgetRef ref) {
- final themeMode = ref.watch(themeProvider);
- //根据主题配置对应的状态栏
- int? darkModel = SPUtil.getInt(AppConstant.storageDarkModel, defValue: 0);
- late SystemUiOverlayStyle systemUiOverlayStyle;
- if (DeviceUtils.isAndroid) {
- //根据SP存入的暗色模式,指定全局页面的状态栏,导航栏等设置
- switch (darkModel) {
- case 1:
- Log.d("main.dart - 指定亮色模式");
- systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleLightThemeBlack;
- break;
- case 2:
- Log.d("main.dart - 指定暗色模式");
- systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleDarkTheme;
- break;
- default:
- Brightness currentBrightness = MediaQuery.of(context).platformBrightness;
- if (currentBrightness == Brightness.dark) {
- Log.d("main.dart - 跟随系统模式-暗色模式");
- systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleDarkTheme;
- } else {
- Log.d("main.dart - 跟随系统模式-亮色模式");
- systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleLightThemeBlack;
- }
- break;
- }
- }
- SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
- useEffect(() {
- // 组件挂载时执行
- WidgetsBinding.instance.addPostFrameCallback((_) {
- //控件加载完成时执行
- AppConfigService.getInstance().initSize(context);
- });
- return () {
- // 组件卸载时执行
- };
- }, []);
- //全局入口
- // return AnnotatedRegion<SystemUiOverlayStyle>(
- // value: systemUiOverlayStyle,
- // child:
- return KeyboardVisibilityBuilder(builder: (context, isKeyboardVisible) {
- return KeyboardDismissOnTap(
- dismissOnCapturedTaps: false,
- child: MaterialApp.router(
- title: 'PropertyManagementSystem',
- debugShowCheckedModeBanner: true,
- //主题配置
- theme: ThemeData(
- colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF4161D0)),
- useMaterial3: false,
- ).copyWith(extensions: [
- AppColorsTheme.light(),
- ]),
- darkTheme: ThemeData(
- colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF4161D0), brightness: Brightness.dark),
- useMaterial3: false,
- ).copyWith(extensions: [
- AppColorsTheme.dark(),
- ]),
- themeMode: themeMode == ThemeMode.system ? ThemeMode.system : themeMode,
- //国际化配置
- localizationsDelegates: const [
- S.delegate,
- GlobalMaterialLocalizations.delegate,
- GlobalCupertinoLocalizations.delegate,
- GlobalWidgetsLocalizations.delegate,
- ],
- //国际化英语为首选项
- supportedLocales: [const Locale('en', ''), ...S.delegate.supportedLocales],
- localeResolutionCallback: (locale, supportLocales) {
- // 中文 简繁体处理
- if (locale?.languageCode == 'zh') {
- if (locale?.scriptCode == 'Hant') {
- return const Locale('zh', 'HK'); //繁体
- } else {
- return const Locale('zh', 'CN'); //简体
- }
- }
- return null;
- },
- //AutoRouter的配置
- routerConfig: appRouter.config(
- navigatorObservers: () => [
- MyNavigatorObserver(),
- ],
- ),
- //SmartDialog初始化默认Loading与Toast
- builder: FlutterSmartDialog.init(
- toastBuilder: (String msg) {
- return CustomToastWidget(msg: msg);
- },
- loadingBuilder: (String msg) {
- return CustomLoadingWidget(msg: msg == 'loading...' ? 'Loading...' : msg);
- },
- notifyStyle: FlutterSmartNotifyStyle(
- successBuilder: (String msg) => CustomSuccessWidget(msg: msg),
- failureBuilder: (String msg) => CustomFailureWidget(msg: msg),
- errorBuilder: (String msg) => CustomErrorWidget(msg: msg),
- alertBuilder: (String msg) => CustomErrorWidget(msg: msg),
- warningBuilder: (String msg) => CustomErrorWidget(msg: msg),
- ),
- ),
- ),
- );
- });
- // );
- }
- }
|