main.dart 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_chinese_chees/routes.dart';
  6. import 'package:flutter_chinese_chees/theme.dart';
  7. import 'package:flutter_chinese_chees/utils/game_manager.dart';
  8. import 'package:window_manager/window_manager.dart';
  9. import 'package:flutter_localizations/flutter_localizations.dart';
  10. import 'package:shirne_dialog/shirne_dialog.dart';
  11. import 'l10n/generated/app_localizations.dart';
  12. /// Description: enter point
  13. /// Time : 04/28/2023 Friday
  14. /// Author : liuyuqi.gov@msn.cn
  15. void main() async {
  16. WidgetsFlutterBinding.ensureInitialized();
  17. // pc 平台,非 web 版本
  18. if (!kIsWeb && (Platform.isMacOS || Platform.isWindows || Platform.isLinux)) {
  19. await windowManager.ensureInitialized();
  20. const windowOptions = WindowOptions(
  21. size: Size(1024, 720),
  22. center: true,
  23. backgroundColor: Colors.transparent,
  24. skipTaskbar: false,
  25. titleBarStyle: TitleBarStyle.normal);
  26. windowManager.waitUntilReadyToShow(windowOptions, () async {
  27. await windowManager.show();
  28. await windowManager.focus();
  29. });
  30. windowManager.addListener(MainWindowListener());
  31. }
  32. final gamer = GameManager();
  33. await gamer.init();
  34. runApp(const MyApp());
  35. if (Platform.isAndroid) {
  36. SystemUiOverlayStyle systemUiOverlayStyle =
  37. const SystemUiOverlayStyle(statusBarColor: Colors.transparent);
  38. SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
  39. }
  40. }
  41. class MainWindowListener extends WindowListener {
  42. @override
  43. void onWindowClose() {
  44. super.onWindowClose();
  45. GameManager.instance.engine?.dispose();
  46. }
  47. }
  48. class MyApp extends StatelessWidget {
  49. const MyApp({super.key});
  50. // This widget is the root of your application.
  51. @override
  52. Widget build(BuildContext context) {
  53. return MaterialApp(
  54. title: '中国象棋',
  55. debugShowCheckedModeBanner: false,
  56. onGenerateRoute: Routes.onGenerateRoute,
  57. initialRoute: Routes.home,
  58. onGenerateTitle: (BuildContext context) {
  59. if (!kIsWeb &&
  60. (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
  61. windowManager.setTitle(context.l10n.appTitle);
  62. }
  63. return context.l10n.appTitle;
  64. },
  65. navigatorKey: MyDialog.navigatorKey,
  66. localizationsDelegates: const [
  67. AppLocalizations.delegate,
  68. ShirneDialogLocalizations.delegate,
  69. GlobalMaterialLocalizations.delegate,
  70. GlobalWidgetsLocalizations.delegate,
  71. GlobalCupertinoLocalizations.delegate,
  72. ],
  73. supportedLocales: const [
  74. Locale('en', ''),
  75. Locale('zh', 'CN'),
  76. ],
  77. theme: AppTheme.createTheme(),
  78. highContrastTheme: AppTheme.createTheme(isHighContrast: true),
  79. darkTheme: AppTheme.createTheme(isDark: true),
  80. highContrastDarkTheme: AppTheme.createTheme(
  81. isDark: true,
  82. isHighContrast: true,
  83. ),
  84. );
  85. }
  86. }