import 'package:farm_tpf/presentation/screens/login/bloc/login_bloc.dart'; import 'package:flutter/material.dart'; import 'package:formz/formz.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class LoginForm extends StatelessWidget { @override Widget build(BuildContext context) { return BlocListener( listener: (context, state) { if (state.status.isSubmissionFailure) { Scaffold.of(context) ..hideCurrentSnackBar() ..showSnackBar( const SnackBar(content: Text('Authentication Failure')), ); } }, child: Align( alignment: const Alignment(0, -1 / 3), child: Column( mainAxisSize: MainAxisSize.min, children: [ _UsernameInput(), const Padding(padding: EdgeInsets.all(12)), _PasswordInput(), const Padding(padding: EdgeInsets.all(12)), _LoginButton(), ], ), ), ); } } class _UsernameInput extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( buildWhen: (previous, current) => previous.username != current.username, builder: (context, state) { return TextField( key: const Key('loginForm_usernameInput_textField'), onChanged: (username) => context.bloc().add(LoginUsernameChanged(username)), decoration: InputDecoration( labelText: 'Tên đăng nhập', errorText: state.username.invalid ? 'Vui lòng nhập tên đăng nhập' : null, ), ); }, ); } } class _PasswordInput extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( buildWhen: (previous, current) => previous.password != current.password, builder: (context, state) { return TextField( key: const Key('loginForm_passwordInput_textField'), onChanged: (password) => context.bloc().add(LoginPasswordChanged(password)), obscureText: true, decoration: InputDecoration( labelText: 'Mật khẩu', errorText: state.password.invalid ? 'Vui lòng nhập mật khẩu' : null, ), ); }, ); } } class _LoginButton extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( buildWhen: (previous, current) => previous.status != current.status, builder: (context, state) { return state.status.isSubmissionInProgress ? const CircularProgressIndicator() : RaisedButton( key: const Key('loginForm_continue_raisedButton'), child: const Text('Đăng nhập'), onPressed: state.status.isValidated ? () { context.bloc().add(const LoginSubmitted()); } : null, ); }, ); } }