main.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 'widgets/game_wrapper.dart';
  11. import 'game_board.dart';
  12. void main() async {
  13. WidgetsFlutterBinding.ensureInitialized();
  14. if (!kIsWeb && (Platform.isWindows || Platform.isMacOS || Platform.isLinux)) {
  15. await windowManager.ensureInitialized();
  16. const windowOptions = WindowOptions(
  17. size: Size(1024, 720),
  18. center: true,
  19. backgroundColor: Colors.transparent,
  20. skipTaskbar: false,
  21. titleBarStyle: TitleBarStyle.normal,
  22. );
  23. windowManager.waitUntilReadyToShow(windowOptions, () async {
  24. await windowManager.show();
  25. await windowManager.focus();
  26. });
  27. windowManager.addListener(MainWindowListener());
  28. }
  29. final gamer = GameManager();
  30. await gamer.init();
  31. runApp(const MainApp());
  32. }
  33. class MainWindowListener extends WindowListener {
  34. @override
  35. void onWindowClose() {
  36. GameManager.instance.engine?.dispose();
  37. }
  38. }
  39. class MainApp extends StatelessWidget {
  40. const MainApp({Key? key}) : super(key: key);
  41. @override
  42. Widget build(BuildContext context) {
  43. return MaterialApp(
  44. title: '',
  45. onGenerateTitle: (BuildContext context) {
  46. if (!kIsWeb &&
  47. (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
  48. windowManager.setTitle(context.l10n.appTitle);
  49. }
  50. return context.l10n.appTitle;
  51. },
  52. navigatorKey: MyDialog.navigatorKey,
  53. localizationsDelegates: const [
  54. AppLocalizations.delegate,
  55. ShirneDialogLocalizations.delegate,
  56. GlobalMaterialLocalizations.delegate,
  57. GlobalWidgetsLocalizations.delegate,
  58. GlobalCupertinoLocalizations.delegate,
  59. ],
  60. supportedLocales: const [
  61. Locale('en', ''),
  62. Locale('zh', 'CN'),
  63. ],
  64. theme: AppTheme.createTheme(),
  65. highContrastTheme: AppTheme.createTheme(isHighContrast: true),
  66. darkTheme: AppTheme.createTheme(isDark: true),
  67. highContrastDarkTheme: AppTheme.createTheme(
  68. isDark: true,
  69. isHighContrast: true,
  70. ),
  71. home: const GameWrapper(
  72. isMain: true,
  73. child: GameBoard(),
  74. ),
  75. );
  76. }
  77. }