import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:skywood/global/client/event_client.dart'; import 'package:skywood/global/request/app_request.dart'; import 'package:skywood/global/tool/sky_routers.dart'; import 'package:skywood/main/main_root.dart'; import 'package:skywood/pages/controllers/user_controller.dart'; import 'package:skywood/utils/tools/sky_device_info.dart'; import 'package:skywood/utils/tools/token_manage.dart'; import 'global/const/common_color.dart'; import 'global/language/app_language.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await initServices(); Locale? locale = await AppLanguage.getLocale(); runApp(ComApp(home: MainRoot(), locale: locale)); } Future initServices() async { await SkyDeviceInfo.init(); await TokenManager().init(); await Get.putAsync(() async => UserController()); } class ComApp extends StatefulWidget { const ComApp({super.key, required this.home, this.locale}); final Widget home; final Locale? locale; @override State createState() { return _ComAppState(); } } class _ComAppState extends State with WidgetsBindingObserver { bool _appInForeground = true; // 跟踪应用是否在前台 @override Widget build(BuildContext context) { // Locale locale = await AppLanguage.getLocale(); return ScreenUtilInit( designSize: Size(375, 812), child: GetMaterialApp( debugShowCheckedModeBanner: false, translations: AppLanguage(), locale: widget.locale ?? Get.deviceLocale, fallbackLocale: const Locale('en'), initialBinding: AppBindings(), initialRoute: SkyPages.initial, getPages: SkyPages.routes, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: CommonColor.primacyColor, ), appBarTheme: AppBarTheme(elevation: 0, centerTitle: true), splashColor: Colors.transparent, useMaterial3: true, scaffoldBackgroundColor: Colors.white, ), builder: FlutterSmartDialog.init( builder: (context, child) { return MediaQuery( data: MediaQuery.of( context, ).copyWith(textScaler: TextScaler.linear(1.0)), child: child!, ); }, ), onInit: () {}, ), ); } @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); // _startPeriodicOnlineReport(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); switch (state) { case AppLifecycleState.inactive: case AppLifecycleState.paused: // 应用进入后台或不活跃状态 if (_appInForeground) { print('💛应用不活跃'); _appInForeground = false; _onAppPaused(); } break; case AppLifecycleState.resumed: // 应用回到前台 if (!_appInForeground) { print('💚应用活跃'); _appInForeground = true; _onAppResumed(); } break; case AppLifecycleState.detached: case AppLifecycleState.hidden: break; } } // 应用进入后台时的处理 void _onAppPaused() { try { EventClient.eventOLeaveApp(); } catch (err) { print(err.toString()); } } /// 应用回到前台时的处理 void _onAppResumed() { try { EventClient.eventEnterApp(); EventClient.eventOnline(); } catch (err) { print(err.toString()); } } } class AppBindings extends Bindings { @override void dependencies() { // Get.lazyPut(() => UserController()); } }