TF-2313 Apply scrollbar for contact view
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit 79810ecc56f87cf085f773df95621d9692026ebb)
This commit is contained in:
@@ -30,12 +30,13 @@ class ContactController extends BaseController {
|
|||||||
|
|
||||||
final searchQuery = SearchQuery.initial().obs;
|
final searchQuery = SearchQuery.initial().obs;
|
||||||
final listContactSearched = RxList<EmailAddress>();
|
final listContactSearched = RxList<EmailAddress>();
|
||||||
|
final scrollListViewController = ScrollController();
|
||||||
|
|
||||||
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
|
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
|
||||||
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
||||||
GetDeviceContactSuggestionsInteractor? _getDeviceContactSuggestionsInteractor;
|
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;
|
AccountId? _accountId;
|
||||||
Session? _session;
|
Session? _session;
|
||||||
|
|
||||||
@@ -84,6 +85,7 @@ class ContactController extends BaseController {
|
|||||||
textInputSearchFocus.dispose();
|
textInputSearchFocus.dispose();
|
||||||
textInputSearchController.dispose();
|
textInputSearchController.dispose();
|
||||||
_deBouncerTime.cancel();
|
_deBouncerTime.cancel();
|
||||||
|
scrollListViewController.dispose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.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/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/contact_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.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(() {
|
Expanded(child: Obx(() {
|
||||||
if (controller.listContactSearched.isNotEmpty) {
|
if (controller.listContactSearched.isNotEmpty) {
|
||||||
return Container(
|
if (PlatformInfo.isMobile) {
|
||||||
|
return Container(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
child: ListView.separated(
|
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,
|
itemCount: controller.listContactSearched.length,
|
||||||
|
controller: controller.scrollListViewController,
|
||||||
separatorBuilder: (context, index) {
|
separatorBuilder: (context, index) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
|
padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
|
||||||
child: const Divider(
|
child: const Divider(height: 1, color: AppColor.colorDivider),
|
||||||
height: 1,
|
|
||||||
color: AppColor.colorDivider),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final emailAddress = controller.listContactSearched[index];
|
final emailAddress = controller.listContactSearched[index];
|
||||||
final suggestionEmailAddress = _toSuggestionEmailAddress(
|
final suggestionEmailAddress = _toSuggestionEmailAddress(
|
||||||
emailAddress,
|
emailAddress,
|
||||||
controller.contactSelected != null
|
controller.contactSelected != null ? [controller.contactSelected!] : []
|
||||||
? [controller.contactSelected!]
|
|
||||||
: []
|
|
||||||
);
|
);
|
||||||
return ContactSuggestionBoxItem(
|
return ContactSuggestionBoxItem(
|
||||||
suggestionEmailAddress,
|
suggestionEmailAddress,
|
||||||
@@ -107,8 +135,10 @@ class ContactView extends GetWidget<ContactController> {
|
|||||||
selectedContactCallbackAction: (contact) => controller.selectContact(context, contact),
|
selectedContactCallbackAction: (contact) => controller.selectContact(context, contact),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user