import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:supplier_new/common/settings.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; class Login extends StatefulWidget { const Login({super.key}); @override State createState() => _LoginState(); } class _LoginState extends State { final storage = FlutterSecureStorage( aOptions: AndroidOptions( resetOnError: true, encryptedSharedPreferences: true, ), ); bool isObscureText=true; TextEditingController mobileNumberController = TextEditingController(); TextEditingController passwordController = TextEditingController(); @override void initState() { isObscureText=true; super.initState(); } Future onWillPop() async { final shouldPop = await showDialog(context: context, builder: (context) { return AlertDialog( title: const Text('Do you want to exit app?', style: TextStyle( color: primaryColor, fontSize: 20, )), actionsAlignment: MainAxisAlignment.spaceBetween, actions: [ TextButton( onPressed: () { SystemNavigator.pop(); }, child: const Text('Yes', style: TextStyle( color: primaryColor, fontSize: 20, )), ), TextButton( onPressed: () { Navigator.of(context).pop(false); }, child: const Text('No', style: TextStyle( color: primaryColor, fontSize: 20, )), ), ], ); }, ); return shouldPop!; } @override Widget build(BuildContext context) { String lastInputValue=""; return WillPopScope( onWillPop: () async => onWillPop(), child: Scaffold( backgroundColor: Colors.white, body: Stack( children: [ /*Container( decoration: const BoxDecoration( image: DecorationImage(image: AssetImage("images/backgroundimage.png"), fit: BoxFit.cover,), ), ),*/ GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); }, child: SafeArea( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.fromLTRB(24, 0, 24, 0), child: Column( children: [ Image( image: const AssetImage('images/login_logo.png'), height: MediaQuery.of(context).size.height * .30, width:MediaQuery.of(context).size.width * .30, ), SizedBox(height:MediaQuery.of(context).size.height * .04,), SizedBox(height:MediaQuery.of(context).size.height * .024,), Container( child: TextFormField( controller: mobileNumberController, keyboardType: TextInputType.number, textCapitalization: TextCapitalization.sentences, maxLength: 10, decoration: textFormFieldDecoration(Icons.phone,'Mobile Number'), style:fontTextStyle(14,Color(0XFF101214),FontWeight.w400), cursorColor: Color(0XFF1D7AFC), //TextStyle(color: Colors.black,fontWeight: FontWeight.bold), ), ), SizedBox(height:MediaQuery.of(context).size.height * .016,), Container( child: TextFormField( cursorColor:Color(0XFF1D7AFC), obscureText: isObscureText, obscuringCharacter: '*', controller: passwordController, decoration: InputDecoration( filled: false, fillColor: Colors.white, labelText: 'Password', //prefixIcon: const Icon(Icons.lock, color: Colors.white,), labelStyle: fontTextStyle(14,Color(0XFF7E7F80),FontWeight.w400), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), borderSide: BorderSide(color: greyColor, width: 1, )), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), borderSide: BorderSide(color: Color(0XFF1D7AFC),width: 2,), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), borderSide: BorderSide(color: greyColor), ), suffixIcon: IconButton( icon: isObscureText==true?Image.asset('images/eye_icon.png',color: Color(0XFF7E7F80),width: 30,height: 30,):Image.asset('images/open_eye.png',color:Color(0XFF7E7F80),width: 30,height: 30,), /* Icon( icon:Image.asset('assets/your_image.png'), color: isObscureText==true?greyColor:primaryColor, ),*/ onPressed: () { print("show password"); setState(() { isObscureText = !isObscureText; }); }, ), ), style: fontTextStyle(14,Color(0XFF101214),FontWeight.w400), ), ), SizedBox(height:MediaQuery.of(context).size.height * .016,), Align( alignment: Alignment.bottomLeft, child:GestureDetector( onTap: (){ /* Navigator.push( context, MaterialPageRoute(builder: (context) => ForgotpasswordNew()), );*/ }, child: Text( 'Forgot Password?', style: fontTextStyle(12,Color(0XFF1D7AFC),FontWeight.w600), ), ) ), SizedBox(height:MediaQuery.of(context).size.height * .024,), Container( width:double.infinity, height: MediaQuery.of(context).size.height * .06, child: ElevatedButton( style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: primaryColor, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.0), // Customize the radius ), ), onPressed: () async{ if (mobileNumberController.text != ''&& passwordController.text != '') { AppSettings.preLoaderDialog(context); bool isOnline = await AppSettings.internetConnectivity(); if(isOnline){ SharedPreferences prefs = await SharedPreferences.getInstance(); String? fcmToken = prefs.getString('fcmToken'); var payload = new Map(); payload["phone"] = mobileNumberController.text.toString(); payload["password"] = passwordController.text.toString(); payload["fcmIds"] = [fcmToken]; bool signinStatus = await AppSettings.login(payload); try{ if (signinStatus) { Navigator.of(context,rootNavigator: true).pop(); String token = AppSettings.accessToken; await storage.write(key: 'authToken', value: token); print('Token saved: $token'); /*await Navigator.push( context, MaterialPageRoute( builder: (context) => const DashboardScreen()), );*/ AppSettings.longSuccessToast("Logged in Successfully"); mobileNumberController.text=''; passwordController.text=''; } else { Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("Invalid details"); } } catch(exception){ Navigator.of(context,rootNavigator: true).pop(); print(exception); } } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("Please Check internet"); } } else{ AppSettings.longFailedToast("Please enter valid details"); } }, child: Text('Login',style: fontTextStyle(12,Colors.white,FontWeight.w600),), )), ], ), ) )), ), ], ) ), ); } }