From fae74f779f66029ccab629d56c97585749d5c3e1 Mon Sep 17 00:00:00 2001 From: MarkG Date: Mon, 21 Jun 2021 14:26:55 +0700 Subject: [PATCH] feat: integrate side menu screen (#61) # Conflicts: # lib/modules/home/home_presenter.dart --- lib/modules/home/home_presenter.dart | 10 ++++++++ .../side_menu/side_menu_interactor.dart | 23 +++++++++++++++--- lib/modules/side_menu/side_menu_module.dart | 3 +++ .../side_menu/side_menu_presenter.dart | 24 +++++++++++++++++++ lib/modules/side_menu/side_menu_router.dart | 9 +++++-- lib/modules/side_menu/side_menu_view.dart | 9 +++---- 6 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lib/modules/home/home_presenter.dart b/lib/modules/home/home_presenter.dart index 26cad4c4..34d97146 100644 --- a/lib/modules/home/home_presenter.dart +++ b/lib/modules/home/home_presenter.dart @@ -11,6 +11,8 @@ class HomePresenterImpl extends HomePresenter didSwipeDown.voidListen(_didSwipeDown).addTo(disposeBag); userAvatarDidTap.voidListen(_userAvatarDidTap).addTo(disposeBag); currentPageDidChange.listen(_currentPageDidChange).addTo(disposeBag); + sideMenuDidShow.voidListen(_sideMenuDidShow).addTo(disposeBag); + sideMenuDidDismiss.voidListen(_sideMenuDidDismiss).addTo(disposeBag); surveysDidFetchFromCached .listen(_surveysDidFetchFromCached) @@ -128,4 +130,12 @@ class HomePresenterImpl extends HomePresenter void _currentPageDidChange(int page) { view.setCurrentPage(page); } + + void _sideMenuDidShow() { + view.setUserInteractionEnable(isEnabled: false); + } + + void _sideMenuDidDismiss() { + view.setUserInteractionEnable(isEnabled: true); + } } diff --git a/lib/modules/side_menu/side_menu_interactor.dart b/lib/modules/side_menu/side_menu_interactor.dart index 6efda961..f6315b53 100644 --- a/lib/modules/side_menu/side_menu_interactor.dart +++ b/lib/modules/side_menu/side_menu_interactor.dart @@ -1,10 +1,27 @@ part of 'side_menu_module.dart'; -abstract class SideMenuInteractorDelegate {} +abstract class SideMenuInteractorDelegate { + BehaviorSubject get logoutDidSuccess; +} abstract class SideMenuInteractor - extends Interactor {} + extends Interactor { + UserInfo get authenticatedUser; + void logout(); +} class SideMenuInteractorImpl extends SideMenuInteractor { - // + final AuthRepository _authRepository = locator.get(); + + @override + UserInfo get authenticatedUser => _authRepository.user!; + + @override + void logout() { + _authRepository + .logout() + .then((value) => delegate?.logoutDidSuccess.add(null)) + .onError( + (error, stackTrace) => delegate?.logoutDidSuccess.add(null)); + } } diff --git a/lib/modules/side_menu/side_menu_module.dart b/lib/modules/side_menu/side_menu_module.dart index d123fa61..33213ce2 100644 --- a/lib/modules/side_menu/side_menu_module.dart +++ b/lib/modules/side_menu/side_menu_module.dart @@ -4,8 +4,11 @@ import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:streams_provider/streams_provider.dart'; import 'package:survey/core/viper/module.dart'; import 'package:survey/models/user_info.dart'; +import 'package:survey/modules/login/login_module.dart'; import 'package:survey/modules/screen.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:survey/repositories/auth_repository.dart'; +import 'package:survey/services/locator/locator_service.dart'; part 'side_menu_interactor.dart'; part 'side_menu_router.dart'; diff --git a/lib/modules/side_menu/side_menu_presenter.dart b/lib/modules/side_menu/side_menu_presenter.dart index 95ee1f89..ee9a2f9e 100644 --- a/lib/modules/side_menu/side_menu_presenter.dart +++ b/lib/modules/side_menu/side_menu_presenter.dart @@ -5,6 +5,30 @@ abstract class SideMenuPresenter class SideMenuPresenterImpl extends SideMenuPresenter implements SideMenuViewDelegate, SideMenuInteractorDelegate { + SideMenuPresenterImpl() { + logoutButtonDidTap.voidListen(_logoutButtonDidTap).addTo(disposeBag); + logoutDidSuccess.voidListen(_logoutDidSuccess).addTo(disposeBag); + stateDidInit.voidListen(_stateDidInit).addTo(disposeBag); + } + + @override + final stateDidInit = BehaviorSubject(); + @override final logoutButtonDidTap = BehaviorSubject(); + + @override + final logoutDidSuccess = BehaviorSubject(); + + void _logoutButtonDidTap() { + interactor.logout(); + } + + void _logoutDidSuccess() { + router.replaceToLoginScreen(view.context); + } + + void _stateDidInit() { + view.setUser(interactor.authenticatedUser); + } } diff --git a/lib/modules/side_menu/side_menu_router.dart b/lib/modules/side_menu/side_menu_router.dart index b5fadbde..ae2691b1 100644 --- a/lib/modules/side_menu/side_menu_router.dart +++ b/lib/modules/side_menu/side_menu_router.dart @@ -1,7 +1,12 @@ part of 'side_menu_module.dart'; -abstract class SideMenuRouter extends Router {} +abstract class SideMenuRouter extends Router { + void replaceToLoginScreen(BuildContext context); +} class SideMenuRouterImpl extends SideMenuRouter { - // + @override + void replaceToLoginScreen(BuildContext context) { + context.navigator.pushReplacementNamed(LoginModule.routePath); + } } diff --git a/lib/modules/side_menu/side_menu_view.dart b/lib/modules/side_menu/side_menu_view.dart index 86a6d13c..db20a1f8 100644 --- a/lib/modules/side_menu/side_menu_view.dart +++ b/lib/modules/side_menu/side_menu_view.dart @@ -1,6 +1,8 @@ part of 'side_menu_module.dart'; abstract class SideMenuViewDelegate { + BehaviorSubject get stateDidInit; + BehaviorSubject get logoutButtonDidTap; } @@ -23,12 +25,7 @@ class _SideMenuViewImplState @override void initState() { super.initState(); - - final user = UserInfo(); - user.email = "mark@nimblehq.co"; - user.avatarUrl = - "https://en.gravatar.com/userimage/137591909/6a42a5a20cd79d50edb957644bc41b0c.png"; - setUser(user); + delegate?.stateDidInit.add(null); } @override