You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.3KB

  1. import 'package:authentication_repository/authentication_repository.dart';
  2. import 'package:farm_tpf/presentation/screens/home/view/home_page.dart';
  3. import 'package:farm_tpf/presentation/screens/login/view/login_page.dart';
  4. import 'package:farm_tpf/presentation/screens/splash/view/splash_page.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:user_repository/user_repository.dart';
  8. import 'authentication/bloc/authentication_bloc.dart';
  9. class App extends StatelessWidget {
  10. const App({
  11. Key key,
  12. @required this.authenticationRepository,
  13. @required this.userRepository,
  14. }) : assert(authenticationRepository != null),
  15. assert(userRepository != null),
  16. super(key: key);
  17. final AuthenticationRepository authenticationRepository;
  18. final UserRepository userRepository;
  19. @override
  20. Widget build(BuildContext context) {
  21. return RepositoryProvider.value(
  22. value: authenticationRepository,
  23. child: BlocProvider(
  24. create: (_) => AuthenticationBloc(
  25. authenticationRepository: authenticationRepository,
  26. userRepository: userRepository,
  27. ),
  28. child: AppView(),
  29. ),
  30. );
  31. }
  32. }
  33. class AppView extends StatefulWidget {
  34. @override
  35. _AppViewState createState() => _AppViewState();
  36. }
  37. class _AppViewState extends State<AppView> {
  38. final _navigatorKey = GlobalKey<NavigatorState>();
  39. NavigatorState get _navigator => _navigatorKey.currentState;
  40. @override
  41. Widget build(BuildContext context) {
  42. return MaterialApp(
  43. navigatorKey: _navigatorKey,
  44. builder: (context, child) {
  45. return BlocListener<AuthenticationBloc, AuthenticationState>(
  46. listener: (context, state) {
  47. switch (state.status) {
  48. case AuthenticationStatus.authenticated:
  49. _navigator.pushAndRemoveUntil<void>(
  50. HomePage.route(),
  51. (route) => false,
  52. );
  53. break;
  54. case AuthenticationStatus.unauthenticated:
  55. _navigator.pushAndRemoveUntil<void>(
  56. LoginPage.route(),
  57. (route) => false,
  58. );
  59. break;
  60. default:
  61. break;
  62. }
  63. },
  64. child: child,
  65. );
  66. },
  67. onGenerateRoute: (_) => SplashPage.route(),
  68. );
  69. }
  70. }