diff --git a/lib/modules/home/home_presenter.dart b/lib/modules/home/home_presenter.dart index ac0cabf..f45697b 100644 --- a/lib/modules/home/home_presenter.dart +++ b/lib/modules/home/home_presenter.dart @@ -10,6 +10,8 @@ class HomePresenterImpl extends HomePresenter showDetailButtonDidTap.listen(_showDetailButtonDidTap).addTo(disposeBag); didSwipeDown.voidListen(_didSwipeDown).addTo(disposeBag); userAvatarDidTap.voidListen(_userAvatarDidTap).addTo(disposeBag); + sideMenuDidShow.voidListen(_sideMenuDidShow).addTo(disposeBag); + sideMenuDidDismiss.voidListen(_sideMenuDidDismiss).addTo(disposeBag); surveysDidFetch.listen(_surveysDidFetch).addTo(disposeBag); surveysDidFailToFetch.listen(_surveysDidFailToFetch).addTo(disposeBag); @@ -91,4 +93,12 @@ class HomePresenterImpl extends HomePresenter void _userAvatarDidTap() { view.showSideMenu(); } + + 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 6efda96..2509616 100644 --- a/lib/modules/side_menu/side_menu_interactor.dart +++ b/lib/modules/side_menu/side_menu_interactor.dart @@ -1,10 +1,23 @@ part of 'side_menu_module.dart'; -abstract class SideMenuInteractorDelegate {} +abstract class SideMenuInteractorDelegate { + BehaviorSubject get logoutDidSuccess; +} abstract class SideMenuInteractor - extends Interactor {} + extends Interactor { + void logout(); +} class SideMenuInteractorImpl extends SideMenuInteractor { - // + final AuthRepository _authRepository = locator.get(); + + @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 d123fa6..33213ce 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 95ee1f8..339f718 100644 --- a/lib/modules/side_menu/side_menu_presenter.dart +++ b/lib/modules/side_menu/side_menu_presenter.dart @@ -5,6 +5,22 @@ abstract class SideMenuPresenter class SideMenuPresenterImpl extends SideMenuPresenter implements SideMenuViewDelegate, SideMenuInteractorDelegate { + SideMenuPresenterImpl() { + logoutButtonDidTap.voidListen(_logoutButtonDidTap); + logoutDidSuccess.voidListen(_logoutDidSuccess); + } + @override final logoutButtonDidTap = BehaviorSubject(); + + @override + final logoutDidSuccess = BehaviorSubject(); + + void _logoutButtonDidTap() { + interactor.logout(); + } + + void _logoutDidSuccess() { + router.replaceToLoginScreen(view.context); + } } diff --git a/lib/modules/side_menu/side_menu_router.dart b/lib/modules/side_menu/side_menu_router.dart index b5fadbd..ae2691b 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); + } }