102 lines
3.6 KiB
Dart
102 lines
3.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'config/app_config.dart';
|
|
import 'utils/app_theme.dart';
|
|
import 'utils/screen_adapter.dart';
|
|
import 'utils/force_guide_checker.dart';
|
|
import 'routes/app_routes.dart';
|
|
import 'constants/app_constants.dart';
|
|
import 'controllers/sqlite_storage_controller.dart';
|
|
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
// 初始化SQLite存储
|
|
await SQLiteStorageController.init();
|
|
|
|
// 初始化SharedPreferences
|
|
final prefs = await SharedPreferences.getInstance();
|
|
|
|
debugPrint('========================================');
|
|
debugPrint('======== 应用启动 - 强制引导页 ========');
|
|
debugPrint('========================================');
|
|
|
|
// 1. 先获取保存的版本号
|
|
final savedVersion = prefs.getInt(AppConfig.keyAppVersion);
|
|
debugPrint('保存的版本号: $savedVersion');
|
|
|
|
// 2. 如果是首次安装(没有版本号)或者版本不匹配
|
|
bool isFirstInstall =
|
|
savedVersion == null || savedVersion != AppConfig.appVersionCode;
|
|
debugPrint('是否首次安装/升级: $isFirstInstall');
|
|
|
|
if (isFirstInstall) {
|
|
debugPrint('--- 首次安装/升级,清空所有配置 ---');
|
|
await prefs.clear();
|
|
debugPrint('配置已清空');
|
|
|
|
// 3. 强制设置引导页相关的标志
|
|
await prefs.setBool(AppConfig.keyFirstLaunch, true);
|
|
await prefs.setBool(AppConfig.keyAgreementAccepted, false);
|
|
await prefs.setBool(AppConfig.keyShowGuideOnStartup, false);
|
|
await prefs.setInt(AppConfig.keyAppVersion, AppConfig.appVersionCode);
|
|
debugPrint('已设置 firstLaunch=true');
|
|
debugPrint('已设置 agreementAccepted=false');
|
|
debugPrint('已设置 showGuideOnStartup=false');
|
|
debugPrint('已设置 appVersion=${AppConfig.appVersionCode}');
|
|
}
|
|
|
|
// 4. 验证设置是否正确
|
|
final bool firstLaunch = prefs.getBool(AppConfig.keyFirstLaunch) ?? true;
|
|
final bool agreementAccepted =
|
|
prefs.getBool(AppConfig.keyAgreementAccepted) ?? false;
|
|
final int? appVersion = prefs.getInt(AppConfig.keyAppVersion);
|
|
final allKeys = prefs.getKeys();
|
|
|
|
debugPrint('--- 验证配置 ---');
|
|
debugPrint('firstLaunch: $firstLaunch');
|
|
debugPrint('agreementAccepted: $agreementAccepted');
|
|
debugPrint('appVersion: $appVersion');
|
|
debugPrint('所有配置项: $allKeys');
|
|
|
|
// 5. 强制检查引导页状态
|
|
GuideCheckResult? guideCheckResult;
|
|
try {
|
|
guideCheckResult = await ForceGuideChecker.checkAndValidate(prefs);
|
|
debugPrint('引导页检查结果: ${guideCheckResult.needGuide ? '需要引导页' : '不需要引导页'}');
|
|
debugPrint('原因: ${guideCheckResult.reason}');
|
|
} catch (e) {
|
|
debugPrint('引导页检查异常: $e');
|
|
}
|
|
|
|
// 6. 设置屏幕适配
|
|
ScreenAdapter.setPreferredOrientations();
|
|
ScreenAdapter.enableSystemUIOverlay();
|
|
ScreenAdapter.setSystemUIOverlayStyle(statusBarColor: Colors.transparent);
|
|
|
|
// 7. 获取初始路由
|
|
String initialRoute = await AppRoutes.getInitialRoute(prefs);
|
|
|
|
runApp(MyApp(initialRoute: initialRoute, guideCheckResult: guideCheckResult));
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
final String initialRoute;
|
|
final GuideCheckResult? guideCheckResult;
|
|
|
|
const MyApp({super.key, required this.initialRoute, this.guideCheckResult});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: AppConstants.appName,
|
|
debugShowCheckedModeBanner: false,
|
|
theme: AppTheme.lightTheme,
|
|
darkTheme: AppTheme.darkTheme,
|
|
themeMode: ThemeMode.system,
|
|
initialRoute: initialRoute,
|
|
onGenerateRoute: AppRoutes.generateRoute,
|
|
);
|
|
}
|
|
}
|