import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../application/auth/auth_bloc.dart'; import '../../../../application/auth/login_form/login_form_bloc.dart'; import '../../../../injection.dart'; import '../../../components/button/button.dart'; import '../../../components/field/field.dart'; import '../../../components/toast/flushbar.dart'; import '../../../router/app_router.gr.dart'; @RoutePage() class PasswordPage extends StatelessWidget implements AutoRouteWrapper { final String phoneNumber; const PasswordPage({super.key, required this.phoneNumber}); @override Widget build(BuildContext context) { return BlocListener( listenWhen: (p, c) => p.failureOrLoginOption != c.failureOrLoginOption, listener: (context, state) { state.failureOrLoginOption.fold( () => null, (either) => either.fold( (f) => AppFlushbar.showAuthFailureToast(context, f), (data) { AppFlushbar.showSuccess(context, data.message); Future.delayed(Duration(milliseconds: 1000), () { context.read().add(AuthEvent.fetchCurrentUser()); context.router.replaceAll([MainRoute()]); }); }, ), ); }, child: Scaffold( appBar: AppBar(title: const Text('Kata Sandi')), body: BlocBuilder( builder: (context, state) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 24.0), child: Form( autovalidateMode: state.showErrorMessages ? AutovalidateMode.always : AutovalidateMode.disabled, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 40), // Title AppPasswordTextFormField( title: 'Masukkan kata sandi', hintText: '********', onChanged: (value) => context.read().add( LoginFormEvent.passwordChanged(value), ), validator: (value) { if (context .read() .state .password .isEmpty) { return 'Masukkan kata sandi'; } return null; }, ), const SizedBox(height: 50), Spacer(), // Continue Button AppElevatedButton( onPressed: state.isSubmitting ? null : () => context.read().add( LoginFormEvent.submitted(), ), title: 'Konfirmasi', isLoading: state.isSubmitting, ), const SizedBox(height: 24), ], ), ), ); }, ), ), ); } @override Widget wrappedRoute(BuildContext context) => BlocProvider( create: (context) => getIt() ..add(LoginFormEvent.phoneNumberChanged(phoneNumber)), child: this, ); }