|
- 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/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 {
- AuthenticationBloc _authenticationBloc;
-
- @override
- Widget build(BuildContext context) {
- _authenticationBloc = BlocProvider.of<AuthenticationBloc>(context);
- return BlocListener<LoginBloc, LoginState>(
- listener: (context, state) {
- if (state.status.isSubmissionFailure) {
- LoadingDialog.hideLoadingDialog(context);
- Scaffold.of(context)
- ..hideCurrentSnackBar()
- ..showSnackBar(
- const SnackBar(content: Text('Authentication Failure')),
- );
- }
- if (state.status.isSubmissionSuccess) {
- LoadingDialog.hideLoadingDialog(context);
- _authenticationBloc.add(
- AuthenticationStatusChanged(AuthenticationStatus.authenticated));
- }
- if (state.status.isSubmissionInProgress) {
- LoadingDialog.showLoadingDialog(context);
- }
- },
- 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<LoginBloc, LoginState>(
- buildWhen: (previous, current) => previous.username != current.username,
- builder: (context, state) {
- return TextField(
- key: const Key('loginForm_usernameInput_textField'),
- onChanged: (username) =>
- context.bloc<LoginBloc>().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<LoginBloc, LoginState>(
- buildWhen: (previous, current) => previous.password != current.password,
- builder: (context, state) {
- return TextField(
- key: const Key('loginForm_passwordInput_textField'),
- onChanged: (password) =>
- context.bloc<LoginBloc>().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<LoginBloc, LoginState>(
- 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<LoginBloc>().add(const LoginSubmitted());
- }
- : null,
- );
- },
- );
- }
- }
|