import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:get/get.dart'; import 'package:o2oa_all_platform/global.dart'; import 'package:o2oa_all_platform/common/index.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; Future main() async { await Global.init(); runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override State createState() => MyAppState(); } class MyAppState extends State { // 主题模式 light dark ThemeMode mode = ThemeMode.system; // 主题 ThemeData lightTheme = AppTheme.defaultLightTheme; ThemeData darkTheme = AppTheme.defaultDarkTheme; Locale? _locale = Languages.locale; bool needGrey = false; final _eventMsgId = 'MyApp'; @override void initState() { // 是否需要全局黑白 needGrey = SharedPreferenceService.to.getBool( SharedPreferenceService.appStyleNeedGreyKey, defaultValue: false); loadThemeMode(); _locale = LanguageListExt.getCurrentLanguage().getLocale(); // 监听黑白变化 EventBus().on(EventBus.greyColorChangeGlobalMsg, _eventMsgId, (arg) { OLogger.d('接收到了 全局黑白的变化'); changeGreyColor(); }); super.initState(); } /// 全局黑白 或者 还原 void changeGreyColor() { setState(() { needGrey = SharedPreferenceService.to.getBool( SharedPreferenceService.appStyleNeedGreyKey, defaultValue: false); }); } /// 主题皮肤相关信息 void loadThemeMode() { mode = SharedPreferenceService.to.getThemeMode(); OLogger.d('当前系统主题mode: ${mode.name}'); final skin = SharedPreferenceService.to.getThemeSkin(); lightTheme = AppTheme.getLightThemeBySkin(skin); darkTheme = AppTheme.getDarkThemeBySkin(skin); OLogger.d('当前系统主题皮肤: ${skin.name}'); } // This widget is the root of your application. @override Widget build(BuildContext context) { OLogger.d('页面根 MyApp build 。。。。。。。。。。。。'); return O2UI.greyWidget( RefreshConfiguration( headerBuilder: () => const ClassicHeader(), footerBuilder: () => const ClassicFooter(), hideFooterWhenNotFull: true, headerTriggerDistance: 80, maxOverScrollExtent: 100, footerTriggerDistance: 150, child: OrientationBuilder(builder: (context, orientation) { final isPad = SharedPreferenceService.to .getBool(SharedPreferenceService.isPadKey); final screenWidth = MediaQuery.of(context).size.width; OLogger.d( 'OrientationBuilder, orientation: $orientation isPad:$isPad screenWidth:$screenWidth'); return isPad && orientation == Orientation.landscape ? blurBackground(screenWidth) : getMApp(); }), ), needGrey); } Widget blurBackground(double screenWidth) { return Stack(alignment: Alignment.topLeft, children: [ const Positioned.fill( child: AssetsImageView( 'launch_background.png', fit: BoxFit.fill, ), ), Positioned.fill( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), child: FractionallySizedBox( widthFactor: screenWidth < 750 ? 1.0 : 750 / screenWidth, child: getMApp(), )), ) ]); } GetMaterialApp getMApp() { return GetMaterialApp( title: 'appName'.tr, enableLog: true, themeMode: mode, theme: lightTheme, // 亮色主题 darkTheme: darkTheme, // 暗色主题 logWriterCallback: OLogger.writeFromGetx, defaultTransition: Transition.fade, initialRoute: O2OARoutes.splash, getPages: O2OAPages.pages, unknownRoute: O2OAPages.unknownRoute, // loading插件 builder: EasyLoading.init(), // 多语言 locale: _locale, fallbackLocale: Languages.fallbackLocale, translations: Languages(), localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, RefreshLocalizations.delegate, ], supportedLocales: const [ Locale('zh', 'CN'), Locale('en', 'US'), Locale('zh', 'HK'), ], ); } }