|
- import 'package:farm_tpf/authentication/authentication.dart';
- import 'package:farm_tpf/data/repository/authentication_repository.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
- import 'package:farm_tpf/presentation/screens/forgot_password/sc_forgot_password.dart';
- import 'package:farm_tpf/presentation/screens/login/bloc/login_bloc.dart';
- import 'package:farm_tpf/utils/const_color.dart';
- import 'package:flutter/material.dart';
- import 'package:formz/formz.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
-
- class LoginForm extends StatelessWidget {
- late AuthenticationBloc _authenticationBloc;
- FocusNode _usernameFocus = FocusNode();
- FocusNode _passwordFocus = FocusNode();
-
- @override
- Widget build(BuildContext context) {
- _authenticationBloc = BlocProvider.of<AuthenticationBloc>(context);
- return BlocListener<LoginBloc, LoginState>(
- listener: (context, state) {
- if (state.status.isSubmissionFailure) {
- LoadingDialog.hideLoadingDialog(context);
- Utils.showSnackBarError(message: 'Tài khoản hoặc mật khẩu không đúng.');
- }
- if (state.status.isSubmissionSuccess) {
- LoadingDialog.hideLoadingDialog(context);
- _authenticationBloc.add(const AuthenticationStatusChanged(AuthenticationStatus.authenticated));
- }
- if (state.status.isSubmissionInProgress) {
- LoadingDialog.showLoadingDialog(context);
- }
- },
- child: Align(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- mainAxisSize: MainAxisSize.min,
- children: [
- _UsernameInput(usernameFocus: _usernameFocus, nextFocus: _passwordFocus),
- const Padding(padding: EdgeInsets.all(12)),
- _PasswordInput(
- passwordFocus: _passwordFocus,
- ),
- const Padding(padding: EdgeInsets.all(16)),
- _LoginButton(),
- const Padding(padding: EdgeInsets.all(6)),
- _FogotPasswordButton(),
- ],
- ),
- ),
- );
- }
- }
-
- class _FogotPasswordButton extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return Align(
- alignment: Alignment.center,
- child: FlatButton(
- child: Text('Quên mật khẩu', style: TextStyle(color: AppColors.BLUE, fontSize: 16)),
- onPressed: () {
- Navigator.of(context).push(MaterialPageRoute(builder: (_) => ForgotPasswordScreen()));
- }));
- }
- }
-
- class _UsernameInput extends StatelessWidget {
- final FocusNode usernameFocus;
- final FocusNode nextFocus;
- _UsernameInput({required this.usernameFocus, required this.nextFocus});
- @override
- Widget build(BuildContext context) {
- return BlocBuilder<LoginBloc, LoginState>(
- buildWhen: (previous, current) => previous.username != current.username,
- builder: (context, state) {
- return Container(
- height: 50,
- padding: const EdgeInsets.symmetric(horizontal: 8),
- child: Center(
- child: TextFormField(
- focusNode: usernameFocus,
- textInputAction: TextInputAction.next,
- onChanged: (username) => context.bloc<LoginBloc>().add(LoginUsernameChanged(username)),
- // autovalidate: true,
-
- validator: (_) {
- return state.username.invalid ? 'Vui lòng nhập tài khoản' : null;
- },
- onFieldSubmitted: (_) {
- usernameFocus.unfocus();
- FocusScope.of(context).requestFocus(nextFocus);
- },
- maxLines: 1,
- keyboardType: TextInputType.text,
- obscureText: false,
- textAlign: TextAlign.left,
- decoration: const InputDecoration(
- hintText: 'Tài khoản',
- ),
- ),
- ));
- },
- );
- }
- }
-
- class _PasswordInput extends StatelessWidget {
- final FocusNode passwordFocus;
- _PasswordInput({required this.passwordFocus});
- @override
- Widget build(BuildContext context) {
- return BlocBuilder<LoginBloc, LoginState>(
- buildWhen: (previous, current) => previous.password != current.password,
- builder: (context, state) {
- return Container(
- height: 50,
- padding: const EdgeInsets.symmetric(horizontal: 8),
- child: Center(
- child: TextFormField(
- focusNode: passwordFocus,
- onChanged: (password) => context.bloc<LoginBloc>().add(LoginPasswordChanged(password)),
- // autovalidate: true,
- validator: (_) {
- return state.password.invalid ? 'Vui lòng nhập mật khẩu' : null;
- },
- onFieldSubmitted: (_) {
- passwordFocus.unfocus();
- if (state.status.isValidated) {
- context.bloc<LoginBloc>().add(const LoginSubmitted());
- }
- },
- maxLines: 1,
- keyboardType: TextInputType.text,
- obscureText: true,
- textAlign: TextAlign.left,
- decoration: const InputDecoration(
- hintText: 'Mật khẩu',
- ),
- ),
- ));
- },
- );
- }
- }
-
- class _LoginButton extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return BlocBuilder<LoginBloc, LoginState>(
- buildWhen: (previous, current) => previous.status != current.status,
- builder: (context, state) {
- return SizedBox(
- width: double.infinity,
- height: 55,
- child: FlatButton(
- onPressed: () {
- // if (state.status.isValidated) {
- // context.bloc<LoginBloc>().add(const LoginSubmitted());
- // }
- context.bloc<LoginBloc>().add(const LoginSubmitted());
- },
- color: state.status.isValidated ? AppColors.DEFAULT : AppColors.GRAY1_50,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(7.0),
- ),
- child: Text('Đăng nhập'.toUpperCase(), style: TextStyle(fontWeight: FontWeight.bold, color: AppColors.WHITE, fontSize: 18)),
- ),
- );
- },
- );
- }
- }
|