From 9b8d50d3f9a313a1f4c87d2501fc120d050e95d7 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 May 2026 15:45:35 +0200 Subject: [PATCH] A small cleanup Signed-off-by: Nikolai Rodionov --- .../authorization_application.dart | 27 +-- .../presentation/login_form.dart | 162 ++++++++++-------- 2 files changed, 97 insertions(+), 92 deletions(-) diff --git a/lib/features/authorization/application/authorization_application.dart b/lib/features/authorization/application/authorization_application.dart index 9f9e9b4..34bb057 100644 --- a/lib/features/authorization/application/authorization_application.dart +++ b/lib/features/authorization/application/authorization_application.dart @@ -7,20 +7,14 @@ import 'package:softplayer_web/features/authorization/application/sign_in_data.d import 'package:softplayer_web/features/authorization/application/sign_up_data.dart'; class AuthState { - final AuthMode mode; final bool isAuthorized; - const AuthState({this.mode = AuthMode.login, this.isAuthorized = false}); - AuthState copyWith({AuthMode? mode, String? status, bool? isAuthorized}) { - return AuthState( - mode: mode ?? this.mode, - isAuthorized: isAuthorized ?? this.isAuthorized, - ); + const AuthState({this.isAuthorized = false}); + AuthState copyWith({bool? isAuthorized}) { + return AuthState(isAuthorized: isAuthorized ?? this.isAuthorized); } } -enum AuthMode { login, signup } - final authorizationControllerProvider = AsyncNotifierProvider( AuthorizationController.new, @@ -29,9 +23,6 @@ final authorizationControllerProvider = class AuthorizationController extends AsyncNotifier { @override Future build() async { - // Use is considered authorized if tokens are set in the memory. - // In case tokens are not valid, it will be discovered by the first - // api call. final tokenState = await ref.watch(tokensControllerProvider.future); if (tokenState.getAccessToken().isEmpty && tokenState.getRefreshToken().isNotEmpty) { @@ -44,18 +35,6 @@ class AuthorizationController extends AsyncNotifier { return AuthState(isAuthorized: isAuthorized); } - AuthMode authMode = AuthMode.login; - - void toggleAuthMode() { - state = AsyncData( - state.value!.copyWith( - mode: state.value!.mode == AuthMode.login - ? AuthMode.signup - : AuthMode.login, - ), - ); - } - Future signin(SignInData form) async { state = const AsyncLoading(); diff --git a/lib/features/authorization/presentation/login_form.dart b/lib/features/authorization/presentation/login_form.dart index eb33597..7b9e94f 100644 --- a/lib/features/authorization/presentation/login_form.dart +++ b/lib/features/authorization/presentation/login_form.dart @@ -49,78 +49,104 @@ class _LoginForm extends ConsumerState { @override Widget build(BuildContext context) { - final controller = ref.read(authorizationControllerProvider.notifier); - return SizedBox( - width: 400, - child: Form( - key: _formKey, - child: Column( + final state = ref.watch(authorizationControllerProvider); + return LayoutBuilder( + builder: ((context, constraints) { + return Stack( children: [ - Container( - alignment: Alignment.topLeft, - child: SelectableText( - "Welcome back!", - style: Theme.of(context).textTheme.headlineLarge, - ), - ), - SizedBox(height: 12), - Container( - alignment: Alignment.topLeft, - child: Row( - children: [ - Text( - "Don't have an account yet? ", - style: Theme.of(context).textTheme.bodyMedium, - ), - TextButton( - onPressed: widget.toggleAuth, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - minimumSize: Size(0, 0), - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - ), - child: const Text( - "Sign up now", - style: TextStyle(decoration: TextDecoration.underline), - ), - ), - ], - ), - ), - SizedBox(height: 36), - TextFormField( - onFieldSubmitted: (_) => _submitForm(), - controller: emailCtrl, - decoration: InputDecoration(hintText: "Email address"), - validator: (value) { - if (value == null || value.isEmpty) { - return 'Email is required'; - } - return null; - }, - ), - SizedBox(height: 16), - TextFormField( - onFieldSubmitted: (_) => _submitForm(), - controller: passwordCtrl, - obscureText: true, - decoration: InputDecoration(hintText: "Password"), - validator: (value) { - if (value == null || value.isEmpty) { - return 'Password is required'; - } - return null; - }, - ), - SizedBox(height: 16), SizedBox( - width: double.infinity, - child: Text("Forgot password?", textAlign: TextAlign.left), + width: 400, + child: Form( + key: _formKey, + child: Column( + children: [ + Container( + alignment: Alignment.topLeft, + child: SelectableText( + "Welcome back!", + style: Theme.of(context).textTheme.headlineLarge, + ), + ), + SizedBox(height: 12), + Container( + alignment: Alignment.topLeft, + child: Row( + children: [ + Text( + "Don't have an account yet? ", + style: Theme.of(context).textTheme.bodyMedium, + ), + TextButton( + onPressed: widget.toggleAuth, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(0, 0), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + child: const Text( + "Sign up now", + style: TextStyle( + decoration: TextDecoration.underline, + ), + ), + ), + ], + ), + ), + SizedBox(height: 36), + TextFormField( + onFieldSubmitted: (_) => _submitForm(), + controller: emailCtrl, + decoration: InputDecoration(hintText: "Email address"), + validator: (value) { + if (value == null || value.isEmpty) { + return 'Email is required'; + } + return null; + }, + ), + SizedBox(height: 16), + TextFormField( + onFieldSubmitted: (_) => _submitForm(), + controller: passwordCtrl, + obscureText: true, + decoration: InputDecoration(hintText: "Password"), + validator: (value) { + if (value == null || value.isEmpty) { + return 'Password is required'; + } + return null; + }, + ), + SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: Text( + "Forgot password?", + textAlign: TextAlign.left, + ), + ), + ElevatedButton( + onPressed: _submitForm, + child: const Text('Log in'), + ), + ], + ), + ), ), - ElevatedButton(onPressed: _submitForm, child: const Text('Log in')), + if (state.isLoading) + Positioned.fill( + child: AbsorbPointer( + absorbing: true, + child: Container( + color: Colors.black45, + child: const Center(child: CircularProgressIndicator()), + ), + ), + ), ], - ), - ), + ); + }), ); } }