TF-381 Navigation route ThreadView to EmailView on browser
This commit is contained in:
@@ -25,6 +25,8 @@ import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.da
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
|
||||
|
||||
class MailboxDashBoardController extends ReloadableController {
|
||||
@@ -42,6 +44,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
final searchState = SearchState.initial().obs;
|
||||
final suggestionSearch = <String>[].obs;
|
||||
final dashBoardAction = DashBoardAction.none.obs;
|
||||
final routePath = AppRoutes.MAILBOX_DASHBOARD.obs;
|
||||
|
||||
SearchQuery? searchQuery;
|
||||
Session? sessionCurrent;
|
||||
@@ -66,10 +69,10 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
super.onData(newState);
|
||||
viewState.value.map((success) {
|
||||
if (success is SendingEmailState) {
|
||||
if (Get.overlayContext != null && Get.context != null) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastWithIcon(
|
||||
Get.overlayContext!,
|
||||
message: AppLocalizations.of(Get.context!).your_email_being_sent,
|
||||
currentOverlayContext!,
|
||||
message: AppLocalizations.of(currentContext!).your_email_being_sent,
|
||||
icon: _imagePaths.icSendToast);
|
||||
}
|
||||
}
|
||||
@@ -81,11 +84,11 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
viewState.value.fold(
|
||||
(failure) {
|
||||
if (failure is SendEmailFailure) {
|
||||
if (Get.overlayContext != null && Get.context != null) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastWithIcon(
|
||||
Get.overlayContext!,
|
||||
currentOverlayContext!,
|
||||
textColor: AppColor.toastErrorBackgroundColor,
|
||||
message: AppLocalizations.of(Get.context!).message_has_been_sent_failure,
|
||||
message: AppLocalizations.of(currentContext!).message_has_been_sent_failure,
|
||||
icon: _imagePaths.icSendToast);
|
||||
}
|
||||
clearState();
|
||||
@@ -99,11 +102,11 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
if (success is GetUserProfileSuccess) {
|
||||
userProfile.value = success.userProfile;
|
||||
} else if (success is SendEmailSuccess) {
|
||||
if (Get.overlayContext != null && Get.context != null) {
|
||||
if (currentOverlayContext != null && currentContext != null) {
|
||||
_appToast.showToastWithIcon(
|
||||
Get.overlayContext!,
|
||||
currentOverlayContext!,
|
||||
textColor: AppColor.toastSuccessBackgroundColor,
|
||||
message: AppLocalizations.of(Get.context!).message_has_been_sent_successfully,
|
||||
message: AppLocalizations.of(currentContext!).message_has_been_sent_successfully,
|
||||
icon: _imagePaths.icSendToast);
|
||||
}
|
||||
clearState();
|
||||
@@ -152,11 +155,13 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
|
||||
void setSelectedMailbox(PresentationMailbox? newPresentationMailbox) {
|
||||
selectedMailbox.value = newPresentationMailbox;
|
||||
dispatchRoute(AppRoutes.THREAD);
|
||||
}
|
||||
|
||||
void setNewFirstSelectedMailbox(PresentationMailbox? newPresentationMailbox) {
|
||||
selectedMailbox.firstRebuild = true;
|
||||
selectedMailbox.value = newPresentationMailbox;
|
||||
dispatchRoute(AppRoutes.THREAD);
|
||||
}
|
||||
|
||||
void setSelectedEmail(PresentationEmail? newPresentationEmail) {
|
||||
@@ -217,11 +222,11 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
|
||||
void _saveEmailAsDraftsSuccess(SaveEmailAsDraftsSuccess success) {
|
||||
if (Get.context != null && Get.overlayContext != null) {
|
||||
if (currentContext != null && currentOverlayContext != null) {
|
||||
_appToast.showToastWithAction(
|
||||
Get.overlayContext!,
|
||||
AppLocalizations.of(Get.context!).drafts_saved,
|
||||
AppLocalizations.of(Get.context!).discard,
|
||||
currentOverlayContext!,
|
||||
AppLocalizations.of(currentContext!).drafts_saved,
|
||||
AppLocalizations.of(currentContext!).discard,
|
||||
() => _discardEmail(success.emailAsDrafts)
|
||||
);
|
||||
}
|
||||
@@ -248,6 +253,11 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
dashBoardAction.value = action;
|
||||
}
|
||||
|
||||
void dispatchRoute(String route) {
|
||||
routePath.value = route;
|
||||
log('MailboxDashBoardController::dispatchRoute(): $route');
|
||||
}
|
||||
|
||||
@override
|
||||
void handleReloaded(Session session) {
|
||||
sessionCurrent = session;
|
||||
|
||||
@@ -7,66 +7,90 @@ import 'package:tmail_ui_user/features/email/presentation/email_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';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_action.dart';
|
||||
import 'package:tmail_ui_user/features/setting/presentation/model/app_setting.dart';
|
||||
import 'package:tmail_ui_user/features/setting/presentation/model/reading_pane.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
|
||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||
|
||||
class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> {
|
||||
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: controller.scaffoldKey,
|
||||
drawer: ResponsiveWidget(
|
||||
responsiveUtils: responsiveUtils,
|
||||
mobile: Container(
|
||||
child: MailboxView(),
|
||||
width: responsiveUtils.isPortrait(context)
|
||||
? responsiveUtils.getSizeWidthScreen(context)
|
||||
: responsiveUtils.getSizeWidthScreen(context) / 2),
|
||||
tablet: Container(
|
||||
child: MailboxView(),
|
||||
width: responsiveUtils.getSizeWidthScreen(context) / 2),
|
||||
tabletLarge: Container(
|
||||
child: MailboxView(),
|
||||
width: responsiveUtils.getSizeWidthScreen(context) * 0.35),
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mobile: Container(child: MailboxView(), width: _responsiveUtils.getSizeScreenWidth(context)),
|
||||
tablet: Container(child: MailboxView(), width: _responsiveUtils.getSizeScreenWidth(context) / 2),
|
||||
desktop: SizedBox.shrink()
|
||||
),
|
||||
drawerEnableOpenDragGesture: !responsiveUtils.isDesktop(context),
|
||||
drawerEnableOpenDragGesture: !_responsiveUtils.isDesktop(context),
|
||||
body: Stack(children: [
|
||||
ResponsiveWidget(
|
||||
responsiveUtils: responsiveUtils,
|
||||
desktop: Container(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(flex: 1, child: MailboxView()),
|
||||
Expanded(flex: 1, child: ThreadView()),
|
||||
Expanded(flex: 2, child: EmailView()),
|
||||
],
|
||||
),
|
||||
responsiveUtils: _responsiveUtils,
|
||||
desktop: Container(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(flex: 1, child: MailboxView()),
|
||||
Expanded(flex: 3, child: _buildThreadAndEmailContainer(context)),
|
||||
],
|
||||
),
|
||||
tabletLarge: Container(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: responsiveUtils.getSizeWidthScreen(context) * 0.35,
|
||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||
child: ThreadView()
|
||||
),
|
||||
Expanded(child: EmailView()),
|
||||
],
|
||||
),
|
||||
),
|
||||
tabletLarge: Container(
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(flex: 2, child: MailboxView()),
|
||||
Expanded(flex: 4, child: _buildThreadAndEmailContainer(context)),
|
||||
],
|
||||
),
|
||||
tablet: ThreadView(),
|
||||
mobile: ThreadView()),
|
||||
),
|
||||
tablet: ThreadView(),
|
||||
mobile: ThreadView()
|
||||
),
|
||||
Obx(() => controller.dashBoardAction == DashBoardAction.compose
|
||||
? ComposerView()
|
||||
: SizedBox.shrink()),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildThreadAndEmailContainer(BuildContext context) {
|
||||
switch(AppSetting.readingPane) {
|
||||
case ReadingPane.noSplit:
|
||||
return Obx(() {
|
||||
switch(controller.routePath.value) {
|
||||
case AppRoutes.THREAD:
|
||||
return ThreadView();
|
||||
case AppRoutes.EMAIL:
|
||||
return EmailView();
|
||||
default:
|
||||
return SizedBox.shrink();
|
||||
}
|
||||
});
|
||||
case ReadingPane.rightOfInbox:
|
||||
if (_responsiveUtils.isDesktop(context)) {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(flex: 1, child: ThreadView()),
|
||||
Expanded(flex: 2, child: EmailView()),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(flex: 1, child: ThreadView()),
|
||||
Expanded(flex: 1, child: EmailView()),
|
||||
],
|
||||
);
|
||||
}
|
||||
default:
|
||||
return SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user