import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:softplayer_web/features/authorization/application/authorization_application.dart'; import 'package:softplayer_web/features/authorization/application/sign_in_data.dart'; import 'package:toastification/toastification.dart'; class LoginForm extends ConsumerStatefulWidget { const LoginForm({super.key, required this.toggleAuth}); final VoidCallback toggleAuth; @override ConsumerState createState() => _LoginForm(); } class _LoginForm extends ConsumerState { final _formKey = GlobalKey(); final TextEditingController emailCtrl = TextEditingController(); final TextEditingController passwordCtrl = TextEditingController(); Future _submitForm() async { if (_formKey.currentState!.validate()) { // If valid, you can use the values final email = emailCtrl.text; final password = passwordCtrl.text; final form = SignInData(email: email, password: password); try { await ref.read(authorizationControllerProvider.notifier).signin(form); } catch (e) { if (!mounted) { return; } log(e.toString()); toastification.show( context: context, type: ToastificationType.error, style: ToastificationStyle.flatColored, alignment: Alignment.topRight, autoCloseDuration: const Duration(seconds: 4), title: const Text('Authentication failed'), description: Text(e.toString()), showProgressBar: false, ); } } } @override Widget build(BuildContext context) { final controller = ref.read(authorizationControllerProvider.notifier); return SizedBox( 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')), ], ), ), ); } }