fartstack/frontend/lib/features/room/game_room.dart

62 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:frontend/providers/auth.dart';
import 'package:frontend/providers/game_messages.dart';
import 'package:frontend/providers/web_socket.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';
final logger = Logger('GameRoomHome');
class GameRoomHome extends ConsumerStatefulWidget {
const GameRoomHome({super.key, this.roomUuid});
final String? roomUuid;
@override
ConsumerState<GameRoomHome> createState() => _GameRoomHomeState();
}
class _GameRoomHomeState extends ConsumerState<GameRoomHome> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) => ref.read(webSocketNotifierProvider.notifier).connect());
super.initState();
}
@override
Widget build(BuildContext context) {
final jwt = ref.watch(jwtBodyProvider);
if (jwt == null || jwt.roomUuid != widget.roomUuid) {
logger.fine('Tried to open room, but not authenticated / wrong room');
// return home
context.go('/');
}
final connection = ref.watch(webSocketNotifierProvider).valueOrNull;
ref.listen(
gameMessageNotifierProvider,
(previous, next) {
print('Got message: $next');
},
);
// enstablish ws connection at /room/roomCode/ws and save to gameMessageProvider
return Scaffold(
body: Column(
children: [
Text('Authenticated.'),
Text('Welcome to room ${widget.roomUuid}'),
ElevatedButton(
onPressed: connection == null
? null
: () {
connection.add('Test message');
},
child: Text('Send message on socket')),
],
),
);
}
}