use querymembers
This commit is contained in:
+43
-27
@@ -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(),
|
||||||
),
|
);
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user