TF-2313 Apply scrollbar for email list view

Signed-off-by: dab246 <tdvu@linagora.com>

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit b9e745f9022758d342cd3eb42e3cf4b6712e58ea)
This commit is contained in:
dab246
2023-11-22 17:33:39 +07:00
committed by Dat H. Pham
parent b5e9bdb8d0
commit df2b0dc8a2
2 changed files with 36 additions and 20 deletions
@@ -635,7 +635,11 @@ class ThreadController extends BaseController with EmailActionController {
latestEmailSelectedOrUnselected.value = emailsInCurrentMailbox latestEmailSelectedOrUnselected.value = emailsInCurrentMailbox
.firstWhereOrNull((e) => e.id == presentationEmailSelected.id); .firstWhereOrNull((e) => e.id == presentationEmailSelected.id);
focusNodeKeyBoard.requestFocus();
if (!PlatformInfo.isMobile) {
focusNodeKeyBoard.requestFocus();
}
if (_isUnSelectedAll()) { if (_isUnSelectedAll()) {
mailboxDashBoardController.currentSelectMode.value = SelectMode.INACTIVE; mailboxDashBoardController.currentSelectMode.value = SelectMode.INACTIVE;
mailboxDashBoardController.listEmailSelected.clear(); mailboxDashBoardController.listEmailSelected.clear();
@@ -8,6 +8,7 @@ import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart'; import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
@@ -301,11 +302,10 @@ class ThreadView extends GetWidget<ThreadController>
Widget _buildListEmail(BuildContext context) { Widget _buildListEmail(BuildContext context) {
return Container( return Container(
margin: PlatformInfo.isWeb && controller.responsiveUtils.isDesktop(context) padding: PlatformInfo.isWeb
? const EdgeInsets.symmetric(horizontal: 4) ? const EdgeInsets.symmetric(horizontal: 4)
: EdgeInsets.zero, : EdgeInsets.zero,
alignment: Alignment.center, alignment: Alignment.center,
padding: EdgeInsets.zero,
color: Colors.white, color: Colors.white,
child: Obx(() { child: Obx(() {
return Visibility( return Visibility(
@@ -340,7 +340,6 @@ class ThreadView extends GetWidget<ThreadController>
&& !controller.loadingMoreStatus.isRunning && !controller.loadingMoreStatus.isRunning
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent
) { ) {
log('ThreadView::_buildListEmailBody(): CALL LOAD MORE');
if (controller.isSearchActive() || controller.searchController.advancedSearchIsActivated.isTrue) { if (controller.isSearchActive() || controller.searchController.advancedSearchIsActivated.isTrue) {
controller.searchMoreEmails(); controller.searchMoreEmails();
} else { } else {
@@ -349,20 +348,33 @@ class ThreadView extends GetWidget<ThreadController>
} }
return false; return false;
}, },
child: Focus( child: PlatformInfo.isMobile
focusNode: controller.focusNodeKeyBoard, ? ListView.builder(
autofocus: PlatformInfo.isWeb, key: const PageStorageKey('list_presentation_email_in_threads'),
onKey: PlatformInfo.isWeb ? controller.handleKeyEvent : null, controller: controller.listEmailController,
child: ListView.builder( physics: const AlwaysScrollableScrollPhysics(),
controller: controller.listEmailController, padding: EdgeInsets.zero,
physics: const AlwaysScrollableScrollPhysics(), itemExtent: _getItemExtent(context),
padding: EdgeInsets.zero, itemCount: listPresentationEmail.length,
key: const PageStorageKey('list_presentation_email_in_threads'), itemBuilder: (context, index) => Obx(() => _buildEmailItem(context, listPresentationEmail[index]))
itemExtent: _getItemExtent(context), )
itemCount: listPresentationEmail.length, : Focus(
itemBuilder: (context, index) => Obx(() => _buildEmailItem(context, listPresentationEmail[index])) focusNode: controller.focusNodeKeyBoard,
), autofocus: true,
) onKey: controller.handleKeyEvent,
child: ScrollbarListView(
scrollController: controller.listEmailController,
child: ListView.builder(
key: const PageStorageKey('list_presentation_email_in_threads'),
controller: controller.listEmailController,
physics: const AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemExtent: _getItemExtent(context),
itemCount: listPresentationEmail.length,
itemBuilder: (context, index) => Obx(() => _buildEmailItem(context, listPresentationEmail[index]))
),
),
)
); );
} }