@@ -1,3 +1,7 @@
|
||||
## 0.2.13+2
|
||||
|
||||
- Add debounce to on change messageinput listener
|
||||
|
||||
## 0.2.13+1
|
||||
|
||||
- Use TextEditingController.addListener instead of TextField.onChanged
|
||||
|
||||
+51
-32
@@ -380,11 +380,19 @@ class MessageInputState extends State<MessageInput> {
|
||||
Future<List<Member>> 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) {
|
||||
@@ -421,7 +429,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
return ListView(
|
||||
padding: const EdgeInsets.all(0),
|
||||
shrinkWrap: true,
|
||||
children: snapshot.data
|
||||
children: (snapshot.data ?? members)
|
||||
.map((m) => ListTile(
|
||||
leading: UserAvatar(
|
||||
user: m.user,
|
||||
@@ -930,7 +938,8 @@ class MessageInputState extends State<MessageInput> {
|
||||
super.initState();
|
||||
|
||||
if (!kIsWeb) {
|
||||
_keyboardListener = KeyboardVisibility.onChange.listen((visible) {
|
||||
_keyboardListener =
|
||||
KeyboardVisibilityController().onChange.listen((visible) {
|
||||
if (visible) {
|
||||
_onChange();
|
||||
} else {
|
||||
@@ -952,37 +961,47 @@ class MessageInputState extends State<MessageInput> {
|
||||
}
|
||||
}
|
||||
|
||||
Timer _debounce;
|
||||
void _onChange() {
|
||||
final s = textEditingController.text;
|
||||
StreamChannel.of(context).channel.keyStroke(
|
||||
widget.parentMessage?.id,
|
||||
);
|
||||
if (_debounce?.isActive == true) _debounce.cancel();
|
||||
_debounce = Timer(
|
||||
const Duration(milliseconds: 350),
|
||||
() {
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
final s = textEditingController.text;
|
||||
StreamChannel.of(context).channel.keyStroke(
|
||||
widget.parentMessage?.id,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_messageIsPresent = s.trim().isNotEmpty;
|
||||
});
|
||||
setState(() {
|
||||
_messageIsPresent = s.trim().isNotEmpty;
|
||||
});
|
||||
|
||||
_commandsOverlay?.remove();
|
||||
_commandsOverlay = null;
|
||||
_mentionsOverlay?.remove();
|
||||
_mentionsOverlay = null;
|
||||
_commandsOverlay?.remove();
|
||||
_commandsOverlay = null;
|
||||
_mentionsOverlay?.remove();
|
||||
_mentionsOverlay = null;
|
||||
|
||||
if (s.trim().startsWith('/')) {
|
||||
_commandsOverlay = _buildCommandsOverlayEntry();
|
||||
Overlay.of(context).insert(_commandsOverlay);
|
||||
}
|
||||
if (s.trim().startsWith('/')) {
|
||||
_commandsOverlay = _buildCommandsOverlayEntry();
|
||||
Overlay.of(context).insert(_commandsOverlay);
|
||||
}
|
||||
|
||||
if (_messageIsPresent &&
|
||||
textEditingController.selection.isCollapsed &&
|
||||
textEditingController.selection.baseOffset > 0 &&
|
||||
textEditingController.text
|
||||
.substring(0, textEditingController.selection.baseOffset)
|
||||
.split(' ')
|
||||
.last
|
||||
.contains('@')) {
|
||||
_mentionsOverlay = _buildMentionsOverlayEntry();
|
||||
Overlay.of(context).insert(_mentionsOverlay);
|
||||
}
|
||||
if (_messageIsPresent &&
|
||||
textEditingController.selection.isCollapsed &&
|
||||
textEditingController.selection.baseOffset > 0 &&
|
||||
textEditingController.text
|
||||
.substring(0, textEditingController.selection.baseOffset)
|
||||
.split(' ')
|
||||
.last
|
||||
.contains('@')) {
|
||||
_mentionsOverlay = _buildMentionsOverlayEntry();
|
||||
Overlay.of(context).insert(_mentionsOverlay);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void _parseExistingMessage(Message message) {
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
name: stream_chat_flutter
|
||||
homepage: https://github.com/GetStream/stream-chat-flutter
|
||||
description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
|
||||
version: 0.2.13+1
|
||||
version: 0.2.13+2
|
||||
repository: https://github.com/GetStream/stream-chat-flutter
|
||||
issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues
|
||||
|
||||
@@ -19,10 +19,10 @@ dependencies:
|
||||
flutter_markdown: ^0.5.0
|
||||
url_launcher: ^5.4.11
|
||||
video_player: ^1.0.0
|
||||
chewie: ^0.10.4
|
||||
chewie: ^0.12.0
|
||||
file_picker: ^2.0.12
|
||||
image_picker: ^0.6.7+2
|
||||
flutter_keyboard_visibility: ^3.3.0
|
||||
flutter_keyboard_visibility: ^4.0.1
|
||||
stream_chat: ^0.2.13
|
||||
mime: ^0.9.6+3
|
||||
visibility_detector: ^0.1.5
|
||||
|
||||
Reference in New Issue
Block a user