main.dart 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_chinese_chees/models/game_manager.dart';
  5. import 'package:flutter_localizations/flutter_localizations.dart';
  6. import 'package:shirne_dialog/shirne_dialog.dart';
  7. import 'package:window_manager/window_manager.dart';
  8. import 'global.dart';
  9. import 'l10n/generated/app_localizations.dart';
  10. import 'pages/home_page.dart';
  11. import 'game_board.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.isWindows || Platform.isMacOS || 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. );
  27. windowManager.waitUntilReadyToShow(windowOptions, () async {
  28. await windowManager.show();
  29. await windowManager.focus();
  30. });
  31. windowManager.addListener(MainWindowListener());
  32. }
  33. final gamer = GameManager();
  34. await gamer.init();
  35. runApp(const MyApp());
  36. }
  37. class MainWindowListener extends WindowListener {
  38. @override
  39. void onWindowClose() {
  40. GameManager.instance.engine?.dispose();
  41. }
  42. }
  43. class MyApp extends StatelessWidget {
  44. const MyApp({Key? key}) : super(key: key);
  45. @override
  46. Widget build(BuildContext context) {
  47. return MaterialApp(
  48. title: '中国象棋',
  49. debugShowCheckedModeBanner: false,
  50. // onGenerateRoute: Routes.onGenerateRoute,
  51. // initialRoute: Routes.home,
  52. onGenerateTitle: (BuildContext context) {
  53. if (!kIsWeb &&
  54. (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
  55. windowManager.setTitle(context.l10n.appTitle);
  56. }
  57. return context.l10n.appTitle;
  58. },
  59. navigatorKey: MyDialog.navigatorKey,
  60. localizationsDelegates: const [
  61. AppLocalizations.delegate,
  62. ShirneDialogLocalizations.delegate,
  63. GlobalMaterialLocalizations.delegate,
  64. GlobalWidgetsLocalizations.delegate,
  65. GlobalCupertinoLocalizations.delegate,
  66. ],
  67. supportedLocales: const [
  68. Locale('en', ''),
  69. Locale('zh', 'CN'),
  70. ],
  71. theme: AppTheme.createTheme(),
  72. highContrastTheme: AppTheme.createTheme(isHighContrast: true),
  73. darkTheme: AppTheme.createTheme(isDark: true),
  74. highContrastDarkTheme: AppTheme.createTheme(
  75. isDark: true,
  76. isHighContrast: true,
  77. ),
  78. home: const HomePage(
  79. isMain: true,
  80. child: GameBoard(),
  81. ),
  82. );
  83. }
  84. }