import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hive/hive.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twister/config/theme.dart'; import 'package:twister/cubit/bottom_nav_cubit.dart'; import 'package:twister/cubit/game_cubit.dart'; import 'package:twister/cubit/settings_cubit.dart'; import 'package:twister/cubit/theme_cubit.dart'; import 'package:twister/ui/skeleton.dart'; void main() async { /// Initialize packages WidgetsFlutterBinding.ensureInitialized(); await EasyLocalization.ensureInitialized(); final Directory tmpDir = await getTemporaryDirectory(); Hive.init(tmpDir.toString()); HydratedBloc.storage = await HydratedStorage.build( storageDirectory: tmpDir, ); runApp( EasyLocalization( path: 'assets/translations', supportedLocales: const <Locale>[ Locale('en'), Locale('fr'), ], fallbackLocale: const Locale('en'), useFallbackTranslations: true, child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider<BottomNavCubit>(create: (context) => BottomNavCubit()), BlocProvider<GameCubit>(create: (context) => GameCubit()), BlocProvider<SettingsCubit>(create: (context) => SettingsCubit()), BlocProvider<ThemeCubit>(create: (context) => ThemeCubit()), ], child: BlocBuilder<ThemeCubit, ThemeModeState>( builder: (BuildContext context, ThemeModeState state) { return MaterialApp( title: 'Twister', home: const SkeletonScreen(), // Theme stuff theme: lightTheme, darkTheme: darkTheme, themeMode: state.themeMode, // Localization stuff localizationsDelegates: context.localizationDelegates, supportedLocales: context.supportedLocales, locale: context.locale, debugShowCheckedModeBanner: false, ); }), ); } }