v1.0.1
This commit is contained in:
140
lib/main.dart
Normal file
140
lib/main.dart
Normal file
@@ -0,0 +1,140 @@
|
||||
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<PointerDeviceKind> 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<AppSettingsService>();
|
||||
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<AppSettingsService>().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!,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user