TF-2684 Use scrollbar theme replace customize scrollbar
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ class ContactController extends BaseController {
|
||||
final searchQuery = SearchQuery.initial().obs;
|
||||
final session = Rxn<Session>();
|
||||
final listContactSearched = RxList<EmailAddress>();
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -137,30 +137,26 @@ class ContactView extends GetWidget<ContactController> {
|
||||
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),
|
||||
);
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -154,6 +154,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
||||
PointerDeviceKind.mouse,
|
||||
PointerDeviceKind.trackpad
|
||||
},
|
||||
scrollbars: false
|
||||
),
|
||||
scrollController: controller.destinationListScrollController,
|
||||
child: RefreshIndicator(
|
||||
@@ -179,6 +180,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
||||
PointerDeviceKind.mouse,
|
||||
PointerDeviceKind.trackpad
|
||||
},
|
||||
scrollbars: false
|
||||
),
|
||||
scrollController: controller.destinationListScrollController,
|
||||
child: RefreshIndicator(
|
||||
|
||||
@@ -115,7 +115,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
final _downloadManager = Get.find<DownloadManager>();
|
||||
final _printUtils = Get.find<PrintUtils>();
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
+1
-6
@@ -43,12 +43,7 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
|
||||
_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)
|
||||
))
|
||||
]
|
||||
),
|
||||
|
||||
@@ -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<ManageAccountDashBoardController>();
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final imagePaths = Get.find<ImagePaths>();
|
||||
final settingScrollController = ScrollController();
|
||||
|
||||
void selectSettings(AccountMenuItem accountMenuItem) => manageAccountDashboardController.selectSettings(accountMenuItem);
|
||||
|
||||
void backToUniversalSettings() => manageAccountDashboardController.backToUniversalSettings();
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
settingScrollController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
+1
-16
@@ -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<SettingsController> {
|
||||
|
||||
@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<SettingsController> {
|
||||
),
|
||||
]),
|
||||
);
|
||||
|
||||
if (PlatformInfo.isMobile) {
|
||||
return child;
|
||||
} else {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: ScrollbarListView(
|
||||
scrollController: controller.settingScrollController,
|
||||
child: child
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<SearchEmailController>
|
||||
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<SearchEmailController>
|
||||
}
|
||||
},
|
||||
)
|
||||
: 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
|
||||
)
|
||||
);
|
||||
},
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
||||
final currentSearchQuery = RxString('');
|
||||
final listMailboxSearched = RxList<PresentationMailbox>();
|
||||
final textInputSearchController = TextEditingController();
|
||||
final scrollbarController = ScrollController();
|
||||
late Debouncer<String> _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();
|
||||
}
|
||||
}
|
||||
@@ -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<SearchMailboxController>
|
||||
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<SearchMailboxController>
|
||||
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) {
|
||||
|
||||
@@ -381,38 +381,35 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
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,
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user