TF-682 Support landscape tablet for ThreadView and EmailView

This commit is contained in:
dab246
2022-07-01 17:24:14 +07:00
committed by Dat H. Pham
parent 01d8e3639a
commit ffe5fe5056
14 changed files with 271 additions and 228 deletions
@@ -2,17 +2,14 @@ import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
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/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/app_setting.dart';
import 'package:tmail_ui_user/features/manage_account/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> with NetworkConnectionMixin {
class MailboxDashBoardView extends GetWidget<MailboxDashBoardController>
with NetworkConnectionMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
@@ -20,87 +17,72 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> with Ne
@override
Widget build(BuildContext context) {
final bodyLandscapeTablet = Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: ResponsiveUtils.defaultSizeLeftMenuMobile,
child: ThreadView()),
Expanded(child: EmailView()),
],
);
return Scaffold(
key: controller.scaffoldKey,
drawer: ResponsiveWidget(
responsiveUtils: _responsiveUtils,
mobile: SizedBox(child: MailboxView(), width: double.infinity),
landscapeMobile: SizedBox(child: MailboxView(), width: _responsiveUtils.defaultSizeDrawer),
tablet: SizedBox(child: MailboxView(), width: _responsiveUtils.defaultSizeDrawer),
tabletLarge: const SizedBox.shrink(),
desktop: const SizedBox.shrink(),
),
drawerEnableOpenDragGesture: _responsiveUtils.isMobile(context)
|| _responsiveUtils.isLandscapeMobile(context)
|| _responsiveUtils.isTablet(context),
landscapeMobile: SizedBox(
child: MailboxView(),
width: ResponsiveUtils.defaultSizeDrawer),
tablet: SizedBox(
child: MailboxView(),
width: ResponsiveUtils.defaultSizeDrawer),
landscapeTablet: SizedBox(
child: MailboxView(),
width: ResponsiveUtils.defaultSizeLeftMenuMobile),
tabletLarge: SizedBox(
child: MailboxView(),
width: ResponsiveUtils.defaultSizeLeftMenuMobile),
desktop: SizedBox(
child: MailboxView(),
width: ResponsiveUtils.defaultSizeLeftMenuMobile)),
drawerEnableOpenDragGesture: _responsiveUtils.hasLeftMenuDrawerActive(context),
body: Stack(children: [
ResponsiveWidget(
responsiveUtils: _responsiveUtils,
desktop: _buildLargeScreenView(context),
tabletLarge: _buildLargeScreenView(context),
tablet: ThreadView(),
landscapeMobile: ThreadView(),
mobile: ThreadView(),
),
Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active
? ComposerView()
: const SizedBox.shrink()),
Obx(() => controller.isNetworkConnectionAvailable()
? const SizedBox.shrink()
: Align(alignment: Alignment.bottomCenter, child: buildNetworkConnectionWidget(context))),
Obx(() {
switch(controller.routePath.value) {
case AppRoutes.THREAD:
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
desktop: bodyLandscapeTablet,
tabletLarge: bodyLandscapeTablet,
landscapeTablet: bodyLandscapeTablet,
mobile: ThreadView());
case AppRoutes.EMAIL:
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
desktop: bodyLandscapeTablet,
tabletLarge: bodyLandscapeTablet,
landscapeTablet: bodyLandscapeTablet,
mobile: EmailView());
default:
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
desktop: bodyLandscapeTablet,
tabletLarge: bodyLandscapeTablet,
landscapeTablet: bodyLandscapeTablet,
mobile: ThreadView());
}
}),
Obx(() {
if (controller.isNetworkConnectionAvailable()) {
return const SizedBox.shrink();
}
return Align(
alignment: Alignment.bottomCenter,
child: buildNetworkConnectionWidget(context));
}),
]),
);
}
Widget _wrapContainerForThreadAndEmail(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 const 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 const SizedBox.shrink();
}
}
Widget _buildLargeScreenView(BuildContext context) {
if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) {
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.closeMailboxMenuDrawer();
});
}
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(child: MailboxView(), width: _responsiveUtils.defaultSizeDrawer),
Expanded(child: _wrapContainerForThreadAndEmail(context))
],
);
}
}
@@ -46,8 +46,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
backgroundColor: Colors.white,
drawer: ResponsiveWidget(
responsiveUtils: responsiveUtils,
mobile: SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeDrawer),
tablet: SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeDrawer),
mobile: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeDrawer),
tablet: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeDrawer),
tabletLarge: const SizedBox.shrink(),
desktop: const SizedBox.shrink(),
),