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')), ], ), ); } }