skywood/lib/main.dart
2026-07-01 20:19:11 +08:00

149 lines
3.9 KiB
Dart

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/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<void> 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<StatefulWidget> createState() {
return _ComAppState();
}
}
class _ComAppState extends State<ComApp> 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());
}
}