From 688dabd169d01c98b5ab33e9bfe82a6aada92a79 Mon Sep 17 00:00:00 2001 From: MarkG Date: Thu, 24 Jun 2021 17:06:38 +0700 Subject: [PATCH] feat: integrate side menu screen (#61) - alert error when logout failure --- lib/modules/side_menu/side_menu_interactor.dart | 3 ++- lib/modules/side_menu/side_menu_module.dart | 1 + lib/modules/side_menu/side_menu_presenter.dart | 11 +++++++++++ lib/modules/side_menu/side_menu_view.dart | 6 ++++-- test/modules/home/home_view_test.dart | 6 +++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/modules/side_menu/side_menu_interactor.dart b/lib/modules/side_menu/side_menu_interactor.dart index f6315b53..9cc62c2c 100644 --- a/lib/modules/side_menu/side_menu_interactor.dart +++ b/lib/modules/side_menu/side_menu_interactor.dart @@ -2,6 +2,7 @@ part of 'side_menu_module.dart'; abstract class SideMenuInteractorDelegate { BehaviorSubject get logoutDidSuccess; + BehaviorSubject get logoutDidFail; } abstract class SideMenuInteractor @@ -22,6 +23,6 @@ class SideMenuInteractorImpl extends SideMenuInteractor { .logout() .then((value) => delegate?.logoutDidSuccess.add(null)) .onError( - (error, stackTrace) => delegate?.logoutDidSuccess.add(null)); + (error, stackTrace) => delegate?.logoutDidFail.add(error)); } } diff --git a/lib/modules/side_menu/side_menu_module.dart b/lib/modules/side_menu/side_menu_module.dart index 33213ce2..cebe5c05 100644 --- a/lib/modules/side_menu/side_menu_module.dart +++ b/lib/modules/side_menu/side_menu_module.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart' hide Router; import 'package:flutter/widgets.dart' hide Router; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:streams_provider/streams_provider.dart'; +import 'package:survey/components/alert/alert.dart'; import 'package:survey/core/viper/module.dart'; import 'package:survey/models/user_info.dart'; import 'package:survey/modules/login/login_module.dart'; diff --git a/lib/modules/side_menu/side_menu_presenter.dart b/lib/modules/side_menu/side_menu_presenter.dart index ee9a2f9e..7184cd9e 100644 --- a/lib/modules/side_menu/side_menu_presenter.dart +++ b/lib/modules/side_menu/side_menu_presenter.dart @@ -8,6 +8,7 @@ class SideMenuPresenterImpl extends SideMenuPresenter SideMenuPresenterImpl() { logoutButtonDidTap.voidListen(_logoutButtonDidTap).addTo(disposeBag); logoutDidSuccess.voidListen(_logoutDidSuccess).addTo(disposeBag); + logoutDidFail.listen(_logoutDidFail).addTo(disposeBag); stateDidInit.voidListen(_stateDidInit).addTo(disposeBag); } @@ -20,6 +21,12 @@ class SideMenuPresenterImpl extends SideMenuPresenter @override final logoutDidSuccess = BehaviorSubject(); + @override + final logoutDidFail = BehaviorSubject(); + + @override + final alertDialogDidClose = BehaviorSubject(); + void _logoutButtonDidTap() { interactor.logout(); } @@ -31,4 +38,8 @@ class SideMenuPresenterImpl extends SideMenuPresenter void _stateDidInit() { view.setUser(interactor.authenticatedUser); } + + void _logoutDidFail(Exception exception) { + view.alert(exception); + } } diff --git a/lib/modules/side_menu/side_menu_view.dart b/lib/modules/side_menu/side_menu_view.dart index db20a1f8..59f8e1df 100644 --- a/lib/modules/side_menu/side_menu_view.dart +++ b/lib/modules/side_menu/side_menu_view.dart @@ -1,12 +1,13 @@ part of 'side_menu_module.dart'; -abstract class SideMenuViewDelegate { +abstract class SideMenuViewDelegate with AlertViewMixinDelegate { BehaviorSubject get stateDidInit; BehaviorSubject get logoutButtonDidTap; } -abstract class SideMenuView extends View { +abstract class SideMenuView extends View + with AlertViewMixin { void setUser(UserInfo user); } @@ -19,6 +20,7 @@ class SideMenuViewImpl extends StatefulWidget { class _SideMenuViewImplState extends ViewState + with AlertViewMixin implements SideMenuView { final _user = BehaviorSubject(); diff --git a/test/modules/home/home_view_test.dart b/test/modules/home/home_view_test.dart index 0afafb63..0b6703f4 100644 --- a/test/modules/home/home_view_test.dart +++ b/test/modules/home/home_view_test.dart @@ -6,6 +6,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:quick_test/quick_widget_test.dart'; import 'package:skeletor/skeletor.dart'; +import 'package:streams_provider/streams_provider.dart'; import 'package:survey/models/survey_info.dart'; import 'package:survey/models/user_info.dart'; import 'package:survey/modules/home/home_module.dart'; @@ -22,7 +23,10 @@ class MockSideMenuPresenter extends Mock implements SideMenuPresenter, SideMenuViewDelegate, - SideMenuInteractorDelegate {} + SideMenuInteractorDelegate { + @override + final stateDidInit = BehaviorSubject(); +} @GenerateMocks([HomeViewDelegate, SideMenuInteractor, SideMenuRouter]) void main() {