diff --git a/lib/views/discover_view.dart b/lib/views/discover_view.dart index 4aace497..ae525f01 100644 --- a/lib/views/discover_view.dart +++ b/lib/views/discover_view.dart @@ -66,15 +66,22 @@ class _DiscoverPageState extends State { }); } - Future _joinRoomAndWait(BuildContext context, String roomId) async { - final newRoomId = await Matrix.of(context).client.joinRoomOrAlias(roomId); - if (Matrix.of(context).client.getRoomById(newRoomId) == null) { - await Matrix.of(context) - .client - .onRoomUpdate - .stream - .firstWhere((r) => r.id == newRoomId); + Future _joinRoomAndWait( + BuildContext context, + String roomId, + String alias, + ) async { + if (Matrix.of(context).client.getRoomById(roomId) != null) { + return roomId; } + final newRoomId = await Matrix.of(context) + .client + .joinRoomOrAlias(alias?.isNotEmpty ?? false ? alias : roomId); + await Matrix.of(context) + .client + .onRoomUpdate + .stream + .firstWhere((r) => r.id == newRoomId); return newRoomId; } @@ -88,8 +95,13 @@ class _DiscoverPageState extends State { OkCancelResult.cancel) { return; } - final success = await SimpleDialogs(context) - .tryRequestWithLoadingDialog(_joinRoomAndWait(context, room.roomId)); + final success = await SimpleDialogs(context).tryRequestWithLoadingDialog( + _joinRoomAndWait( + context, + room.roomId, + room.canonicalAlias ?? room.aliases.first, + ), + ); if (success != false) { await Navigator.of(context).push( AppRoute.defaultRoute(