Skip to content

Commit fae74f7

Browse files
committed
feat: integrate side menu screen (#61)
# Conflicts: # lib/modules/home/home_presenter.dart
1 parent 138b5fe commit fae74f7

6 files changed

+67
-11
lines changed

lib/modules/home/home_presenter.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class HomePresenterImpl extends HomePresenter
1111
didSwipeDown.voidListen(_didSwipeDown).addTo(disposeBag);
1212
userAvatarDidTap.voidListen(_userAvatarDidTap).addTo(disposeBag);
1313
currentPageDidChange.listen(_currentPageDidChange).addTo(disposeBag);
14+
sideMenuDidShow.voidListen(_sideMenuDidShow).addTo(disposeBag);
15+
sideMenuDidDismiss.voidListen(_sideMenuDidDismiss).addTo(disposeBag);
1416

1517
surveysDidFetchFromCached
1618
.listen(_surveysDidFetchFromCached)
@@ -128,4 +130,12 @@ class HomePresenterImpl extends HomePresenter
128130
void _currentPageDidChange(int page) {
129131
view.setCurrentPage(page);
130132
}
133+
134+
void _sideMenuDidShow() {
135+
view.setUserInteractionEnable(isEnabled: false);
136+
}
137+
138+
void _sideMenuDidDismiss() {
139+
view.setUserInteractionEnable(isEnabled: true);
140+
}
131141
}
Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
part of 'side_menu_module.dart';
22

3-
abstract class SideMenuInteractorDelegate {}
3+
abstract class SideMenuInteractorDelegate {
4+
BehaviorSubject<void> get logoutDidSuccess;
5+
}
46

57
abstract class SideMenuInteractor
6-
extends Interactor<SideMenuInteractorDelegate> {}
8+
extends Interactor<SideMenuInteractorDelegate> {
9+
UserInfo get authenticatedUser;
10+
void logout();
11+
}
712

813
class SideMenuInteractorImpl extends SideMenuInteractor {
9-
//
14+
final AuthRepository _authRepository = locator.get();
15+
16+
@override
17+
UserInfo get authenticatedUser => _authRepository.user!;
18+
19+
@override
20+
void logout() {
21+
_authRepository
22+
.logout()
23+
.then((value) => delegate?.logoutDidSuccess.add(null))
24+
.onError<Exception>(
25+
(error, stackTrace) => delegate?.logoutDidSuccess.add(null));
26+
}
1027
}

lib/modules/side_menu/side_menu_module.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
44
import 'package:streams_provider/streams_provider.dart';
55
import 'package:survey/core/viper/module.dart';
66
import 'package:survey/models/user_info.dart';
7+
import 'package:survey/modules/login/login_module.dart';
78
import 'package:survey/modules/screen.dart';
89
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
10+
import 'package:survey/repositories/auth_repository.dart';
11+
import 'package:survey/services/locator/locator_service.dart';
912
part 'side_menu_interactor.dart';
1013

1114
part 'side_menu_router.dart';

lib/modules/side_menu/side_menu_presenter.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,30 @@ abstract class SideMenuPresenter
55

66
class SideMenuPresenterImpl extends SideMenuPresenter
77
implements SideMenuViewDelegate, SideMenuInteractorDelegate {
8+
SideMenuPresenterImpl() {
9+
logoutButtonDidTap.voidListen(_logoutButtonDidTap).addTo(disposeBag);
10+
logoutDidSuccess.voidListen(_logoutDidSuccess).addTo(disposeBag);
11+
stateDidInit.voidListen(_stateDidInit).addTo(disposeBag);
12+
}
13+
14+
@override
15+
final stateDidInit = BehaviorSubject<void>();
16+
817
@override
918
final logoutButtonDidTap = BehaviorSubject<void>();
19+
20+
@override
21+
final logoutDidSuccess = BehaviorSubject<void>();
22+
23+
void _logoutButtonDidTap() {
24+
interactor.logout();
25+
}
26+
27+
void _logoutDidSuccess() {
28+
router.replaceToLoginScreen(view.context);
29+
}
30+
31+
void _stateDidInit() {
32+
view.setUser(interactor.authenticatedUser);
33+
}
1034
}
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
part of 'side_menu_module.dart';
22

3-
abstract class SideMenuRouter extends Router {}
3+
abstract class SideMenuRouter extends Router {
4+
void replaceToLoginScreen(BuildContext context);
5+
}
46

57
class SideMenuRouterImpl extends SideMenuRouter {
6-
//
8+
@override
9+
void replaceToLoginScreen(BuildContext context) {
10+
context.navigator.pushReplacementNamed(LoginModule.routePath);
11+
}
712
}

lib/modules/side_menu/side_menu_view.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
part of 'side_menu_module.dart';
22

33
abstract class SideMenuViewDelegate {
4+
BehaviorSubject<void> get stateDidInit;
5+
46
BehaviorSubject<void> get logoutButtonDidTap;
57
}
68

@@ -23,12 +25,7 @@ class _SideMenuViewImplState
2325
@override
2426
void initState() {
2527
super.initState();
26-
27-
final user = UserInfo();
28-
user.email = "mark@nimblehq.co";
29-
user.avatarUrl =
30-
"https://en.gravatar.com/userimage/137591909/6a42a5a20cd79d50edb957644bc41b0c.png";
31-
setUser(user);
28+
delegate?.stateDidInit.add(null);
3229
}
3330

3431
@override

0 commit comments

Comments
 (0)