TF-340 Debouncing when open the mailbox to prevent too much pressure on Back-end request

This commit is contained in:
Dat PHAM HOANG
2022-03-16 21:52:36 +07:00
committed by Dat H. Pham
parent c0b654d5a9
commit baedd9597a
4 changed files with 43 additions and 3 deletions
+2
View File
@@ -4,6 +4,8 @@ abstract class Success with EquatableMixin {}
abstract class ViewState extends Success {}
abstract class ViewEvent extends Success {}
class UIState extends ViewState {
static final idle = UIState();
@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
@@ -8,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmapState;
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
@@ -31,6 +34,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_in
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart';
@@ -73,6 +77,8 @@ class MailboxController extends BaseMailboxController {
final searchQuery = SearchQuery.initial().obs;
final currentSelectMode = SelectMode.INACTIVE.obs;
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
TextEditingController searchInputController = TextEditingController();
FocusNode searchFocus = FocusNode();
@@ -123,6 +129,10 @@ class MailboxController extends BaseMailboxController {
}
});
});
_openMailboxEventController.stream.throttleTime(Duration(milliseconds: 800)).listen((event) {
_handleOpenMailbox(event.buildContext, event.presentationMailbox);
});
}
@override
@@ -246,9 +256,9 @@ class MailboxController extends BaseMailboxController {
}
}
void openMailbox(
BuildContext context,
PresentationMailbox presentationMailboxSelected
void _handleOpenMailbox(
BuildContext context,
PresentationMailbox presentationMailboxSelected
) {
FocusScope.of(context).unfocus();
@@ -260,6 +270,13 @@ class MailboxController extends BaseMailboxController {
}
}
void openMailbox(
BuildContext context,
PresentationMailbox presentationMailboxSelected
) {
_openMailboxEventController.add(OpenMailboxViewEvent(context, presentationMailboxSelected));
}
void _deleteCredential() async {
await _deleteCredentialInteractor.execute();
}
@@ -594,4 +611,10 @@ class MailboxController extends BaseMailboxController {
_clearAllCache();
pushAndPopAll(AppRoutes.LOGIN);
}
@override
void dispose() {
_openMailboxEventController.close();
super.dispose();
}
}
@@ -0,0 +1,13 @@
import 'package:core/presentation/state/success.dart';
import 'package:flutter/widgets.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
class OpenMailboxViewEvent extends ViewEvent {
final BuildContext buildContext;
final PresentationMailbox presentationMailbox;
OpenMailboxViewEvent(this.buildContext, this.presentationMailbox);
@override
List<Object?> get props => [buildContext, presentationMailbox];
}
+2
View File
@@ -135,6 +135,8 @@ dependencies:
pointer_interceptor: 0.9.1
rxdart: 0.27.3
dev_dependencies:
flutter_test:
sdk: flutter