From 5424dda62abfd7a3c45226444c79f847802ed0e6 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Sun, 25 Jan 2026 15:00:33 +0000 Subject: [PATCH] Nicer verification error --- lib/controllers/client_controller.dart | 6 ++-- lib/pages/verify_page.dart | 48 ++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/lib/controllers/client_controller.dart b/lib/controllers/client_controller.dart index 571e9c0..59bb0b9 100644 --- a/lib/controllers/client_controller.dart +++ b/lib/controllers/client_controller.dart @@ -82,7 +82,7 @@ class ClientController extends AsyncNotifier { try { await sendCommand("verify", {"recovery_key": recoveryKey}); return true; - } catch (_) { + } catch (error) { return false; } } @@ -91,7 +91,7 @@ class ClientController extends AsyncNotifier { try { await sendCommand("login", login.toJson()); return true; - } catch (_) { + } catch (error) { return false; } } @@ -102,7 +102,7 @@ class ClientController extends AsyncNotifier { "user_id": "@fakeuser:${homeserver.host}", }); return (response["m.homeserver"] as Map)["base_url"]; - } catch (_) { + } catch (error) { return null; } } diff --git a/lib/pages/verify_page.dart b/lib/pages/verify_page.dart index bc33151..1011f80 100644 --- a/lib/pages/verify_page.dart +++ b/lib/pages/verify_page.dart @@ -10,6 +10,7 @@ class VerifyPage extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final passphraseController = useTextEditingController(); + final isVerifying = useState(false); return AlertDialog( title: Text("Verify"), content: Column( @@ -32,12 +33,47 @@ class VerifyPage extends HookConsumerWidget { ), actions: [ TextButton( - onPressed: () async { - ref - .watch(ClientController.provider.notifier) - .verify(passphraseController.text); - Navigator.of(context).pop(); - }, + onPressed: isVerifying.value + ? null + : () async { + final scaffoldMessenger = ScaffoldMessenger.of(context); + final snackbar = scaffoldMessenger.showSnackBar( + SnackBar( + content: Text( + "Attempting to verify with recovery key...", + ), + duration: Duration(days: 999), + ), + ); + + isVerifying.value = true; + + final success = await ref + .watch(ClientController.provider.notifier) + .verify(passphraseController.text); + + snackbar.close(); + if (!success) { + isVerifying.value = false; + if (context.mounted) { + scaffoldMessenger.showSnackBar( + SnackBar( + backgroundColor: Theme.of( + context, + ).colorScheme.errorContainer, + content: Text( + "Verification failed. Is your passphrase correct?", + style: TextStyle( + color: Theme.of( + context, + ).colorScheme.onErrorContainer, + ), + ), + ), + ); + } + } + }, child: Text("Verify"), ), ],