import 'dart:async'; import 'dart:io'; import 'dart:ui'; import 'package:fluent_ui/fluent_ui.dart' show FluentLocalizations; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_dmzj/app/app_style.dart'; import 'package:flutter_dmzj/app/platform_utils.dart'; import 'package:flutter_dmzj/models/db/comic_download_info.dart'; import 'package:flutter_dmzj/models/db/download_status.dart'; import 'package:flutter_dmzj/models/db/local_favorite.dart'; import 'package:flutter_dmzj/models/db/novel_download_info.dart'; import 'package:flutter_dmzj/services/app_settings_service.dart'; import 'package:flutter_dmzj/app/log.dart'; import 'package:flutter_dmzj/app/utils.dart'; import 'package:flutter_dmzj/models/db/comic_history.dart'; import 'package:flutter_dmzj/models/db/novel_history.dart'; import 'package:flutter_dmzj/services/comic_download_service.dart'; import 'package:flutter_dmzj/services/novel_download_service.dart'; import 'package:flutter_dmzj/services/db_service.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:flutter_dmzj/routes/app_pages.dart'; import 'package:flutter_dmzj/services/local_storage_service.dart'; import 'package:flutter_dmzj/services/user_service.dart'; import 'package:flutter_dmzj/widgets/status/app_loadding_widget.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:windows_single_instance/windows_single_instance.dart'; import 'package:dynamic_color/dynamic_color.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); if (!kIsWeb && Platform.isWindows) { await WindowsSingleInstance.ensureSingleInstance( [], "com.xycz.zmhx", onSecondWindow: (args) { Log.logPrint(args); }, ); } await Hive.initFlutter(); //初始化服务 await initServices(); //设置状态栏为透明 SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle( statusBarColor: Colors.transparent, statusBarIconBrightness: Brightness.dark, systemNavigationBarColor: Colors.transparent, ); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); runApp(const DMZJApp()); } Future initServices() async { //包信息 Utils.packageInfo = await PackageInfo.fromPlatform(); //本地存储 Log.d("Init LocalStorage Service"); await Get.put(LocalStorageService()).init(); //用户信息 Log.d("Init User Service"); Get.put(UserService()).init(); //注册Hive适配器 Hive.registerAdapter(ComicHistoryAdapter()); Hive.registerAdapter(NovelHistoryAdapter()); Hive.registerAdapter(DownloadStatusAdapter()); Hive.registerAdapter(ComicDownloadInfoAdapter()); Hive.registerAdapter(NovelDownloadInfoAdapter()); Hive.registerAdapter(LocalFavoriteAdapter()); await Get.put(DBService()).init(); //初始化设置服务 Get.put(AppSettingsService()); //初始化漫画下载服务 Get.put(ComicDownloadService()).init(); //初始化小说下载服务 Get.put(NovelDownloadService()).init(); } class AppScrollBehavior extends MaterialScrollBehavior { @override Set get dragDevices => PointerDeviceKind.values.toSet(); } class DMZJApp extends StatelessWidget { const DMZJApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DynamicColorBuilder( builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { final settings = Get.find(); settings.storeDynamicColorSchemes(lightDynamic, darkDynamic); final useDynamic = settings.useDynamicColor.value; return GetMaterialApp( title: '动漫之家 X', scrollBehavior: AppScrollBehavior(), theme: AppStyle.getLightTheme(colorScheme: useDynamic ? lightDynamic : null), darkTheme: AppStyle.getDarkTheme(colorScheme: useDynamic ? darkDynamic : null), themeMode: ThemeMode.values[Get.find().themeMode.value], initialRoute: AppPages.kIndex, localizationsDelegates: [ if (PlatformUtils.isWindows) FluentLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], locale: const Locale("zh", "CN"), supportedLocales: const [Locale("zh", "CN")], getPages: AppPages.routes, debugShowCheckedModeBanner: false, navigatorObservers: [FlutterSmartDialog.observer], builder: FlutterSmartDialog.init( loadingBuilder: ((msg) => const AppLoaddingWidget()), //字体大小不跟随系统变化 builder: (context, child) => Obx( () => MediaQuery( data: AppSettingsService.instance.useSystemFontSize.value ? MediaQuery.of(context) : MediaQuery.of(context) .copyWith(textScaler: const TextScaler.linear(1.0)), child: child!, ), ), ), ); }, ); } }