use querymembers

This commit is contained in:
Salvatore Giordano
2020-06-04 14:49:47 +02:00
parent 3099b9566b
commit 301cac18fb
+43 -27
View File
@@ -392,6 +392,16 @@ class MessageInputState extends State<MessageInput> {
.split('@'); .split('@');
final query = splits.last.toLowerCase(); final query = splits.last.toLowerCase();
Future<List<Member>> queryMembers;
if (query.isNotEmpty) {
queryMembers = StreamChannel.of(context).channel.queryMembers(filter: {
'name': {
'\$autocomplete': query,
},
}).then((res) => res.members);
}
final members = StreamChannel.of(context).channel.state.members?.where((m) { final members = StreamChannel.of(context).channel.state.members?.where((m) {
return m.user.name.toLowerCase().contains(query); return m.user.name.toLowerCase().contains(query);
})?.toList() ?? })?.toList() ??
@@ -419,36 +429,42 @@ class MessageInputState extends State<MessageInput> {
], ],
color: StreamChatTheme.of(context).primaryColor, color: StreamChatTheme.of(context).primaryColor,
), ),
child: ListView( child: FutureBuilder<List<Member>>(
padding: const EdgeInsets.all(0), future: queryMembers ?? Future.value(members),
shrinkWrap: true, initialData: members,
children: members builder: (context, snapshot) {
.map((m) => ListTile( return ListView(
leading: UserAvatar( padding: const EdgeInsets.all(0),
user: m.user, shrinkWrap: true,
), children: snapshot.data
title: Text('${m.user.name}'), .map((m) => ListTile(
onTap: () { leading: UserAvatar(
_mentionedUsers.add(m.user); user: m.user,
),
title: Text('${m.user.name}'),
onTap: () {
_mentionedUsers.add(m.user);
splits[splits.length - 1] = m.user.name; splits[splits.length - 1] = m.user.name;
final rejoin = splits.join('@'); final rejoin = splits.join('@');
textEditingController.value = TextEditingValue( textEditingController.value = TextEditingValue(
text: rejoin + text: rejoin +
textEditingController.text.substring( textEditingController.text.substring(
textEditingController.selection.start), textEditingController
selection: TextSelection.collapsed( .selection.start),
offset: rejoin.length, selection: TextSelection.collapsed(
), offset: rejoin.length,
); ),
);
_mentionsOverlay?.remove(); _mentionsOverlay?.remove();
_mentionsOverlay = null; _mentionsOverlay = null;
}, },
)) ))
.toList(), .toList(),
), );
}),
), ),
), ),
); );