From b70fc6edb8813aac91918ef43b2e4dc10f7b0a95 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 25 Aug 2021 13:13:28 +0700 Subject: [PATCH] TF-34 Add presentation layer for fix bug mock data user --- core/lib/data/constants/constant.dart | 3 --- .../mailbox/presentation/mailbox_view.dart | 6 +++-- .../user_information_widget_builder.dart | 26 ++++++++++++------- .../mailbox_dashboard_bindings.dart | 10 ++++++- .../mailbox_dashboard_controller.dart | 17 +++++++++++- .../thread/presentation/thread_view.dart | 11 +++++--- .../app_bar_thread_widget_builder.dart | 7 +++-- 7 files changed, 58 insertions(+), 22 deletions(-) diff --git a/core/lib/data/constants/constant.dart b/core/lib/data/constants/constant.dart index 35f8cd9c5..4f2c77e55 100644 --- a/core/lib/data/constants/constant.dart +++ b/core/lib/data/constants/constant.dart @@ -1,7 +1,4 @@ class Constant { - static const userId = '_id'; - static const firstName = 'firstname'; - static const lastName = 'lastname'; static const acceptHeaderDefault = 'application/json'; static const contentTypeHeaderDefault = 'application/json'; } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index 06bea3e5c..5f85d5c87 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -96,8 +96,10 @@ class MailboxView extends GetWidget { Widget _buildUserInformationWidget(BuildContext context) { return Padding( padding: EdgeInsets.only(left: 16, top: 8.0, right: 16), - child: UserInformationWidgetBuilder(imagePaths) - .build()); + child: Obx(() => UserInformationWidgetBuilder( + imagePaths, + controller.mailboxDashBoardController.userProfile.value) + .build())); } Widget _buildSearchFormWidget(BuildContext context) { diff --git a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart index 70fdfd80f..395427b87 100644 --- a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart +++ b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart @@ -4,15 +4,17 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:model/model.dart'; typedef OnOpenUserInformationActionClick = void Function(); class UserInformationWidgetBuilder { final ImagePaths _imagePaths; + final UserProfile? _userProfile; OnOpenUserInformationActionClick? _onOpenUserInformationActionClick; - UserInformationWidgetBuilder(this._imagePaths); + UserInformationWidgetBuilder(this._imagePaths, this._userProfile); UserInformationWidgetBuilder onOpenUserInformationAction( OnOpenUserInformationActionClick onOpenUserInformationActionClick) { @@ -34,23 +36,27 @@ class UserInformationWidgetBuilder { } }, leading: AvatarBuilder() - .text('J') + .text(_userProfile != null ? _userProfile!.getAvatarText() : '') .size(40) .build(), title: Transform( transform: Matrix4.translationValues(0.0, 0.0, 0.0), child: Text( - 'John Doe', + _userProfile != null ? _userProfile!.getNameDisplay() : '', maxLines: 1, + overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 16, color: AppColor.nameUserColor, fontWeight: FontWeight.w500), )), - subtitle: Transform( - transform: Matrix4.translationValues(0.0, 4.0, 0.0), - child: Text( - 'user@example.com', - maxLines: 1, - style: TextStyle(fontSize: 12, color: AppColor.emailUserColor, fontWeight: FontWeight.w500), - )), + subtitle: (_userProfile != null && !_userProfile!.isUserEmpty()) + ? Transform( + transform: Matrix4.translationValues(0.0, 4.0, 0.0), + child: Text( + _userProfile!.getEmailAddress() ?? '', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 12, color: AppColor.emailUserColor, fontWeight: FontWeight.w500), + )) + : null, trailing: Transform( transform: Matrix4.translationValues(0.0, 0.0, 0.0), child: IconButton( diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_bindings.dart index 8c2c925af..79632a05c 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_bindings.dart @@ -1,6 +1,10 @@ import 'package:get/get.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/email/presentation/email_bindings.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/mailbox/presentation/mailbox_bindings.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_user_profile_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/thread/presentation/thread_bindings.dart'; @@ -8,7 +12,11 @@ class MailboxDashBoardBindings extends Bindings { @override void dependencies() { - Get.put(MailboxDashBoardController()); + Get.lazyPut(() => CredentialRepositoryImpl(Get.find())); + Get.lazyPut(() => Get.find()); + Get.lazyPut(() => GetUserProfileInteractor(Get.find())); + + Get.put(MailboxDashBoardController(Get.find())); MailboxBindings().dependencies(); ThreadBindings().dependencies(); diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index 6db0103d4..76ac5a03d 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -6,32 +6,47 @@ 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'; import 'package:tmail_ui_user/features/email/presentation/email_controller.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_user_profile_interactor.dart'; class MailboxDashBoardController extends BaseController { + final GetUserProfileInteractor _getUserProfileInteractor; + final scaffoldKey = GlobalKey(); final selectedMailbox = Rxn(); final selectedEmail = Rxn(); final accountId = Rxn(); + final userProfile = Rxn(); Session? sessionCurrent; - MailboxDashBoardController(); + MailboxDashBoardController(this._getUserProfileInteractor); @override void onReady() { super.onReady(); _setSessionCurrent(); + _getUserProfile(); } @override void onDone() { + viewState.value.map((success) { + if (success is GetUserProfileSuccess) { + userProfile.value = success.userProfile; + } + }); } @override void onError(error) { } + void _getUserProfile() async { + consumeState(_getUserProfileInteractor.execute()); + } + void _setSessionCurrent() { Future.delayed(const Duration(milliseconds: 100), () { final arguments = Get.arguments; diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 418ec65bf..64751bb72 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -30,7 +30,11 @@ class ThreadView extends GetWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Obx(() => _buildAppBarMailboxListMail(context, controller.mailboxDashBoardController.selectedMailbox.value)), + Obx(() => _buildAppBarMailboxListMail( + context, + controller.mailboxDashBoardController.selectedMailbox.value, + controller.mailboxDashBoardController.userProfile.value, + )), _buildLoadingView(), Expanded(child: _buildListEmail(context)), _buildLoadingViewLoadMore() @@ -41,14 +45,15 @@ class ThreadView extends GetWidget { ); } - Widget _buildAppBarMailboxListMail(BuildContext context, PresentationMailbox? presentationMailbox) { + Widget _buildAppBarMailboxListMail(BuildContext context, PresentationMailbox? presentationMailbox, UserProfile? userProfile) { return Padding( padding: EdgeInsets.only(left: 15, right: 12), child: AppBarThreadWidgetBuilder( context, imagePaths, responsiveUtils, - presentationMailbox) + presentationMailbox, + userProfile) .onOpenListMailboxActionClick(() => controller.openMailboxLeftMenu()) .build()); } diff --git a/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart b/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart index b521cf4b0..01ef6f45b 100644 --- a/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart +++ b/lib/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:model/model.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; typedef OnOpenSearchMailActionClick = void Function(); @@ -20,12 +21,14 @@ class AppBarThreadWidgetBuilder { final ImagePaths _imagePaths; final ResponsiveUtils _responsiveUtils; final PresentationMailbox? _presentationMailbox; + final UserProfile? _userProfile; AppBarThreadWidgetBuilder( this._context, this._imagePaths, this._responsiveUtils, - this._presentationMailbox + this._presentationMailbox, + this._userProfile, ); AppBarThreadWidgetBuilder onOpenUserInformationAction( @@ -76,7 +79,7 @@ class AppBarThreadWidgetBuilder { child: Padding( padding: EdgeInsets.zero, child: AvatarBuilder() - .text('J') + .text(_userProfile != null ? _userProfile!.getAvatarText() : '') .size(36) .build())); }