diff --git a/lib/features/contact/presentation/contact_controller.dart b/lib/features/contact/presentation/contact_controller.dart index d38e1dba9..baf0f2052 100644 --- a/lib/features/contact/presentation/contact_controller.dart +++ b/lib/features/contact/presentation/contact_controller.dart @@ -30,12 +30,13 @@ class ContactController extends BaseController { final searchQuery = SearchQuery.initial().obs; final listContactSearched = RxList(); + final scrollListViewController = ScrollController(); GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor; GetAutoCompleteInteractor? _getAutoCompleteInteractor; GetDeviceContactSuggestionsInteractor? _getDeviceContactSuggestionsInteractor; - final Debouncer _deBouncerTime = Debouncer(const Duration(milliseconds: 500), initialValue: ''); + final Debouncer _deBouncerTime = Debouncer(const Duration(milliseconds: 300), initialValue: ''); AccountId? _accountId; Session? _session; @@ -84,6 +85,7 @@ 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 8dc385acc..74f51eea2 100644 --- a/lib/features/contact/presentation/contact_view.dart +++ b/lib/features/contact/presentation/contact_view.dart @@ -1,9 +1,11 @@ import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/suggestion_email_address.dart'; import 'package:tmail_ui_user/features/contact/presentation/contact_controller.dart'; import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.dart'; @@ -81,25 +83,51 @@ class ContactView extends GetWidget { ), Expanded(child: Obx(() { if (controller.listContactSearched.isNotEmpty) { - return Container( + if (PlatformInfo.isMobile) { + return Container( color: Colors.white, 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), + ); + } + ) + ); + } else { + 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), + 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!] - : [] + controller.contactSelected != null ? [controller.contactSelected!] : [] ); return ContactSuggestionBoxItem( suggestionEmailAddress, @@ -107,8 +135,10 @@ class ContactView extends GetWidget { selectedContactCallbackAction: (contact) => controller.selectContact(context, contact), ); } + ), ) - ); + ); + } } else { return const SizedBox.shrink(); }