TF-2313 Apply scrollbar for contact view

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 79810ecc56f87cf085f773df95621d9692026ebb)
This commit is contained in:
dab246
2023-11-22 17:43:54 +07:00
committed by Dat H. Pham
parent f83e3a56fa
commit 969942f3b8
2 changed files with 41 additions and 9 deletions
@@ -30,12 +30,13 @@ class ContactController extends BaseController {
final searchQuery = SearchQuery.initial().obs;
final listContactSearched = RxList<EmailAddress>();
final scrollListViewController = ScrollController();
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
GetDeviceContactSuggestionsInteractor? _getDeviceContactSuggestionsInteractor;
final Debouncer<String> _deBouncerTime = Debouncer<String>(const Duration(milliseconds: 500), initialValue: '');
final Debouncer<String> _deBouncerTime = Debouncer<String>(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();
}
@@ -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<ContactController> {
),
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<ContactController> {
selectedContactCallbackAction: (contact) => controller.selectContact(context, contact),
);
}
),
)
);
);
}
} else {
return const SizedBox.shrink();
}