import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_android_app/presentation/currency_bloc/currency_bloc.dart'; import 'package:flutter_android_app/presentation/favourites_bloc/favourites_bloc.dart'; import 'package:flutter_android_app/presentation/home_page/bloc/bloc.dart'; import 'package:flutter_android_app/presentation/home_page/home_page.dart'; import 'package:flutter_android_app/presentation/locale_bloc/locale_bloc.dart'; import 'package:flutter_android_app/presentation/locale_bloc/locale_state.dart'; import 'package:flutter_android_app/repositories/crypto_repository.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'components/locale/l10n/app_localizations.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { bool isDarkMode = false; @override Widget build(BuildContext context) { return BlocProvider( lazy: false, create: (context) => FavouritesBloc(), child: BlocProvider( lazy: false, create: (context) => CurrencyBloc(), child: BlocProvider( lazy: false, create: (context) => LocaleBloc(Locale(_getLangCode(Platform.localeName))), child: BlocBuilder( builder: (context, state) => MaterialApp( title: 'Cryptocurrency Exchange App', locale: state.currentLocale, localizationsDelegates: AppLocale.localizationsDelegates, supportedLocales: AppLocale.supportedLocales, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.indigoAccent, brightness: isDarkMode ? Brightness.dark : Brightness.light, ), useMaterial3: true, brightness: isDarkMode ? Brightness.dark : Brightness.light, ), debugShowCheckedModeBanner: false, home: RepositoryProvider( lazy: true, create: (_) => CryptoRepository(), child: BlocProvider( lazy: false, create: (context) => HomeBloc(context.read()), child: MainScaffold( toggleDarkMode: _toggleDarkMode, isDarkModeSelected: isDarkMode, ), ), ), ), ), ), ), ); } void _toggleDarkMode() { setState(() { isDarkMode = !isDarkMode; }); } String _getLangCode(String fullLocaleName) { int index = fullLocaleName.indexOf('_'); return index != -1 ? fullLocaleName.substring(0, index) : fullLocaleName; } }