import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_boilerplate/common/bloc/connectivity/index.dart'; import 'package:flutter_boilerplate/common/constant/env.dart'; import 'package:flutter_boilerplate/common/http/api_provider.dart'; import 'package:flutter_boilerplate/common/route/route_generator.dart'; import 'package:flutter_boilerplate/common/route/routes.dart'; import 'package:flutter_boilerplate/common/util/internet_check.dart'; import 'package:flutter_boilerplate/feature/authentication/bloc/index.dart'; import 'package:flutter_boilerplate/feature/authentication/resource/user_repository.dart'; import 'package:flutter_boilerplate/generated/i18n.dart'; import 'theme.dart'; class App extends StatelessWidget { final Env env; App({Key key, @required this.env}) : super(key: key); @override Widget build(BuildContext context) { return MultiRepositoryProvider( providers: [ RepositoryProvider( create: (context) => env, lazy: true, ), RepositoryProvider( create: (context) => InternetCheck(), lazy: true, ), RepositoryProvider( create: (context) => UserRepository(), lazy: true, ), RepositoryProvider( create: (context) => ApiProvider(), lazy: true, ), ], child: MultiBlocProvider( providers: [ BlocProvider( create: (context) { return ConnectivityBloc(); }, ), BlocProvider( create: (context) { return AuthenticationBloc( userRepository: RepositoryProvider.of(context)) ..add(AuthStarted()); }, ), ], child: MaterialApp( localizationsDelegates: const < LocalizationsDelegate>[ S.delegate, ], supportedLocales: S.delegate.supportedLocales, localeResolutionCallback: S.delegate.resolution(fallback: const Locale('en', '')), localeListResolutionCallback: S.delegate.listResolution(fallback: const Locale('en', '')), title: 'Flutter Demo', theme: basicTheme, onGenerateRoute: RouteGenerator.generateRoute, initialRoute: Routes.landing, ), )); } }