diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart index 0331a0c4..c1d8c649 100644 --- a/lib/pages/new_private_chat/new_private_chat.dart +++ b/lib/pages/new_private_chat/new_private_chat.dart @@ -27,7 +27,7 @@ class NewPrivateChatController extends State { final TextEditingController controller = TextEditingController(); final FocusNode textFieldFocus = FocusNode(); - Future? searchResponse; + Future>? searchResponse; Timer? _searchCoolDown; @@ -46,12 +46,25 @@ class NewPrivateChatController extends State { _searchCoolDown?.cancel(); _searchCoolDown = Timer(_coolDown, () { setState(() { - searchResponse = - Matrix.of(context).client.searchUserDirectory(searchTerm); + searchResponse = _searchUser(searchTerm); }); }); } + Future> _searchUser(String searchTerm) async { + final result = + await Matrix.of(context).client.searchUserDirectory(searchTerm); + final profiles = result.results; + + if (searchTerm.isValidMatrixId && + searchTerm.sigil == '@' && + !profiles.any((profile) => profile.userId == searchTerm)) { + profiles.add(Profile(userId: searchTerm)); + } + + return profiles; + } + void inviteAction() => FluffyShare.shareInviteLink(context); void openScannerAction() async { diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart index adc48e7e..8ebef789 100644 --- a/lib/pages/new_private_chat/new_private_chat_view.dart +++ b/lib/pages/new_private_chat/new_private_chat_view.dart @@ -205,7 +205,7 @@ class NewPrivateChatView extends StatelessWidget { child: CircularProgressIndicator.adaptive(), ); } - if (result.results.isEmpty) { + if (result.isEmpty) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -226,9 +226,9 @@ class NewPrivateChatView extends StatelessWidget { ); } return ListView.builder( - itemCount: result.results.length, + itemCount: result.length, itemBuilder: (context, i) { - final contact = result.results[i]; + final contact = result[i]; final displayname = contact.displayName ?? contact.userId.localpart ?? contact.userId;