main.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_localizations/flutter_localizations.dart';
  4. import 'l10n/app_localizations.dart';
  5. import 'ui/main_menu.dart';
  6. import 'utils/colors.dart';
  7. import 'utils/settings_manager.dart';
  8. import 'utils/score_manager.dart';
  9. import 'utils/google_play_games_manager.dart';
  10. import 'utils/locale_manager.dart';
  11. import 'utils/app_lifecycle_manager.dart';
  12. void main() async {
  13. WidgetsFlutterBinding.ensureInitialized();
  14. await SettingsManager.init();
  15. await ScoreManager.initialize();
  16. await LocaleManager.init();
  17. // Initialize Google Play Games (silent init, don't require sign-in)
  18. await GooglePlayGamesManager.instance.initialize();
  19. // Initialize app lifecycle manager for game suspension
  20. AppLifecycleManager.instance.initialize();
  21. runApp(const ZenTapApp());
  22. }
  23. class ZenTapApp extends StatefulWidget {
  24. const ZenTapApp({super.key});
  25. @override
  26. State<ZenTapApp> createState() => _ZenTapAppState();
  27. }
  28. class _ZenTapAppState extends State<ZenTapApp> {
  29. @override
  30. void initState() {
  31. super.initState();
  32. // Set up locale change callback
  33. LocaleManager.setLocaleChangeCallback(() {
  34. setState(() {});
  35. });
  36. }
  37. @override
  38. void dispose() {
  39. super.dispose();
  40. }
  41. @override
  42. Widget build(BuildContext context) {
  43. return MaterialApp(
  44. title: 'ZenTap',
  45. debugShowCheckedModeBanner: false,
  46. locale: LocaleManager.currentLocale,
  47. localizationsDelegates: const [
  48. AppLocalizations.delegate,
  49. GlobalMaterialLocalizations.delegate,
  50. GlobalWidgetsLocalizations.delegate,
  51. GlobalCupertinoLocalizations.delegate,
  52. ],
  53. supportedLocales: LocaleManager.supportedLocales,
  54. theme: ThemeData(
  55. // Use ZenTap color scheme
  56. colorScheme: ColorScheme.dark(
  57. primary: ZenColors.buttonBackground,
  58. secondary: ZenColors.defaultLink,
  59. surface: ZenColors.uiElements,
  60. onPrimary: ZenColors.buttonText,
  61. onSecondary: ZenColors.white,
  62. onSurface: ZenColors.primaryText,
  63. ),
  64. scaffoldBackgroundColor: ZenColors.appBackground,
  65. appBarTheme: const AppBarTheme(
  66. backgroundColor: ZenColors.appBackground,
  67. foregroundColor: ZenColors.primaryText,
  68. elevation: 0,
  69. systemOverlayStyle: SystemUiOverlayStyle.light,
  70. ),
  71. textTheme: const TextTheme(
  72. bodyLarge: TextStyle(color: ZenColors.primaryText),
  73. bodyMedium: TextStyle(color: ZenColors.primaryText),
  74. bodySmall: TextStyle(color: ZenColors.secondaryText),
  75. titleLarge: TextStyle(color: ZenColors.primaryText),
  76. titleMedium: TextStyle(color: ZenColors.primaryText),
  77. titleSmall: TextStyle(color: ZenColors.primaryText),
  78. ),
  79. elevatedButtonTheme: ElevatedButtonThemeData(
  80. style: ElevatedButton.styleFrom(
  81. backgroundColor: ZenColors.buttonBackground,
  82. foregroundColor: ZenColors.buttonText,
  83. elevation: 4,
  84. shape: RoundedRectangleBorder(
  85. borderRadius: BorderRadius.circular(12),
  86. ),
  87. ),
  88. ),
  89. dialogTheme: DialogThemeData(
  90. backgroundColor: ZenColors.uiElements,
  91. titleTextStyle: const TextStyle(
  92. color: ZenColors.primaryText,
  93. fontSize: 20,
  94. fontWeight: FontWeight.bold,
  95. ),
  96. contentTextStyle: TextStyle(
  97. color: ZenColors.secondaryText,
  98. fontSize: 16,
  99. ),
  100. ),
  101. useMaterial3: true,
  102. ),
  103. home: const MainMenu(),
  104. );
  105. }
  106. }