Skip to content
Snippets Groups Projects
main.dart 2.19 KiB
Newer Older
tylersavery's avatar
tylersavery committed
import 'dart:io';
anfeichtinger's avatar
anfeichtinger committed
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:hive/hive.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';

import 'config/theme.dart';
import 'cubit/theme_cubit.dart';
import 'ui/screens/skeleton_screen.dart';

anfeichtinger's avatar
anfeichtinger committed
/// Try using const constructors as much as possible!

void main() async {
  /// Initialize packages
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();
tylersavery's avatar
tylersavery committed
  if (Platform.isAndroid) {
    await FlutterDisplayMode.setHighRefreshRate();
  }
  final Directory tmpDir = await getTemporaryDirectory();
anfeichtinger's avatar
anfeichtinger committed
  Hive.init(tmpDir.toString());
  final HydratedStorage storage = await HydratedStorage.build(
anfeichtinger's avatar
anfeichtinger committed
    storageDirectory: tmpDir,
  );

anfeichtinger's avatar
anfeichtinger committed
  HydratedBlocOverrides.runZoned(
    () => runApp(
      EasyLocalization(
        path: 'assets/translations',
        supportedLocales: const <Locale>[
anfeichtinger's avatar
anfeichtinger committed
          Locale('en'),
          Locale('de'),
        ],
        fallbackLocale: const Locale('en'),
        useFallbackTranslations: true,
        child: const MyApp(),
      ),
anfeichtinger's avatar
anfeichtinger committed
    ),
anfeichtinger's avatar
anfeichtinger committed
    storage: storage,
anfeichtinger's avatar
anfeichtinger committed
  );
}

class MyApp extends StatelessWidget {
anfeichtinger's avatar
anfeichtinger committed
  @override
  Widget build(BuildContext context) {
    return BlocProvider<ThemeCubit>(
      create: (BuildContext context) => ThemeCubit(),
      child: BlocBuilder<ThemeCubit, ThemeModeState>(
        builder: (BuildContext context, ThemeModeState state) {
anfeichtinger's avatar
anfeichtinger committed
          return MaterialApp(
            /// Localization is not available for the title.
            title: 'Flutter Production Boilerplate',

            /// Theme stuff
            theme: lightTheme,
            darkTheme: darkTheme,
            themeMode: state.themeMode,

            /// Localization stuff
anfeichtinger's avatar
anfeichtinger committed
            localizationsDelegates: context.localizationDelegates,
            supportedLocales: context.supportedLocales,
            locale: context.locale,
            debugShowCheckedModeBanner: false,
            home: const SkeletonScreen(),
anfeichtinger's avatar
anfeichtinger committed
          );
        },
      ),
    );
  }
}