import 'package:english_learning/core/services/dio_client.dart'; import 'package:english_learning/core/services/repositories/exercise_repository.dart'; import 'package:english_learning/core/services/repositories/history_repository.dart'; import 'package:english_learning/core/utils/styles/theme.dart'; import 'package:english_learning/features/auth/provider/user_provider.dart'; import 'package:english_learning/features/auth/provider/validator_provider.dart'; import 'package:english_learning/features/history/provider/history_provider.dart'; import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart'; import 'package:english_learning/features/learning/modules/level/providers/level_provider.dart'; import 'package:english_learning/features/learning/modules/topics/providers/topic_provider.dart'; import 'package:english_learning/features/learning/provider/section_provider.dart'; import 'package:english_learning/features/splash/screens/splash_screen.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MultiProvider( providers: [ Provider( create: (_) => DioClient(), ), ChangeNotifierProvider(create: (_) => ValidatorProvider()), ChangeNotifierProvider(create: (_) => TopicProvider()), ChangeNotifierProvider(create: (_) => LevelProvider()), ChangeNotifierProvider(create: (_) => SectionProvider()), ChangeNotifierProvider(create: (_) => UserProvider()), ProxyProvider( update: (_, dioClient, __) => ExerciseRepository(dioClient), ), ProxyProvider( update: (_, dioClient, __) => HistoryRepository(dioClient), ), ChangeNotifierProxyProvider2( create: (context) => HistoryProvider( context.read(), context.read(), ), update: (context, historyRepository, sectionProvider, previous) => HistoryProvider( historyRepository, sectionProvider, ), ), ChangeNotifierProxyProvider2( create: (context) => ExerciseProvider( context.read(), context.read(), ), update: (context, userProvider, exerciseRepository, previous) => ExerciseProvider( exerciseRepository, userProvider, )..updateFrom(previous), ), ], child: Consumer( builder: (context, userProvider, _) { return MaterialApp( debugShowCheckedModeBanner: false, theme: appTheme(), home: const SplashScreen(), ); }, ), ); } }