import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:pcastlivetv/components/nc_form_field.dart'; import 'package:pcastlivetv/routes.dart'; import 'package:pcastlivetv/stores/login_store.dart'; import 'package:validatorless/validatorless.dart'; import 'package:velocity_x/velocity_x.dart'; class LoginPage extends StatefulWidget { const LoginPage({super.key}); @override State createState() => _LoginPageState(); } class _LoginPageState extends State { @override Widget build(BuildContext context) { LoginStore store = VxState.store as LoginStore; final formKey = GlobalKey(); String email = ''; String password = ''; return Container( color: const Color.fromRGBO(166, 0, 249, 1), child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Card( elevation: 20, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), side: const BorderSide( width: 1, color: Colors.black, ), ), child: Column( children: [ const SizedBox( height: 32.0, ), "Login".text.xl5.bold.make(), const SizedBox( height: 32.0, ), SizedBox( width: MediaQuery.of(context).size.width / 3, child: Form( key: formKey, child: Padding( padding: const EdgeInsets.only( left: 64.0, right: 64, bottom: 32, ), child: Column( children: [ NCFormField( label: 'Email', value: email, validator: Validatorless.multiple( [ Validatorless.email('Email inválido'), Validatorless.required('Email é obrigatório'), ], ), onChanged: (value) => email = value, ), const SizedBox( height: 16.0, ), NCFormField( label: 'Senha', value: password, obscureText: true, validator: Validatorless.required('Senha é obrigatória'), onChanged: (value) => password = value, ), const SizedBox( height: 32.0, ), ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: const Color.fromRGBO(166, 0, 249, 1), foregroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), onPressed: () async { var result = await processAuth(formKey, store, email, password); if (result) { router.go('/user'); } else { Fluttertoast.showToast( msg: store.message!, toastLength: Toast.LENGTH_LONG, webBgColor: "linear-gradient(to right, #ff0000, #ff0000)", webPosition: "center", gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 32); } }, child: const Padding( padding: EdgeInsets.all(8.0), child: Text('Entrar', style: TextStyle(fontSize: 24)), ), ), ], ), ), ), ), ], ), ), ], ), ), ); } Future processAuth(GlobalKey formKey, LoginStore store, String email, String password) async { Function? close; if (formKey.currentState!.validate()) { formKey.currentState!.save(); store.email = email; store.password = password; try { close = context.showLoading( msg: '', bgColor: Colors.transparent, textSize: 20, ); await store.login(); close(); if (store.isLogged) { return true; } if (store.message != "") { return false; } } catch (e) { close!(); Fluttertoast.showToast( msg: e.toString().replaceAll("Exception: ", ""), toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 16.0); } // SnackBarService.showSnackBar(content: e.toString().replaceAll("Exception: ", ""), error: true); return false; } return false; } }