Add presentation layer for get Session

This commit is contained in:
dab246
2021-07-29 18:26:31 +07:00
committed by Dat H. Pham
parent 59da162655
commit 740859054a
19 changed files with 180 additions and 15 deletions
@@ -34,6 +34,6 @@ class HomeController extends GetxController {
credentialViewState.userName.userName,
credentialViewState.password.value,
);
Get.offNamed(AppRoutes.MAILBOX_DASHBOARD);
Get.offNamed(AppRoutes.SESSION);
}
}
@@ -1,7 +1,7 @@
import 'package:core/core.dart';
import 'package:model/model.dart';
class AuthenticationUserViewState extends ViewState {
class AuthenticationUserViewState extends UIState {
final User user;
AuthenticationUserViewState(this.user);
@@ -0,0 +1,18 @@
import 'package:core/core.dart';
import 'package:core/presentation/state/failure.dart';
class DeleteCredentialSuccess extends UIState {
DeleteCredentialSuccess();
@override
List<Object> get props => [];
}
class DeleteCredentialFailure extends FeatureFailure {
final exception;
DeleteCredentialFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -3,7 +3,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:model/account/password.dart';
import 'package:model/account/user_name.dart';
class GetCredentialViewState extends ViewState {
class GetCredentialViewState extends UIState {
final Uri baseUrl;
final UserName userName;
final Password password;
@@ -0,0 +1,25 @@
import 'dart:core';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
import 'package:tmail_ui_user/features/login/domain/state/delete_credential_state.dart';
class DeleteCredentialInteractor {
final CredentialRepository credentialRepository;
DeleteCredentialInteractor(this.credentialRepository);
Future<Either<Failure, Success>> execute() async {
try {
await Future.wait([
credentialRepository.removeBaseUrl(),
credentialRepository.removeUserName(),
credentialRepository.removePassword()
]);
return Right(DeleteCredentialSuccess());
} catch (exception) {
return Left(DeleteCredentialFailure(exception));
}
}
}
@@ -60,7 +60,7 @@ class LoginController extends GetxController {
loginState.value = LoginState(Right(success));
_dynamicUrlInterceptors.changeBaseUrl(_urlText);
_authorizationInterceptors.changeAuthorization(_userNameText, _passwordText);
Get.offNamed(AppRoutes.MAILBOX_DASHBOARD);
Get.offNamed(AppRoutes.SESSION);
}
void _loginFailureAction(AuthenticationUserFailure failure) {
@@ -1,5 +1,9 @@
import 'package:core/core.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
@@ -12,6 +16,9 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_b
class MailboxBindings extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => CredentialRepositoryImpl(Get.find<SharedPreferences>()));
Get.lazyPut<CredentialRepository>(() => Get.find<CredentialRepositoryImpl>());
Get.lazyPut(() => DeleteCredentialInteractor(Get.find<CredentialRepository>()));
Get.lazyPut(() => MailboxDataSourceImpl(Get.find<MailboxAPI>()));
Get.lazyPut<MailboxDataSource>(() => Get.find<MailboxDataSourceImpl>());
Get.lazyPut(() => MailboxRepositoryImpl(Get.find<MailboxDataSource>()));
@@ -20,6 +27,7 @@ class MailboxBindings extends Bindings {
Get.lazyPut(() => TreeBuilder());
Get.lazyPut(() => MailboxController(
Get.find<GetAllMailboxInteractor>(),
Get.find<DeleteCredentialInteractor>(),
Get.find<TreeBuilder>(),
Get.find<ResponsiveUtils>()));
}
@@ -6,12 +6,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
@@ -23,12 +23,13 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
class MailboxController extends BaseController {
final GetAllMailboxInteractor _getAllMailboxInteractor;
final DeleteCredentialInteractor _deleteCredentialInteractor;
final TreeBuilder _treeBuilder;
final ResponsiveUtils responsiveUtils;
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
MailboxController(this._getAllMailboxInteractor, this._treeBuilder, this.responsiveUtils);
MailboxController(this._getAllMailboxInteractor, this._deleteCredentialInteractor, this._treeBuilder, this.responsiveUtils);
final folderMailboxTree = MailboxTree(MailboxNode.root()).obs;
final selectedMailbox = PresentationMailbox.createMailboxEmpty().obs;
@@ -36,11 +37,13 @@ class MailboxController extends BaseController {
@override
void onReady() {
super.onReady();
getAllMailboxAction();
if (mailboxDashBoardController.sessionCurrent != null) {
getAllMailboxAction(
mailboxDashBoardController.sessionCurrent!.accounts.keys.first);
}
}
void getAllMailboxAction() async {
final AccountId accountId = AccountId(Id('3ce33c876a726662c627746eb9537a1d13c2338193ef27bd051a3ce5c0fe5b12'));
void getAllMailboxAction(AccountId accountId) async {
consumeState(_getAllMailboxInteractor.execute(accountId));
}
@@ -101,7 +104,12 @@ class MailboxController extends BaseController {
keyWidgetMailboxDashBoard.currentState?.openEndDrawer();
}
void _deleteCredential() async {
await _deleteCredentialInteractor.execute();
}
void closeMailboxScreen() {
_deleteCredential();
Get.offAllNamed(AppRoutes.LOGIN);
}
}
@@ -39,7 +39,9 @@ class MailboxView extends GetWidget<MailboxController> {
left: false,
child: RefreshIndicator(
color: AppColor.primaryColor,
onRefresh: () async => controller.getAllMailboxAction(),
onRefresh: () async => mailboxDashBoardController.sessionCurrent != null
? controller.getAllMailboxAction(mailboxDashBoardController.sessionCurrent!.accounts.keys.first)
: null,
child: SingleChildScrollView(
physics: AlwaysScrollableScrollPhysics(),
child: Padding(
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
@@ -9,6 +10,7 @@ class MailboxDashBoardController extends BaseController {
final scaffoldKey = GlobalKey<ScaffoldState>();
final mailboxCurrent = PresentationMailbox.createMailboxEmpty().obs;
final mailCurrent = PresentationThread.createThreadEmpty().obs;
Session? sessionCurrent;
MailboxDashBoardController();
@@ -25,4 +27,8 @@ class MailboxDashBoardController extends BaseController {
@override
void onError(error) {
}
void setSessionCurrent(Session session) {
sessionCurrent = session;
}
}
@@ -1,6 +1,7 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/mail/presentation/mail_view.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart';
@@ -12,6 +13,9 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> {
@override
Widget build(BuildContext context) {
final arguments = Get.arguments as Session;
controller.setSessionCurrent(arguments);
return Scaffold(
key: controller.scaffoldKey,
drawer: responsiveUtils.isMobile(context)
@@ -0,0 +1,27 @@
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/session/data/datasource/session_datasource.dart';
import 'package:tmail_ui_user/features/session/data/datasource_impl/session_datasource_impl.dart';
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
import 'package:tmail_ui_user/features/session/data/repository/session_repository_impl.dart';
import 'package:tmail_ui_user/features/session/domain/repository/session_repository.dart';
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
import 'package:tmail_ui_user/features/session/presentation/session_controller.dart';
class SessionBindings extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => SessionDataSourceImpl(Get.find<SessionAPI>()));
Get.lazyPut<SessionDataSource>(() => Get.find<SessionDataSourceImpl>());
Get.lazyPut(() => SessionRepositoryImpl(Get.find<SessionDataSource>()));
Get.lazyPut<SessionRepository>(() => Get.find<SessionRepositoryImpl>());
Get.lazyPut(() => GetSessionInteractor(Get.find<SessionRepository>()));
Get.lazyPut(() => CredentialRepositoryImpl(Get.find<SharedPreferences>()));
Get.lazyPut<CredentialRepository>(() => Get.find<CredentialRepositoryImpl>());
Get.lazyPut(() => DeleteCredentialInteractor(Get.find<CredentialRepository>()));
Get.lazyPut(() => SessionController(Get.find<GetSessionInteractor>(), Get.find<DeleteCredentialInteractor>()));
}
}
@@ -0,0 +1,38 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart';
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
class SessionController extends GetxController {
final GetSessionInteractor _getSessionInteractor;
final DeleteCredentialInteractor _deleteCredentialInteractor;
SessionController(this._getSessionInteractor, this._deleteCredentialInteractor);
@override
void onReady() {
super.onReady();
_getSession();
}
void _getSession() async {
await _getSessionInteractor.execute()
.then((response) => response.fold(
(failure) => _goToLogin(),
(success) => success is GetSessionSuccess ? _goToMailboxDashBoard(success) : _goToLogin()));
}
void _deleteCredential() async {
await _deleteCredentialInteractor.execute();
}
void _goToLogin() {
_deleteCredential();
Get.offNamed(AppRoutes.LOGIN);
}
void _goToMailboxDashBoard(GetSessionSuccess getSessionSuccess) {
Get.offNamed(AppRoutes.MAILBOX_DASHBOARD, arguments: getSessionSuccess.session);
}
}
@@ -0,0 +1,20 @@
import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/session/presentation/session_controller.dart';
class SessionView extends GetWidget<SessionController> {
@override
Widget build(BuildContext context) {
return Container(
color: AppColor.primaryColor,
child: SizedBox(
width: 100,
height: 100,
child: CupertinoActivityIndicator(),
),
);
}
}
@@ -7,6 +7,7 @@ import 'package:get/get.dart';
import 'package:jmap_dart_client/http/http_client.dart' as JmapHttpClient;
import 'package:tmail_ui_user/features/login/data/network/login_api.dart';
import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
import 'package:tmail_ui_user/features/session/data/network/session_api.dart';
class NetworkBindings extends Bindings {
@@ -45,5 +46,6 @@ class NetworkBindings extends Bindings {
Get.put(JmapHttpClient.HttpClient(Get.find<Dio>()));
Get.put(LoginAPI(Get.find<DioClient>()));
Get.put(MailboxAPI(Get.find<JmapHttpClient.HttpClient>()));
Get.put(SessionAPI(Get.find<JmapHttpClient.HttpClient>()));
}
}
+6
View File
@@ -11,6 +11,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_da
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_bindings.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
import 'package:tmail_ui_user/features/session/presentation/session_bindings.dart';
import 'package:tmail_ui_user/features/session/presentation/session_view.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
class AppPages {
@@ -23,6 +25,10 @@ class AppPages {
name: AppRoutes.LOGIN,
page: () => LoginView(),
binding: LoginBindings()),
GetPage(
name: AppRoutes.SESSION,
page: () => SessionView(),
binding: SessionBindings()),
GetPage(
name: AppRoutes.MAILBOX,
page: () => MailboxView(),
+1
View File
@@ -5,4 +5,5 @@ abstract class AppRoutes {
static const MAILBOX_DASHBOARD = '/mailboxDashBoard';
static const THREAD = '$MAILBOX_DASHBOARD/thread';
static const MAIL = '$THREAD/mail';
static const SESSION = '/session';
}
+2 -2
View File
@@ -37,8 +37,8 @@ dependencies:
# jmap_dart_client
jmap_dart_client:
git:
url: git://github.com/hoangdat/jmap-dart-client.git
ref: get_session_dat
url: git://github.com/dab246/jmap-dart-client.git
ref: fixbug_get_session
dev_dependencies:
flutter_test:
+2 -2
View File
@@ -77,8 +77,8 @@ dependencies:
# jmap_dart_client
jmap_dart_client:
git:
url: git://github.com/hoangdat/jmap-dart-client.git
ref: get_session_dat
url: git://github.com/dab246/jmap-dart-client.git
ref: fixbug_get_session
dev_dependencies:
flutter_test: