joinRoom function

Future<String?> joinRoom(
  1. dynamic context,
  2. dynamic ref,
  3. String displayMsg,
  4. String roomIdOrAlias,
  5. String? server,
  6. dynamic forward(
    1. String
    )?,
)

Implementation

Future<String?> joinRoom(
  BuildContext context,
  WidgetRef ref,
  String displayMsg,
  String roomIdOrAlias,
  String? server,
  Function(String)? forward,
) async {
  EasyLoading.show(status: displayMsg);
  final client = ref.read(alwaysClientProvider);
  try {
    final newRoom = await client.joinRoom(roomIdOrAlias, server);
    final roomId = newRoom.roomIdStr();
    EasyLoading.dismiss();
    // ensure we re-evaluate the room data on our end. This is necessary
    // if we knew of the room prior (e.g. we had left it), but hadn’t joined
    // this should properly re-evaluate all possible readers
    ref.invalidate(maybeRoomProvider(roomId));
    ref.invalidate(chatProvider(roomId));
    ref.invalidate(spaceProvider(roomId));
    if (forward != null) forward(roomId);
    return roomId;
  } catch (e, s) {
    _log.severe('Failed to join room', e, s);
    if (!context.mounted) {
      EasyLoading.dismiss();
      return null;
    }
    EasyLoading.showError(
      L10n.of(context).joiningFailed(e),
      duration: const Duration(seconds: 3),
    );
    return null;
  }
}