From dfc7b156f1f22274ada721ab4f3bcd6ce76bd2e9 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 27 Jun 2024 21:55:54 +0200 Subject: [PATCH] fix handling errors --- lib/pages/create_game_widget.dart | 4 ++-- lib/pages/join_game_handle_widget.dart | 32 ++++++++++++++++++++++---- lib/pages/lobby_selector.dart | 1 + 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/lib/pages/create_game_widget.dart b/lib/pages/create_game_widget.dart index 199e149..a2ae0f7 100644 --- a/lib/pages/create_game_widget.dart +++ b/lib/pages/create_game_widget.dart @@ -141,8 +141,8 @@ class _CreateGameWidgetState extends State { backgroundColor: Colors.amberAccent, content: Text("mChess server is not responding. Try again or give up"), ); - Future.delayed(const Duration(seconds: 2), () { - if (!context.mounted) return null; + Future.delayed(const Duration(seconds: 1), () { + if (!mounted) return null; ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context).showSnackBar(snackBar); diff --git a/lib/pages/join_game_handle_widget.dart b/lib/pages/join_game_handle_widget.dart index 7cd0724..66b0bf9 100644 --- a/lib/pages/join_game_handle_widget.dart +++ b/lib/pages/join_game_handle_widget.dart @@ -4,11 +4,13 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; import 'package:http/http.dart' as http; import 'package:mchess/api/game_info.dart'; import 'package:mchess/connection_cubit/connection_cubit.dart'; import 'package:mchess/pages/chess_game.dart'; import 'package:mchess/utils/config.dart' as config; +import 'package:universal_platform/universal_platform.dart'; class JoinGameHandleWidget extends StatefulWidget { final String passphrase; @@ -26,8 +28,10 @@ class _JoinGameHandleWidgetState extends State { super.initState(); joinGameFuture = joinPrivateGame(widget.passphrase); joinGameFuture.then((val) { + if (val == null) return; + ConnectionCubit.getInstance().connectIfNotConnected( - val!.playerID!.uuid, + val.playerID!.uuid, val.passphrase, ); }); @@ -35,6 +39,18 @@ class _JoinGameHandleWidgetState extends State { @override Widget build(BuildContext context) { + FloatingActionButton? fltnBtn; + if (UniversalPlatform.isLinux || + UniversalPlatform.isMacOS || + UniversalPlatform.isWindows) { + fltnBtn = FloatingActionButton( + child: const Icon(Icons.cancel), + onPressed: () { + context.pop(); + }, + ); + } + var loadingIndicator = const SizedBox( height: 100, width: 100, @@ -42,6 +58,7 @@ class _JoinGameHandleWidgetState extends State { ); return Scaffold( + floatingActionButton: fltnBtn, body: Center( child: FutureBuilder( future: joinGameFuture, @@ -89,8 +106,13 @@ class _JoinGameHandleWidgetState extends State { backgroundColor: Colors.amberAccent, content: Text("mChess server is not responding. Try again or give up"), ); - ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar(snackBar); + + Future.delayed(const Duration(seconds: 1), () { + if (!mounted) return null; + ScaffoldMessenger.of(context).clearSnackBars(); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + context.goNamed('lobbySelector'); // We go back to the lobby selector + }); return null; } @@ -100,10 +122,12 @@ class _JoinGameHandleWidgetState extends State { content: Text("Passphrase could not be found."), ); - if (!context.mounted) return null; + if (!mounted) return null; ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context).showSnackBar(snackBar); + context.goNamed('lobbySelector'); + return null; } diff --git a/lib/pages/lobby_selector.dart b/lib/pages/lobby_selector.dart index c6e10b2..4c50f6f 100644 --- a/lib/pages/lobby_selector.dart +++ b/lib/pages/lobby_selector.dart @@ -93,6 +93,7 @@ class _LobbySelectorState extends State { } void submitAction(String phrase) { + context.pop(); context.goNamed('game', pathParameters: {'phrase': phrase.toURL()}); phraseController.clear(); }