From 8ddb4b9275b6063cc4f125ae89fde1555cff92e5 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 13 Mar 2024 01:08:24 +0700 Subject: [PATCH] TF-2684 Use scrollbar theme replace customize scrollbar --- .../extensions/color_extension.dart | 1 - core/lib/presentation/utils/theme_utils.dart | 6 +- .../presentation/contact_controller.dart | 2 - .../contact/presentation/contact_view.dart | 44 ++++---- .../presentation/destination_picker_view.dart | 2 + .../controller/single_email_controller.dart | 2 - .../presentation/mailbox_view_web.dart | 12 +- .../mailbox_visibility_view.dart | 7 +- .../menu/settings/settings_controller.dart | 8 -- .../settings/settings_first_level_view.dart | 17 +-- .../email/presentation/search_email_view.dart | 106 +++++++++--------- .../search_mailbox_controller.dart | 2 - .../presentation/search_mailbox_view.dart | 9 +- .../thread/presentation/thread_view.dart | 59 +++++----- 14 files changed, 117 insertions(+), 160 deletions(-) diff --git a/core/lib/presentation/extensions/color_extension.dart b/core/lib/presentation/extensions/color_extension.dart index f1dd58016..14c2f4e1b 100644 --- a/core/lib/presentation/extensions/color_extension.dart +++ b/core/lib/presentation/extensions/color_extension.dart @@ -160,7 +160,6 @@ extension AppColor on Color { static const colorBackgroundQuotasWarning = Color(0xFFFFC107); static const colorQuotaWarning = Color(0xFFF05C44); static const colorQuotaError = Color(0xffE64646); - static const colorThumbScrollBar = Color(0xFFAEB7C2); static const colorCreateNewIdentityButton = Color(0xFFEBEDF0); static const colorSpamReportBannerBackground = Color(0xFFBFDEFF); static const colorSpamReportBannerStrokeBorder = Color(0x1F000000); diff --git a/core/lib/presentation/utils/theme_utils.dart b/core/lib/presentation/utils/theme_utils.dart index 7755ba0c0..2be885946 100644 --- a/core/lib/presentation/utils/theme_utils.dart +++ b/core/lib/presentation/utils/theme_utils.dart @@ -14,9 +14,9 @@ class ThemeUtils { dividerTheme: _dividerTheme, visualDensity: VisualDensity.adaptivePlatformDensity, scrollbarTheme: ScrollbarThemeData( - thickness: MaterialStateProperty.all(2.0), - radius: const Radius.circular(5.0), - thumbColor: MaterialStateProperty.all(AppColor.colorThumbScrollBar)), + thickness: MaterialStateProperty.all(8.0), + radius: const Radius.circular(8.0), + thumbColor: MaterialStateProperty.all(AppColor.thumbScrollbarColor)), ); } diff --git a/lib/features/contact/presentation/contact_controller.dart b/lib/features/contact/presentation/contact_controller.dart index c2abee38c..2d243e1f5 100644 --- a/lib/features/contact/presentation/contact_controller.dart +++ b/lib/features/contact/presentation/contact_controller.dart @@ -31,7 +31,6 @@ class ContactController extends BaseController { final searchQuery = SearchQuery.initial().obs; final session = Rxn(); final listContactSearched = RxList(); - final scrollListViewController = ScrollController(); GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor; GetAutoCompleteInteractor? _getAutoCompleteInteractor; @@ -85,7 +84,6 @@ class ContactController extends BaseController { textInputSearchFocus.dispose(); textInputSearchController.dispose(); _deBouncerTime.cancel(); - scrollListViewController.dispose(); super.onClose(); } diff --git a/lib/features/contact/presentation/contact_view.dart b/lib/features/contact/presentation/contact_view.dart index 1d691c452..a67fc2fca 100644 --- a/lib/features/contact/presentation/contact_view.dart +++ b/lib/features/contact/presentation/contact_view.dart @@ -137,30 +137,26 @@ class ContactView extends GetWidget { return Container( color: Colors.white, padding: const EdgeInsets.symmetric(horizontal: 4), - child: ScrollbarListView( - scrollController: controller.scrollListViewController, - child: ListView.separated( - itemCount: controller.listContactSearched.length, - controller: controller.scrollListViewController, - separatorBuilder: (context, index) { - return Padding( - padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils), - child: const Divider(height: 1, color: AppColor.colorDivider), - ); - }, - itemBuilder: (context, index) { - final emailAddress = controller.listContactSearched[index]; - final suggestionEmailAddress = _toSuggestionEmailAddress( - emailAddress, - controller.contactSelected != null ? [controller.contactSelected!] : [] - ); - return ContactSuggestionBoxItem( - suggestionEmailAddress, - padding: ContactUtils.getPaddingSearchResultList(context, controller.responsiveUtils), - selectedContactCallbackAction: (contact) => controller.selectContact(context, contact), - ); - } - ), + child: ListView.separated( + itemCount: controller.listContactSearched.length, + separatorBuilder: (context, index) { + return Padding( + padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils), + child: const Divider(height: 1, color: AppColor.colorDivider), + ); + }, + itemBuilder: (context, index) { + final emailAddress = controller.listContactSearched[index]; + final suggestionEmailAddress = _toSuggestionEmailAddress( + emailAddress, + controller.contactSelected != null ? [controller.contactSelected!] : [] + ); + return ContactSuggestionBoxItem( + suggestionEmailAddress, + padding: ContactUtils.getPaddingSearchResultList(context, controller.responsiveUtils), + selectedContactCallbackAction: (contact) => controller.selectContact(context, contact), + ); + } ) ); } diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart index c0781617f..57cce4078 100644 --- a/lib/features/destination_picker/presentation/destination_picker_view.dart +++ b/lib/features/destination_picker/presentation/destination_picker_view.dart @@ -154,6 +154,7 @@ class DestinationPickerView extends GetWidget PointerDeviceKind.mouse, PointerDeviceKind.trackpad }, + scrollbars: false ), scrollController: controller.destinationListScrollController, child: RefreshIndicator( @@ -179,6 +180,7 @@ class DestinationPickerView extends GetWidget PointerDeviceKind.mouse, PointerDeviceKind.trackpad }, + scrollbars: false ), scrollController: controller.destinationListScrollController, child: RefreshIndicator( diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 18cb841f6..05b04c452 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -115,7 +115,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { final _downloadManager = Get.find(); final _printUtils = Get.find(); final _attachmentListScrollController = ScrollController(); - final emailContentScrollController = ScrollController(); final GetEmailContentInteractor _getEmailContentInteractor; final MarkAsEmailReadInteractor _markAsEmailReadInteractor; @@ -190,7 +189,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void onClose() { _downloadProgressStateController.close(); _attachmentListScrollController.dispose(); - emailContentScrollController.dispose(); super.onClose(); } diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 976176ed0..14847e24f 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -88,6 +88,7 @@ class MailboxView extends BaseMailboxView { PointerDeviceKind.mouse, PointerDeviceKind.trackpad }, + scrollbars: false ), child: RefreshIndicator( color: AppColor.primaryColor, @@ -131,7 +132,11 @@ class MailboxView extends BaseMailboxView { const SizedBox(height: 8), const Divider(color: AppColor.colorDividerMailbox, height: 1), Padding( - padding: const EdgeInsetsDirectional.symmetric(vertical: 4), + padding: EdgeInsetsDirectional.only( + top: 4, + bottom: 4, + start: controller.responsiveUtils.isDesktop(context) ? 0 : 16 + ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -249,7 +254,10 @@ class MailboxView extends BaseMailboxView { controller.imagePaths, categories, controller, - toggleMailboxCategories: controller.toggleMailboxCategories + toggleMailboxCategories: controller.toggleMailboxCategories, + padding: controller.responsiveUtils.isDesktop(context) + ? null + : const EdgeInsetsDirectional.only(start: 16) ), AnimatedContainer( duration: const Duration(milliseconds: 400), diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart index e7a49f215..af45f0636 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart @@ -43,12 +43,7 @@ class MailboxVisibilityView extends GetWidget _buildLoadingView(), Expanded(child: Padding( padding: MailboxVisibilityUtils.getPaddingListView(context, controller.responsiveUtils), - child: PlatformInfo.isMobile - ? _buildListMailbox(context) - : ScrollbarListView( - scrollController: controller.mailboxListScrollController, - child: _buildListMailbox(context) - ) + child: _buildListMailbox(context) )) ] ), diff --git a/lib/features/manage_account/presentation/menu/settings/settings_controller.dart b/lib/features/manage_account/presentation/menu/settings/settings_controller.dart index 737441701..d08766d9f 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_controller.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_controller.dart @@ -1,6 +1,5 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; -import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; @@ -9,15 +8,8 @@ class SettingsController extends GetxController { final manageAccountDashboardController = Get.find(); final responsiveUtils = Get.find(); final imagePaths = Get.find(); - final settingScrollController = ScrollController(); void selectSettings(AccountMenuItem accountMenuItem) => manageAccountDashboardController.selectSettings(accountMenuItem); void backToUniversalSettings() => manageAccountDashboardController.backToUniversalSettings(); - - @override - void onClose() { - settingScrollController.dispose(); - super.onClose(); - } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart index 81a9914d7..fb145a020 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart @@ -1,8 +1,6 @@ import 'package:core/presentation/extensions/color_extension.dart'; -import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; @@ -15,8 +13,7 @@ class SettingsFirstLevelView extends GetWidget { @override Widget build(BuildContext context) { - final child = SingleChildScrollView( - controller: PlatformInfo.isMobile ? null : controller.settingScrollController, + return SingleChildScrollView( child: Column(children: [ Obx(() => UserInformationWidget( userName: controller.manageAccountDashboardController.accountId.value != null @@ -156,17 +153,5 @@ class SettingsFirstLevelView extends GetWidget { ), ]), ); - - if (PlatformInfo.isMobile) { - return child; - } else { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: ScrollbarListView( - scrollController: controller.settingScrollController, - child: child - ), - ); - } } } diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index c311767f7..2f2d5600b 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -10,7 +10,6 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; -import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.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_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; @@ -497,7 +496,7 @@ class SearchEmailView extends GetWidget searchQuery: controller.searchQuery, isShowingEmailContent: controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id, isSearchEmailRunning: true, - padding: SearchEmailUtils.getPaddingItemListMobile(context, controller.responsiveUtils), + padding: SearchEmailUtils.getPaddingSearchResultList(context, controller.responsiveUtils), mailboxContain: currentPresentationEmail.mailboxContain, emailActionClick: (action, email) { controller.pressEmailAction( @@ -533,61 +532,58 @@ class SearchEmailView extends GetWidget } }, ) - : ScrollbarListView( - scrollController: controller.resultSearchScrollController, - child: ListView.separated( - controller: controller.resultSearchScrollController, - physics: const AlwaysScrollableScrollPhysics(), - key: const PageStorageKey('list_presentation_email_in_search_view'), - itemCount: listPresentationEmail.length, - itemBuilder: (context, index) { - final currentPresentationEmail = listPresentationEmail[index]; - return Obx(() => EmailTileBuilder( - presentationEmail: currentPresentationEmail, - selectAllMode: controller.selectionMode.value, - searchQuery: controller.searchQuery, - isShowingEmailContent: controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id, - isSearchEmailRunning: true, - padding: SearchEmailUtils.getPaddingSearchResultList(context, controller.responsiveUtils), - mailboxContain: currentPresentationEmail.mailboxContain, - emailActionClick: (action, email) { - controller.pressEmailAction( - context, - action, - email, - mailboxContain: currentPresentationEmail.mailboxContain - ); - }, - onMoreActionClick: (email, position) { - if (controller.responsiveUtils.isScreenWithShortestSide(context)) { - controller.openContextMenuAction( - context, - _contextMenuActionTile(context, email) - ); - } else { - controller.openPopupMenuAction( - context, - position, - _popupMenuActionTile(context, email) - ); - } - }, - - )); - }, - separatorBuilder: (context, index) { - return Padding( - padding: ItemEmailTileStyles.getPaddingDividerWeb(context, controller.responsiveUtils), - child: Divider( - color: index < listPresentationEmail.length - 1 && - controller.selectionMode.value == SelectMode.INACTIVE - ? null - : Colors.white - ) + : ListView.separated( + controller: controller.resultSearchScrollController, + physics: const AlwaysScrollableScrollPhysics(), + key: const PageStorageKey('list_presentation_email_in_search_view'), + itemCount: listPresentationEmail.length, + itemBuilder: (context, index) { + final currentPresentationEmail = listPresentationEmail[index]; + return Obx(() => EmailTileBuilder( + presentationEmail: currentPresentationEmail, + selectAllMode: controller.selectionMode.value, + searchQuery: controller.searchQuery, + isShowingEmailContent: controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id, + isSearchEmailRunning: true, + padding: SearchEmailUtils.getPaddingSearchResultList(context, controller.responsiveUtils), + mailboxContain: currentPresentationEmail.mailboxContain, + emailActionClick: (action, email) { + controller.pressEmailAction( + context, + action, + email, + mailboxContain: currentPresentationEmail.mailboxContain ); }, - ) - ) + onMoreActionClick: (email, position) { + if (controller.responsiveUtils.isScreenWithShortestSide(context)) { + controller.openContextMenuAction( + context, + _contextMenuActionTile(context, email) + ); + } else { + controller.openPopupMenuAction( + context, + position, + _popupMenuActionTile(context, email) + ); + } + }, + + )); + }, + separatorBuilder: (context, index) { + return Padding( + padding: ItemEmailTileStyles.getPaddingDividerWeb(context, controller.responsiveUtils), + child: Divider( + color: index < listPresentationEmail.length - 1 && + controller.selectionMode.value == SelectMode.INACTIVE + ? null + : Colors.white + ) + ); + }, + ) ); } diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index a04f10779..83a0fe9d8 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -81,7 +81,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa final currentSearchQuery = RxString(''); final listMailboxSearched = RxList(); final textInputSearchController = TextEditingController(); - final scrollbarController = ScrollController(); late Debouncer _deBouncerTime; PresentationMailbox? get selectedMailbox => dashboardController.selectedMailbox.value; @@ -730,7 +729,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa void onClose() { textInputSearchController.dispose(); _deBouncerTime.cancel(); - scrollbarController.dispose(); super.onClose(); } } \ No newline at end of file diff --git a/lib/features/search/mailbox/presentation/search_mailbox_view.dart b/lib/features/search/mailbox/presentation/search_mailbox_view.dart index ff83bc6b6..beeb62071 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_view.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_view.dart @@ -11,7 +11,6 @@ import 'package:get/get.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; -import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/context_item_mailbox_action.dart'; @@ -58,12 +57,7 @@ class SearchMailboxView extends GetWidget const Divider(color: AppColor.colorDividerComposer, height: 1), _buildLoadingView(), Expanded( - child: PlatformInfo.isMobile - ? _buildMailboxListView(context) - : ScrollbarListView( - scrollController: controller.scrollbarController, - child: _buildMailboxListView(context) - ) + child: _buildMailboxListView(context) ) ]), ); @@ -179,7 +173,6 @@ class SearchMailboxView extends GetWidget padding: SearchMailboxUtils.getPaddingListViewMailboxSearched(context, controller.responsiveUtils), key: const Key('list_mailbox_searched'), itemCount: controller.listMailboxSearched.length, - controller: controller.scrollbarController, shrinkWrap: true, primary: false, itemBuilder: (context, index) { diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 0444ce05e..e25e86b36 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -381,38 +381,35 @@ class ThreadView extends GetWidget focusNode: controller.focusNodeKeyBoard, autofocus: true, onKey: controller.handleKeyEvent, - child: ScrollbarListView( - scrollController: controller.listEmailController, - child: ListView.separated( - key: const PageStorageKey('list_presentation_email_in_threads'), - controller: controller.listEmailController, - physics: const AlwaysScrollableScrollPhysics(), - itemCount: listPresentationEmail.length + 2, - itemBuilder: (context, index) => Obx(() { - if (index == listPresentationEmail.length) { - return _buildLoadMoreButton( - context, - controller.loadingMoreStatus.value); - } - if (index == listPresentationEmail.length + 1) { - return _buildLoadMoreProgressBar(controller.loadingMoreStatus.value); - } - return _buildEmailItem( + child: ListView.separated( + key: const PageStorageKey('list_presentation_email_in_threads'), + controller: controller.listEmailController, + physics: const AlwaysScrollableScrollPhysics(), + itemCount: listPresentationEmail.length + 2, + itemBuilder: (context, index) => Obx(() { + if (index == listPresentationEmail.length) { + return _buildLoadMoreButton( context, - listPresentationEmail[index]); - }), - separatorBuilder: (context, index) { - return Padding( - padding: ItemEmailTileStyles.getPaddingDividerWeb(context, controller.responsiveUtils), - child: Divider( - color: index < listPresentationEmail.length - 1 && - controller.mailboxDashBoardController.currentSelectMode.value == SelectMode.INACTIVE - ? null - : Colors.white, - ) - ); - }, - ), + controller.loadingMoreStatus.value); + } + if (index == listPresentationEmail.length + 1) { + return _buildLoadMoreProgressBar(controller.loadingMoreStatus.value); + } + return _buildEmailItem( + context, + listPresentationEmail[index]); + }), + separatorBuilder: (context, index) { + return Padding( + padding: ItemEmailTileStyles.getPaddingDividerWeb(context, controller.responsiveUtils), + child: Divider( + color: index < listPresentationEmail.length - 1 && + controller.mailboxDashBoardController.currentSelectMode.value == SelectMode.INACTIVE + ? null + : Colors.white, + ) + ); + }, ), ) );