This commit is contained in:
Developer
2026-04-04 19:11:49 +08:00
parent 9ba250bad7
commit cd1f9dd17a
9 changed files with 118 additions and 396 deletions

View File

@@ -4,6 +4,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'utils/app_theme.dart';
import 'utils/app_initializer.dart';
import 'utils/force_guide_checker.dart';
import 'utils/screen_adapter.dart';
import 'routes/app_routes.dart';
import 'constants/app_constants.dart';
import 'config/app_config.dart';
@@ -13,19 +14,34 @@ import 'views/profile/guide/sp-guide.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
debugPrint('[启动] 开始初始化...');
await SharedPreferencesStorageController.init();
try {
await SharedPreferencesStorageController.init();
debugPrint('[启动] SharedPreferencesStorageController 初始化完成');
// 初始化 AppConfig动态获取版本号
await AppConfig.init();
// 初始化 AppConfig动态获取版本号
try {
await AppConfig.init();
debugPrint('[启动] AppConfig 初始化完成');
} catch (e) {
debugPrint('[启动] AppConfig 初始化异常: $e');
}
// 初始化 ThemeController在 AppInitializer 之前,确保主题最先加载)
Get.put(ThemeController(), permanent: true);
// 初始化 ThemeController在 AppInitializer 之前,确保主题最先加载)
Get.put(ThemeController(), permanent: true);
debugPrint('[启动] ThemeController 初始化完成');
// 检查是否需要显示引导页
String initialRoute = await _getInitialRoute();
// 检查是否需要显示引导页
String initialRoute = await _getInitialRoute();
debugPrint('[启动] 初始路由: $initialRoute');
runApp(MyApp(initialRoute: initialRoute));
runApp(MyApp(initialRoute: initialRoute));
debugPrint('[启动] 应用启动完成');
} catch (e) {
debugPrint('[启动] 异常: $e');
runApp(MyApp(initialRoute: '/'));
}
}
Future<String> _getInitialRoute() async {
@@ -39,15 +55,65 @@ Future<String> _getInitialRoute() async {
}
// 否则使用 AppInitializer 返回的初始路由
final result = await AppInitializer.initialize();
return result.initialRoute;
try {
final result = await AppInitializer.initialize();
return result.initialRoute;
} catch (e) {
debugPrint('[启动] AppInitializer.initialize 异常: $e');
return '/';
}
}
class MyApp extends StatelessWidget {
class MyApp extends StatefulWidget {
final String initialRoute;
const MyApp({super.key, required this.initialRoute});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
// 在第一帧绘制后再执行屏幕适配
WidgetsBinding.instance.addPostFrameCallback((_) {
debugPrint('[启动] 执行屏幕适配...');
_setupScreenAdapter();
});
}
void _setupScreenAdapter() {
try {
// 延迟调用屏幕适配,避免在启动时阻塞
Future.delayed(const Duration(milliseconds: 100), () {
if (mounted) {
ScreenAdapter.setPreferredOrientations();
ScreenAdapter.enableSystemUIOverlay();
ScreenAdapter.setSystemUIOverlayStyle(
statusBarColor: Colors.transparent,
);
debugPrint('[启动] 屏幕适配完成');
}
});
} catch (e) {
debugPrint('[启动] 屏幕适配异常: $e');
}
}
@override
Widget build(BuildContext context) {
// 使用 Obx 监听主题变化
@@ -59,7 +125,7 @@ class MyApp extends StatelessWidget {
theme: AppTheme.lightTheme,
darkTheme: AppTheme.darkTheme,
themeMode: themeController.currentThemeMode,
initialRoute: initialRoute,
initialRoute: widget.initialRoute,
onGenerateRoute: AppRoutes.generateRoute,
routes: {'/sp-guide': (context) => const SpGuidePage()},
);