import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:qadirneyriz/config/config.dart'; import 'package:qadirneyriz/main.dart'; import 'package:qadirneyriz/screens/auth/state/state.dart'; import 'package:qadirneyriz/utils/enums/status.dart'; import 'package:qadirneyriz/utils/tools/tools.dart'; import 'package:qadirneyriz/widgets/custom_button.dart'; import 'package:qadirneyriz/widgets/custom_textfield.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { TextEditingController phoneController = TextEditingController(); TextEditingController passwordController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( body: Consumer( builder: (context, value, child) { return CustomScrollView( slivers: [ SliverToBoxAdapter( child: Container( height: 30, color: config.ui.mainGreen, ), ), // Header Image with cut-out shape at the bottom SliverToBoxAdapter( child: ClipPath( child: Image.asset( 'assets/images/template.png', width: double.infinity, fit: BoxFit.cover, ), ), ), // Form section with inputs and buttons SliverPadding( padding: const EdgeInsets.symmetric(horizontal: 20), sliver: SliverToBoxAdapter( child: Column( children: [ Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), // light shadow blurRadius: 10, spreadRadius: 5, ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Username field CustomTextField( label: AppLocalizations.of(context)!.phonenumber, hintText: AppLocalizations.of(context)!.hintphonenumber, textEditingController: phoneController, textInputType: TextInputType.phone, textInputAction: TextInputAction.next, ), const SizedBox(height: 16), // Password field CustomTextField( isPass: true, label: AppLocalizations.of(context)!.password, hintText: AppLocalizations.of(context)!.hintpass, textEditingController: passwordController, textInputType: TextInputType.visiblePassword, ), const SizedBox(height: 40), // Buttons section Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ // Login button (filled) CustomButton( hieght: 56, fontSize: 13, text: AppLocalizations.of(context)! .submitwithotp, color: Colors.white, textColor: Colors.green, onPressed: value.statusLogin == Status.loading ? null : () { context.pushNamed('loginotp'); }), const SizedBox(width: 16), // Register button (outlined) Expanded( child: submitButton(context, value), ), ], ), ], ), ), const SizedBox(height: 40), ], ), ), ), ], ); }, ), ); } CustomButton submitButton(BuildContext context, AuthState state) { switch (state.statusLogin) { case Status.loading: return CustomButton( hieght: 56, fontSize: 12, text: AppLocalizations.of(context)!.loading, onPressed: null); default: return CustomButton( hieght: 56, fontSize: 16, text: AppLocalizations.of(context)!.submit, onPressed: () async { if (phoneController.text == '') { Tools.showCustomSnackBar( text: AppLocalizations.of(context)!.phoneerror, isError: true, context, ); } else if (passwordController.text == '') { Tools.showCustomSnackBar( text: AppLocalizations.of(context)!.passerror, isError: true, context, ); } else { String? token = await messaging.getToken(); final status = await state.login( fcm_token: token??'', mobile: phoneController.text, password: passwordController.text); if (status == Status.ready) { context.goNamed('navigate', pathParameters: {'tab': '0'}); } else { Tools.showCustomSnackBar( text: state.errorsLogin == null ? state.messageLogin ?? AppLocalizations.of(context)!.haserror : Tools.combineErrorMessages(state.errorsLogin ?? {}), isError: true, context, ); } } }, ); } } }