62 lines
1.8 KiB
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')),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|