import 'dart:io'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:tone_snap/components/base_easyloading.dart'; import 'package:tone_snap/components/music_bar.dart'; import 'package:tone_snap/components/music_bar/music_bar_controller.dart'; import 'package:tone_snap/data/enum/app_side_enum.dart'; import 'package:tone_snap/data/storage/hive_storage.dart'; import 'package:tone_snap/firebase/firebase_options.dart'; import 'package:tone_snap/global/app_config.dart'; import 'package:tone_snap/global/network_connectivity_service.dart'; import 'package:tone_snap/modules/sideb/controllers/music_player_controller.dart'; import 'package:tone_snap/res/themes/app_themes.dart'; import 'package:tone_snap/routes/app_pages.dart'; import 'package:tone_snap/routes/app_routes.dart'; import 'package:tone_snap/utils/file_util.dart'; import 'package:tone_snap/utils/local_path_util.dart'; import 'package:tone_snap/utils/log_util.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); if (Platform.isIOS) { // 初始化Firebase try { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); } catch (e) { LogUtil.e("Firebase initialization error: $e"); } // 非异步错误 FlutterError.onError = (errorDetails) { FirebaseCrashlytics.instance.recordFlutterError(errorDetails); }; // 异步错误 PlatformDispatcher.instance.onError = (error, stack) { FirebaseCrashlytics.instance.recordError(error, stack, fatal: false); return true; }; // 初始化广告 SDK MobileAds.instance.initialize(); // 监听网络变化 await Get.putAsync(() async => NetworkConnectivityService()); } // 初始化Hive await initHive(); runApp(const MyApp()); // 竖屏 SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); // 设置安卓状态栏背景色透明、底部导航栏颜色和导航栏图标亮度 if (Platform.isAndroid) { SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( statusBarColor: Colors.transparent, systemNavigationBarColor: Colors.black, systemNavigationBarIconBrightness: Brightness.light, )); } // 删除缓存文件 FileUtil.deleteAllFilesInDirectory(await LocalPathUtil.getRecordingsDir()); FileUtil.deleteAllFilesInDirectory(await LocalPathUtil.getAssetsDir()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { final easyLoading = EasyLoading.init(); ThemeData appTheme; List navigatorObservers = const []; if (AppConfig.appSideEnum == AppSideEnum.sideA) { appTheme = sideATheme; } else { appTheme = sideBTheme; navigatorObservers = [ GetObserver((_) { WidgetsBinding.instance.addPostFrameCallback((_) { if (Get.currentRoute == AppRoutes.playPage) { MusicBar().hide(); } else { if (Get.isRegistered() && MusicPlayerController.to.musicModel.value.videoId != null) { MusicBar().show(); } } if (Get.isRegistered()) { if (Get.currentRoute == AppRoutes.initialB) { MusicBarController.to.riseUp(); } else { MusicBarController.to.toBottom(); } } }); }), ]; } return ScreenUtilInit( // 以设计稿的尺寸为基准进行适配 designSize: const Size(375, 812), minTextAdapt: true, builder: (context, child) { return GetMaterialApp( title: AppConfig.appName, debugShowCheckedModeBanner: false, theme: appTheme, darkTheme: appTheme, themeMode: ThemeMode.dark, initialRoute: AppRoutes.splash, getPages: AppPages.routes, navigatorObservers: navigatorObservers, builder: (context, widget) { BaseEasyLoading.configLoading(); widget = easyLoading(context, widget); // 设置文字大小不随系统设置改变 return MediaQuery.withNoTextScaling(child: widget); }, ); }, ); } }