TF-34 Add presentation layer for fix bug mock data user

This commit is contained in:
dab246
2021-08-25 13:13:28 +07:00
committed by Dat H. Pham
parent 4393caf179
commit b70fc6edb8
7 changed files with 58 additions and 22 deletions
-3
View File
@@ -1,7 +1,4 @@
class Constant { class Constant {
static const userId = '_id';
static const firstName = 'firstname';
static const lastName = 'lastname';
static const acceptHeaderDefault = 'application/json'; static const acceptHeaderDefault = 'application/json';
static const contentTypeHeaderDefault = 'application/json'; static const contentTypeHeaderDefault = 'application/json';
} }
@@ -96,8 +96,10 @@ class MailboxView extends GetWidget<MailboxController> {
Widget _buildUserInformationWidget(BuildContext context) { Widget _buildUserInformationWidget(BuildContext context) {
return Padding( return Padding(
padding: EdgeInsets.only(left: 16, top: 8.0, right: 16), padding: EdgeInsets.only(left: 16, top: 8.0, right: 16),
child: UserInformationWidgetBuilder(imagePaths) child: Obx(() => UserInformationWidgetBuilder(
.build()); imagePaths,
controller.mailboxDashBoardController.userProfile.value)
.build()));
} }
Widget _buildSearchFormWidget(BuildContext context) { Widget _buildSearchFormWidget(BuildContext context) {
@@ -4,15 +4,17 @@ import 'package:core/core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:model/model.dart';
typedef OnOpenUserInformationActionClick = void Function(); typedef OnOpenUserInformationActionClick = void Function();
class UserInformationWidgetBuilder { class UserInformationWidgetBuilder {
final ImagePaths _imagePaths; final ImagePaths _imagePaths;
final UserProfile? _userProfile;
OnOpenUserInformationActionClick? _onOpenUserInformationActionClick; OnOpenUserInformationActionClick? _onOpenUserInformationActionClick;
UserInformationWidgetBuilder(this._imagePaths); UserInformationWidgetBuilder(this._imagePaths, this._userProfile);
UserInformationWidgetBuilder onOpenUserInformationAction( UserInformationWidgetBuilder onOpenUserInformationAction(
OnOpenUserInformationActionClick onOpenUserInformationActionClick) { OnOpenUserInformationActionClick onOpenUserInformationActionClick) {
@@ -34,23 +36,27 @@ class UserInformationWidgetBuilder {
} }
}, },
leading: AvatarBuilder() leading: AvatarBuilder()
.text('J') .text(_userProfile != null ? _userProfile!.getAvatarText() : '')
.size(40) .size(40)
.build(), .build(),
title: Transform( title: Transform(
transform: Matrix4.translationValues(0.0, 0.0, 0.0), transform: Matrix4.translationValues(0.0, 0.0, 0.0),
child: Text( child: Text(
'John Doe', _userProfile != null ? _userProfile!.getNameDisplay() : '',
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 16, color: AppColor.nameUserColor, fontWeight: FontWeight.w500), style: TextStyle(fontSize: 16, color: AppColor.nameUserColor, fontWeight: FontWeight.w500),
)), )),
subtitle: Transform( subtitle: (_userProfile != null && !_userProfile!.isUserEmpty())
transform: Matrix4.translationValues(0.0, 4.0, 0.0), ? Transform(
child: Text( transform: Matrix4.translationValues(0.0, 4.0, 0.0),
'user@example.com', child: Text(
maxLines: 1, _userProfile!.getEmailAddress() ?? '',
style: TextStyle(fontSize: 12, color: AppColor.emailUserColor, fontWeight: FontWeight.w500), maxLines: 1,
)), overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 12, color: AppColor.emailUserColor, fontWeight: FontWeight.w500),
))
: null,
trailing: Transform( trailing: Transform(
transform: Matrix4.translationValues(0.0, 0.0, 0.0), transform: Matrix4.translationValues(0.0, 0.0, 0.0),
child: IconButton( child: IconButton(
@@ -1,6 +1,10 @@
import 'package:get/get.dart'; 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/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/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/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_bindings.dart'; import 'package:tmail_ui_user/features/thread/presentation/thread_bindings.dart';
@@ -8,7 +12,11 @@ class MailboxDashBoardBindings extends Bindings {
@override @override
void dependencies() { void dependencies() {
Get.put(MailboxDashBoardController()); Get.lazyPut(() => CredentialRepositoryImpl(Get.find<SharedPreferences>()));
Get.lazyPut<CredentialRepository>(() => Get.find<CredentialRepositoryImpl>());
Get.lazyPut(() => GetUserProfileInteractor(Get.find<CredentialRepository>()));
Get.put(MailboxDashBoardController(Get.find<GetUserProfileInteractor>()));
MailboxBindings().dependencies(); MailboxBindings().dependencies();
ThreadBindings().dependencies(); ThreadBindings().dependencies();
@@ -6,32 +6,47 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.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/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 { class MailboxDashBoardController extends BaseController {
final GetUserProfileInteractor _getUserProfileInteractor;
final scaffoldKey = GlobalKey<ScaffoldState>(); final scaffoldKey = GlobalKey<ScaffoldState>();
final selectedMailbox = Rxn<PresentationMailbox>(); final selectedMailbox = Rxn<PresentationMailbox>();
final selectedEmail = Rxn<PresentationEmail>(); final selectedEmail = Rxn<PresentationEmail>();
final accountId = Rxn<AccountId>(); final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>();
Session? sessionCurrent; Session? sessionCurrent;
MailboxDashBoardController(); MailboxDashBoardController(this._getUserProfileInteractor);
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
_setSessionCurrent(); _setSessionCurrent();
_getUserProfile();
} }
@override @override
void onDone() { void onDone() {
viewState.value.map((success) {
if (success is GetUserProfileSuccess) {
userProfile.value = success.userProfile;
}
});
} }
@override @override
void onError(error) { void onError(error) {
} }
void _getUserProfile() async {
consumeState(_getUserProfileInteractor.execute());
}
void _setSessionCurrent() { void _setSessionCurrent() {
Future.delayed(const Duration(milliseconds: 100), () { Future.delayed(const Duration(milliseconds: 100), () {
final arguments = Get.arguments; final arguments = Get.arguments;
@@ -30,7 +30,11 @@ class ThreadView extends GetWidget<ThreadController> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Obx(() => _buildAppBarMailboxListMail(context, controller.mailboxDashBoardController.selectedMailbox.value)), Obx(() => _buildAppBarMailboxListMail(
context,
controller.mailboxDashBoardController.selectedMailbox.value,
controller.mailboxDashBoardController.userProfile.value,
)),
_buildLoadingView(), _buildLoadingView(),
Expanded(child: _buildListEmail(context)), Expanded(child: _buildListEmail(context)),
_buildLoadingViewLoadMore() _buildLoadingViewLoadMore()
@@ -41,14 +45,15 @@ class ThreadView extends GetWidget<ThreadController> {
); );
} }
Widget _buildAppBarMailboxListMail(BuildContext context, PresentationMailbox? presentationMailbox) { Widget _buildAppBarMailboxListMail(BuildContext context, PresentationMailbox? presentationMailbox, UserProfile? userProfile) {
return Padding( return Padding(
padding: EdgeInsets.only(left: 15, right: 12), padding: EdgeInsets.only(left: 15, right: 12),
child: AppBarThreadWidgetBuilder( child: AppBarThreadWidgetBuilder(
context, context,
imagePaths, imagePaths,
responsiveUtils, responsiveUtils,
presentationMailbox) presentationMailbox,
userProfile)
.onOpenListMailboxActionClick(() => controller.openMailboxLeftMenu()) .onOpenListMailboxActionClick(() => controller.openMailboxLeftMenu())
.build()); .build());
} }
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnOpenSearchMailActionClick = void Function(); typedef OnOpenSearchMailActionClick = void Function();
@@ -20,12 +21,14 @@ class AppBarThreadWidgetBuilder {
final ImagePaths _imagePaths; final ImagePaths _imagePaths;
final ResponsiveUtils _responsiveUtils; final ResponsiveUtils _responsiveUtils;
final PresentationMailbox? _presentationMailbox; final PresentationMailbox? _presentationMailbox;
final UserProfile? _userProfile;
AppBarThreadWidgetBuilder( AppBarThreadWidgetBuilder(
this._context, this._context,
this._imagePaths, this._imagePaths,
this._responsiveUtils, this._responsiveUtils,
this._presentationMailbox this._presentationMailbox,
this._userProfile,
); );
AppBarThreadWidgetBuilder onOpenUserInformationAction( AppBarThreadWidgetBuilder onOpenUserInformationAction(
@@ -76,7 +79,7 @@ class AppBarThreadWidgetBuilder {
child: Padding( child: Padding(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
child: AvatarBuilder() child: AvatarBuilder()
.text('J') .text(_userProfile != null ? _userProfile!.getAvatarText() : '')
.size(36) .size(36)
.build())); .build()));
} }