import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; // ignore: depend_on_referenced_packages import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:proxibuy/data/models/datasources/offer_data_source.dart'; import 'package:proxibuy/data/repositories/offer_repository.dart'; import 'package:proxibuy/presentation/auth/bloc/auth_bloc.dart'; import 'package:proxibuy/presentation/notification_preferences/bloc/notification_preferences_bloc.dart'; import 'package:proxibuy/presentation/notification_preferences/bloc/notification_preferences_event.dart'; import 'package:proxibuy/presentation/offer/bloc/offer_bloc.dart'; import 'package:proxibuy/presentation/reservation/cubit/reservation_cubit.dart'; import 'core/config/app_colors.dart'; import 'presentation/pages/onboarding_page.dart'; void main() { Animate.restartOnHotReload = true; runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MultiRepositoryProvider( providers: [ RepositoryProvider( create: (context) => OfferRepository(offerDataSource: MockOfferDataSource()), ), ], child: MultiBlocProvider( providers: [ BlocProvider(create: (context) => AuthBloc()), BlocProvider( create: (context) => NotificationPreferencesBloc()..add(LoadCategories()), ), BlocProvider( create: (context) => OffersBloc( offerRepository: context.read(), ), ), BlocProvider( create: (context) => ReservationCubit(), ), ], child: MaterialApp( title: 'Proxibuy', debugShowCheckedModeBanner: false, localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('fa')], locale: const Locale('fa'), theme: ThemeData( fontFamily: 'Dana', scaffoldBackgroundColor: Colors.white, colorScheme: ColorScheme.fromSeed( seedColor: AppColors.primary, primary: AppColors.primary, surface: Colors.white, ), appBarTheme: const AppBarTheme( backgroundColor: AppColors.primary, foregroundColor: Colors.white, elevation: 0, ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: Colors.white, floatingLabelBehavior: FloatingLabelBehavior.always, contentPadding: const EdgeInsets.symmetric( vertical: 18, horizontal: 20, ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: AppColors.border), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: AppColors.border), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide( color: AppColors.primary, width: 2, ), ), labelStyle: const TextStyle(color: Colors.black), // ignore: deprecated_member_use hintStyle: TextStyle(color: Colors.black.withOpacity(0.8)), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: Colors.black, // رنگ متن دکمه Outlined padding: const EdgeInsets.symmetric(vertical: 16), side: const BorderSide(color: Colors.grey), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(50), ), textStyle: const TextStyle( fontFamily: 'Dana', fontSize: 16, color: Colors.black, ), ), ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: AppColors.button, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(50), ), textStyle: const TextStyle( fontFamily: 'Dana', fontSize: 16, fontWeight: FontWeight.bold, ), ), ), ), home: const OnboardingPage(), ), ), ); } }