Files
BudgetApp/lib/main.dart
T
2025-07-07 18:44:08 +03:00

109 lines
4.1 KiB
Dart

import 'package:budget_app/pages/home/home_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; // Добавляем импорт
import 'package:get_it/get_it.dart';
import '/l10n/app_localizations.dart';
import 'injection_container.dart' as di;
import 'logic/auth/auth_bloc.dart';
import 'logic/settings/settings_cubit.dart'; // Импортируем SettingsCubit
import 'logic/sms/sms_cubit.dart';
import 'logic/transaction/transaction_bloc.dart';
import 'logic/user/user_cubit.dart'; // Импортируем UserCubit
import 'pages/login/login_page.dart';
import 'theme/app_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import '/l10n/app_localizations.dart';
import '/logic/auth/auth_bloc.dart';
import '/logic/settings/settings_cubit.dart';
import '/logic/sms/sms_cubit.dart';
import '/logic/transaction/transaction_bloc.dart';
import '/logic/user/user_cubit.dart';
import '/pages/home/home_page.dart';
import '/pages/login/login_page.dart';
import '/pages/splash/splash_screen.dart';
import '/theme/app_theme.dart';
import 'injection_container.dart' as di;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await di.initDependencies();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => GetIt.instance<UserCubit>()..init(),
),
BlocProvider(
create: (context) => GetIt.instance<AuthBloc>(),
),
BlocProvider(create: (context) => GetIt.instance<SettingsCubit>()),
BlocProvider(create: (context) => GetIt.instance<TransactionBloc>()),
BlocProvider(create: (context) => GetIt.instance<SmsCubit>()),
],
child: BlocListener<UserCubit, UserState>(
// Запускаем AuthBloc, как только UserCubit завершил загрузку,
// независимо от того, найден пользователь или нет.
listenWhen: (previous, current) => current is UserLoaded,
listener: (context, userState) {
context.read<AuthBloc>().add(AuthStarted());
},
child: BlocBuilder<SettingsCubit, SettingsState>(
builder: (context, settingsState) {
final isDarkMode = settingsState is SettingsLoaded
? settingsState.isDarkMode
: false;
final languageCode = settingsState is SettingsLoaded
? settingsState.languageCode
: 'ru';
return MaterialApp(
title: AppLocalizations.of(context)?.appTitle ?? 'Budget App',
theme: AppTheme.lightTheme(),
darkTheme: AppTheme.darkTheme(),
themeMode: isDarkMode ? ThemeMode.dark : ThemeMode.light,
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: AppLocalizations.supportedLocales,
locale: Locale(languageCode),
home: BlocBuilder<UserCubit, UserState>(
builder: (context, userState) {
if (userState is UserLoading || userState is UserInitial) {
return const SplashScreen();
}
return BlocBuilder<AuthBloc, AuthState>(
builder: (context, authState) {
if (authState is AuthAuthenticated) {
return const HomePage();
} else {
return const LoginPage();
}
},
);
},
),
);
},
),
),
);
}
}