From 1c8e47eedf9383977956dacf755241714514d489 Mon Sep 17 00:00:00 2001 From: ManhNTX Date: Fri, 28 Oct 2022 19:16:46 +0700 Subject: [PATCH] TF-996: Debounce request --- .../email/presentation/email_controller.dart | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 5ce1df24a..c60c51e90 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -11,6 +11,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:debounce_throttle/debounce_throttle.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; @@ -94,6 +95,7 @@ class EmailController extends BaseController with AppLoaderMixin { Identity? _identitySelected; List? initialEmailContents; late Worker emailWorker; + late Debouncer _deBouncerTime; final Queue presentationEmailsLoaded = Queue(); PageController? pageController; int currentIndexPageView = 0; @@ -127,6 +129,7 @@ class EmailController extends BaseController with AppLoaderMixin { @override void onInit() { + _initializeDebounceTimeIndexPageViewChange(); _initWorker(); _listenDownloadAttachmentProgressState(); super.onInit(); @@ -149,6 +152,7 @@ class EmailController extends BaseController with AppLoaderMixin { void onClose() { _downloadProgressStateController.close(); pageController?.dispose(); + _deBouncerTime.cancel(); _clearWorker(); super.onClose(); } @@ -182,6 +186,17 @@ class EmailController extends BaseController with AppLoaderMixin { pageController?.jumpToPage(currentIndexPageView); } + void _initializeDebounceTimeIndexPageViewChange() { + _deBouncerTime = Debouncer( + const Duration(milliseconds: 800), + initialValue: null); + _deBouncerTime.values.listen((value) async { + if(value !=null) { + _getEmailContentAction(listEmail[value].id); + } + }); + } + void _initWorker() { emailWorker = ever(mailboxDashBoardController.selectedEmail, (presentationEmail) { log('EmailController::_initWorker(): $presentationEmail'); @@ -189,8 +204,8 @@ class EmailController extends BaseController with AppLoaderMixin { if (_currentEmailId != presentationEmail.id) { _currentEmailId = presentationEmail.id; _setCurrentPositionEmailInListEmail(_currentEmailId); + _deBouncerTime.value = currentIndexPageView; _resetToOriginalValue(); - _getEmailContentAction(presentationEmail.id); if (!presentationEmail.hasRead) { markAsEmailRead(presentationEmail, ReadActions.markAsRead); }