Add presentation layer for get Session
This commit is contained in:
@@ -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>()));
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user