import 'package:authentication_repository/authentication_repository.dart'; import 'package:farm_tpf/presentation/screens/home/view/home_page.dart'; import 'package:farm_tpf/presentation/screens/login/view/login_page.dart'; import 'package:farm_tpf/presentation/screens/splash/view/splash_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:user_repository/user_repository.dart'; import 'authentication/bloc/authentication_bloc.dart'; class App extends StatelessWidget { const App({ Key key, @required this.authenticationRepository, @required this.userRepository, }) : assert(authenticationRepository != null), assert(userRepository != null), super(key: key); final AuthenticationRepository authenticationRepository; final UserRepository userRepository; @override Widget build(BuildContext context) { return RepositoryProvider.value( value: authenticationRepository, child: BlocProvider( create: (_) => AuthenticationBloc( authenticationRepository: authenticationRepository, userRepository: userRepository, ), child: AppView(), ), ); } } class AppView extends StatefulWidget { @override _AppViewState createState() => _AppViewState(); } class _AppViewState extends State { final _navigatorKey = GlobalKey(); NavigatorState get _navigator => _navigatorKey.currentState; @override Widget build(BuildContext context) { return MaterialApp( navigatorKey: _navigatorKey, builder: (context, child) { return BlocListener( listener: (context, state) { switch (state.status) { case AuthenticationStatus.authenticated: _navigator.pushAndRemoveUntil( HomePage.route(), (route) => false, ); break; case AuthenticationStatus.unauthenticated: _navigator.pushAndRemoveUntil( LoginPage.route(), (route) => false, ); break; default: break; } }, child: child, ); }, onGenerateRoute: (_) => SplashPage.route(), ); } }