import 'package:common/.generated/l10n/app_localizations.dart';
import 'package:common/localization/l10n_utils.dart';
import 'package:comwell_key_app/domain/repositories/booking_details_repository.dart';
import 'package:comwell_key_app/connection_state/connection_state_cubit.dart';
import 'package:comwell_key_app/key/bloc/key_bloc.dart';
import 'package:comwell_key_app/key/repository/key_repository.dart';
import 'package:comwell_key_app/overview/cubit/overview_cubit.dart';
import 'package:comwell_key_app/presentation/app/bloc/app_cubit.dart';
import 'package:comwell_key_app/presentation/app/bloc/profile_cubit.dart';
import 'package:comwell_key_app/routing/app_router.dart';
import 'package:comwell_key_app/themes/app_button_styles.dart';
import 'package:comwell_key_app/themes/app_textstyles.dart';
import 'package:comwell_key_app/themes/dark_theme.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/utils/context_utils.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/seos_repository.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:payment_plugin/presentation/app/bloc/payment_cards_cubit.dart';
import 'package:payment_plugin/presentation/app/bloc/payment_cubit.dart';
class ComwellApp extends StatelessWidget {
const ComwellApp({super.key});
@override
Widget build(BuildContext context) {
return MultiRepositoryProvider(
providers: [
RepositoryProvider(create: (context) => lightTheme),
RepositoryProvider(create: (context) => AppTextStyles()),
RepositoryProvider(
create: (context) {
final theme = Theme.of(context);
return AppButtonStyles(theme.colorScheme, context.read());
},
),
RepositoryProvider(create: (context) => ComwellTracking()),
],
child: MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => AppCubit(locator.get()),
),
BlocProvider(
create: (context) => ConnectionStateCubit(
locator.get(),
locator.get(),
),
),
BlocProvider<KeyBloc>(
lazy: true,
create: (BuildContext context) => KeyBloc(
keyRepository: locator<KeyRepository>(),
seosRepository: locator<SeosRepository>(),
bookingDetailsRepository: locator<BookingDetailsRepository>(),
),
),
BlocProvider<OverviewCubit>(
lazy: true,
create: (BuildContext context) => OverviewCubit(
locator.get(),
locator.get(),
),
),
BlocProvider<ProfileCubit>(
create: (BuildContext context) => ProfileCubit(
locator.get(),
locator.get(),
),
),
BlocProvider<PaymentCubit>(
lazy: false,
create: (context) => PaymentCubit(adyenRepository: locator()),
),
BlocProvider<PaymentCardsCubit>(
create: (context) => PaymentCardsCubit(adyenRepository: locator()),
),
],
child: MaterialApp.router(
title: 'Comwell Key App',
routerConfig: router,
supportedLocales: AppLocalizations.supportedLocales,
localizationsDelegates: localizationDelegates,
builder: (context, child) {
if (child != null) {
return MediaQuery(
data: context.mq.copyWith(textScaler: TextScaler.noScaling),
child: child,
);
}
return const SizedBox.shrink();
},
theme: lightTheme,
darkTheme: darkTheme,
themeMode: ThemeMode.system,
),
),
);
}
}