import 'dart:developer'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../application/auth/check_phone_form/check_phone_form_bloc.dart'; import '../../../../common/function/app_function.dart'; import '../../../../common/theme/theme.dart'; import '../../../../domain/auth/auth.dart'; import '../../../../injection.dart'; import '../../../components/button/button.dart'; import '../../../components/toast/flushbar.dart'; import '../../../router/app_router.gr.dart'; import 'widgets/phone_field.dart'; @RoutePage() class LoginPage extends StatelessWidget implements AutoRouteWrapper { const LoginPage({super.key}); @override Widget build(BuildContext context) { return BlocListener( listenWhen: (p, c) => p.failureOrCheckPhoneOption != c.failureOrCheckPhoneOption, listener: (context, state) { state.failureOrCheckPhoneOption.fold( () => null, (either) => either.fold( (f) => AppFlushbar.showAuthFailureToast(context, f), (data) { AppFlushbar.showSuccess(context, data.message); Future.delayed(Duration(milliseconds: 1000), () { log(data.toString()); if (data.status.isNotRegistered) { context.router.push( RegisterRoute(phoneNumber: data.phoneNumber), ); } else if (data.status.isPasswordRequired) { context.router.push( PasswordRoute( phoneNumber: getNormalizePhone(state.phoneNumber), ), ); } }); }, ), ); }, child: Scaffold( appBar: AppBar(title: const Text('Masuk')), 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 LoginPhoneField(), const SizedBox(height: 50), // Continue Button AppElevatedButton( onPressed: state.isSubmitting ? null : () { context.read().add( CheckPhoneFormEvent.submitted(), ); }, isLoading: state.isSubmitting, title: 'Lanjutkan', ), const SizedBox(height: 24), // Terms and Conditions Center( child: RichText( textAlign: TextAlign.center, text: TextSpan( style: AppStyle.md.copyWith( color: AppColor.textSecondary, height: 1.4, ), children: [ const TextSpan( text: 'Dengan masuk Enaklo, kamu telah\nmenyetujui ', ), TextSpan( text: 'Syarat & Ketentuan', style: AppStyle.md.copyWith( color: AppColor.primary, fontWeight: FontWeight.w600, ), ), const TextSpan(text: ' dan\n'), TextSpan( text: 'Kebijakan Privasi', style: AppStyle.md.copyWith( color: AppColor.primary, fontWeight: FontWeight.w600, ), ), ], ), ), ), const SizedBox(height: 40), ], ), ), ); }, ), ), ); } @override Widget wrappedRoute(BuildContext context) => BlocProvider( create: (context) => getIt(), child: this, ); }