import 'dart:async'; import 'dart:convert'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_udid/flutter_udid.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:employee_selfservice_mobile/Screens/ForgotPassword/forgotPassword_screen.dart'; import 'package:employee_selfservice_mobile/Screens/Login/background.dart'; import 'package:employee_selfservice_mobile/Screens/Login/login_post.dart'; import 'package:employee_selfservice_mobile/Screens/Splash/splash_screen.dart'; import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../Home/home_screen.dart'; import 'inputWidget.dart'; import 'dart:developer' as logDev; //import 'package:plain_notification_token/plain_notification_token.dart'; class LoginView extends StatefulWidget { @override _LoginView createState() => _LoginView(); } class _LoginView extends State { @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, backgroundColor: Colors.white, body: Stack( children: [ Background(), LoginScreen(), ], )); } } class LoginScreen extends StatefulWidget { @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { late LoginPostResult loginPostResult; String version = "1.0.0"; String notif_token = ""; late StreamSubscription onTokenRefreshSubscription; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { ProgressDialog loading = ProgressDialog(context); loading = ProgressDialog(context, type: ProgressDialogType.normal, isDismissible: false, showLogs: true); loading.style( message: 'Please Wait .....', borderRadius: 5, backgroundColor: Colors.white, progressWidget: CircularProgressIndicator(), elevation: 10.0, padding: EdgeInsets.all(10), insetAnimCurve: Curves.easeInOut, progress: 0.0, maxProgress: 100.0, progressTextStyle: TextStyle( color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400), messageTextStyle: TextStyle( color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600)); return SingleChildScrollView( reverse: true, padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), child: Column( children: [ Padding( padding: EdgeInsets.only(top: MediaQuery.of(context).size.height / 2.45), ), Column( children: [ Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( padding: EdgeInsets.only(top: 0), child: Text( "Login", style: GoogleFonts.knewave( color: Colors.blueAccent, fontSize: 25), ), ), ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(left: 40, bottom: 5, top: 20), child: Text( "Email", style: TextStyle(fontSize: 16, color: Colors.black87), ), ), Stack( alignment: Alignment.bottomRight, children: [ InputWidgetEmail(20.0, 20.0), Padding( padding: EdgeInsets.only(right: 50), ), ], ), ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(left: 40, bottom: 5), child: Text( "Password", style: TextStyle(fontSize: 16, color: Colors.black87), ), ), Stack( alignment: Alignment.bottomRight, children: [ InputWidgetPassword(20.0, 20.0), Padding( padding: EdgeInsets.only(right: 15), child: Row( children: [ Expanded( child: Padding( padding: EdgeInsets.only(top: 0), )), InkWell( child: Container( padding: EdgeInsets.all(10), decoration: ShapeDecoration( shape: CircleBorder(), gradient: LinearGradient( colors: Gradients2, begin: Alignment.topLeft, end: Alignment.bottomRight), ), child: ImageIcon( AssetImage("assets/images/ic_forward.png"), size: 40, color: Colors.white, ), ), onTap: () async { /*String imei; try { imei = await FlutterUdid.udid; } on PlatformException { imei = 'Failed to get UDID.'; } logDev.log(imei, name: "IMEI");*/ if (!validateForm(context)) { return; } else { await loading.show(); final notif_token = await FirebaseMessaging.instance.getToken(); logDev.log(notif_token.toString(), name: "NOTIFICATION TOKEN"); LoginPostResult.connectToAPI( emailController.text.toString(), passwordController.text.toString(), notif_token!, version, platform(),) .then((valueResult) async { Map object = json.decode(valueResult); if (object.containsKey("result").toString() == "true") { String status = object['result']['status'].toString(); if (status == "success") { Fluttertoast.showToast( msg: "Login Success", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); var prefs = await SharedPreferences.getInstance(); await prefs.setString('version', version); await prefs.setString('device', object['result']['device'].toString()); await prefs.setString('session', object['result']['hash'].toString()); await prefs.setString('name', object['result']['name'].toString()); await prefs.setString('notif_token', notif_token); emailController.clear(); passwordController.clear(); await loading.hide(); Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomeView())); } else if (status == "failed") { String message = object['result']['message'].toString(); Fluttertoast.showToast( msg: message, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); await loading.hide(); } } else { await loading.hide(); alertDialogFailedResponse(context); } }); } }, ) ], ), ), /*Padding( padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom) )*/ ], ), ], ), Padding( padding: EdgeInsets.only(bottom: 10), ), InkWell( child: roundedRectButton("Forgot Password?", Gradients1, false), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => ForgotPasswordView())); }) ], ) ], ), ); } } Widget roundedRectButton( String title, List gradient, bool isEndIconVisible) { return Builder(builder: (BuildContext mContext) { return Align( alignment: Alignment.centerLeft, child: Stack( children: [ Container( alignment: Alignment.centerRight, width: MediaQuery.of(mContext).size.width / 2.45, decoration: ShapeDecoration( shape: RoundedRectangleBorder( borderRadius: BorderRadius.only( topRight: Radius.circular(20.0), bottomRight: Radius.circular(20.0))), gradient: LinearGradient( colors: gradient, begin: Alignment.topLeft, end: Alignment.bottomRight), ), child: Text(title, style: TextStyle( decoration: TextDecoration.underline, color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500)), padding: EdgeInsets.all(10), ), Visibility( visible: isEndIconVisible, child: Padding( padding: EdgeInsets.only(right: 10), child: ImageIcon( AssetImage("assets/images/ic_forward.png"), size: 30, color: Colors.white, )), ), ], ), ); }); } const List Gradients1 = [ /*Color(0xFFFFFFFF), Color(0xFFFFFFFF),*/ Color(0xFF03A0FE), Colors.pink, ]; const List Gradients2 = [ Color(0xFFFF9945), Color(0xFFFc6076), ]; bool validateForm(BuildContext context) { bool result = true; if (emailController.text.toString().isEmpty) { /*final snackBar = SnackBar(content: Text("Email Required")); ScaffoldMessenger.of(context).showSnackBar(snackBar);*/ Fluttertoast.showToast( msg: "Email Required", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } else if (!emailController.text.toString().contains("@")) { Fluttertoast.showToast( msg: "Incorrect email format", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } else if (passwordController.text.toString().isEmpty) { Fluttertoast.showToast( msg: "Password Required", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } return result; } alertDialogFailedResponse(BuildContext context){ Widget okButton = TextButton( child: Text("Refresh"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) => SplashScreen())); }, ); Widget noButton = TextButton( child: Text("Back"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pop(context); }, ); // set up the AlertDialog AlertDialog alert = AlertDialog( title: Text("Employee Self Service"), content: Text("Server Response Error"), actions: [ noButton, okButton, ], ); // show the dialog showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return alert; }, ); }