From 5a45454ac89b30c4d64ea436945a948d5ebf6fc7 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 24 Nov 2020 16:02:02 +0100 Subject: [PATCH] add debounce to mentions overlay --- lib/src/message_input.dart | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index a4bfcd18..5d36fd99 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -380,11 +380,19 @@ class MessageInputState extends State { Future> queryMembers; if (query.isNotEmpty) { - queryMembers = StreamChannel.of(context).channel.queryMembers(filter: { - 'name': { - '\$autocomplete': query, + queryMembers = StreamChannel.of(context).channel.queryMembers( + filter: { + 'name': { + '\$autocomplete': query, + }, }, - }).then((res) => res.members); + sort: [ + SortOption( + 'name', + direction: SortOption.ASC, + ), + ], + ).then((res) => res.members); } final members = StreamChannel.of(context).channel.state.members?.where((m) { @@ -952,6 +960,7 @@ class MessageInputState extends State { } } + Timer _debounce; void _onChange() { final s = textEditingController.text; StreamChannel.of(context).channel.keyStroke( @@ -980,8 +989,14 @@ class MessageInputState extends State { .split(' ') .last .contains('@')) { - _mentionsOverlay = _buildMentionsOverlayEntry(); - Overlay.of(context).insert(_mentionsOverlay); + if (_debounce?.isActive == true) _debounce.cancel(); + _debounce = Timer( + const Duration(milliseconds: 350), + () { + _mentionsOverlay = _buildMentionsOverlayEntry(); + Overlay.of(context).insert(_mentionsOverlay); + }, + ); } }