@ -1,3 +1,4 @@
import ' package:flutter/gestures.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:fluttertoast/fluttertoast.dart ' ;
import ' package:provider/provider.dart ' ;
@ -6,6 +7,7 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da
import ' package:test_sa/controllers/providers/settings/app_settings.dart ' ;
import ' package:test_sa/extensions/context_extension.dart ' ;
import ' package:test_sa/extensions/int_extensions.dart ' ;
import ' package:test_sa/extensions/string_extensions.dart ' ;
import ' package:test_sa/extensions/text_extensions.dart ' ;
import ' package:test_sa/extensions/widget_extensions.dart ' ;
import ' package:test_sa/new_views/app_style/app_color.dart ' ;
@ -13,6 +15,7 @@ import 'package:test_sa/new_views/forget_password_module/forget_passwod_verify_o
import ' package:test_sa/new_views/forget_password_module/models/general_response_model.dart ' ;
import ' package:test_sa/new_views/pages/land_page/land_page.dart ' ;
import ' package:test_sa/new_views/swipe_module/swipe_view.dart ' ;
import ' package:url_launcher/url_launcher.dart ' ;
import ' ../../controllers/providers/api/user_provider.dart ' ;
import ' ../../controllers/providers/settings/setting_provider.dart ' ;
@ -39,10 +42,10 @@ class _LoginPageState extends State<LoginPage> {
final GlobalKey < FormState > _formKey = GlobalKey < FormState > ( ) ;
bool rememberMe = false ;
bool privacyPolicyChecked = false ;
@ override
void initState ( ) {
/ / TODO: implement initState
super . initState ( ) ;
if ( FirebaseNotificationManger . token = = null ) FirebaseNotificationManger . getToken ( ) ;
}
@ -55,7 +58,7 @@ class _LoginPageState extends State<LoginPage> {
rememberMe = _settingProvider . rememberMe ;
if ( rememberMe ) {
_user . userName = _settingProvider . username ;
userNameController . text = _user . userName ? ? ' ' ;
userNameController . text = _user . userName ? ? ' ' ;
_user . password = _settingProvider . password ;
}
}
@ -93,9 +96,11 @@ class _LoginPageState extends State<LoginPage> {
/ / Based on passwordVisible state choose the icon
_passwordVisible ? Icons . visibility : Icons . visibility_off ,
color: context . isDark ? AppColor . neutral10 : AppColor . neutral20 ,
) . paddingOnly ( end: 12 ) . onPress ( ( ) { setState ( ( ) {
_passwordVisible = ! _passwordVisible ;
} ) ; } ) ,
) . paddingOnly ( end: 12 ) . onPress ( ( ) {
setState ( ( ) {
_passwordVisible = ! _passwordVisible ;
} ) ;
} ) ,
obscureText: ! _passwordVisible ,
validator: ( value ) = > Validator . isValidPassword ( value )
? null
@ -106,12 +111,37 @@ class _LoginPageState extends State<LoginPage> {
_user . password = value ;
} ,
) ,
8. height ,
16. height ,
Align (
alignment: AlignmentDirectional . centerEnd ,
child: InkWell (
onTap: ( ) async {
if ( userNameController . text . isNotEmpty ) {
GeneralResponseModel response = await _userProvider . sendForgetPasswordOtp ( context: context , employeeId: userNameController . text ) ;
if ( response . isSuccess ) {
Navigator . push (
context ,
MaterialPageRoute (
builder: ( context ) = > ForgetPasswordVerifyOtpView (
data: { ' employeeId ' : userNameController . text , ' phoneNumber ' : response . data } ,
) ) ) ;
/ / Navigator . push ( context , ForgetPasswordVerifyOtpView . routeName ) ;
} else {
context . showConfirmDialog ( response ? . message ? ? context . translation . failedToCompleteRequest ) ;
}
} else {
Fluttertoast . showToast ( msg: context . translation . employeeIdIsRequired ) ;
}
} ,
child: context . translation . forgotPassword . bodyText ( context ) . custom ( color: AppColor . primary50 , fontWeight: FontWeight . w500 ) ,
) ,
) ,
Row (
children: [
Checkbox (
value: rememberMe ,
activeColor: AppColor . blueStatus ( context ) ,
materialTapTargetSize: MaterialTapTargetSize . shrinkWrap ,
onChanged: ( value ) {
setState ( ( ) {
rememberMe = value ;
@ -120,26 +150,35 @@ class _LoginPageState extends State<LoginPage> {
" Remember Me " . bodyText ( context ) . custom ( color: context . isDark ? AppColor . primary50 : AppColor . neutral50 ) . expanded ,
] ,
) ,
16. height ,
Align (
alignment: AlignmentDirectional . centerEnd ,
child: InkWell (
onTap: ( ) async {
if ( userNameController . text . isNotEmpty ) {
GeneralResponseModel response = await _userProvider . sendForgetPasswordOtp ( context: context , employeeId: userNameController . text ) ;
if ( response . isSuccess ) {
Navigator . push ( context , MaterialPageRoute ( builder: ( context ) = > ForgetPasswordVerifyOtpView ( data: { ' employeeId ' : userNameController . text , ' phoneNumber ' : response . data } , ) ) ) ;
/ / Navigator . push ( context , ForgetPasswordVerifyOtpView . routeName ) ;
} else {
context . showConfirmDialog ( response ? . message ? ? context . translation . failedToCompleteRequest ) ;
}
} else {
Fluttertoast . showToast ( msg: context . translation . employeeIdIsRequired ) ;
}
} ,
child: context . translation . forgotPassword . bodyText ( context ) . custom ( color: AppColor . primary50 , fontWeight: FontWeight . w500 ) ,
) ,
Row (
crossAxisAlignment: CrossAxisAlignment . center ,
children: [
Checkbox (
value: privacyPolicyChecked ,
activeColor: AppColor . blueStatus ( context ) ,
materialTapTargetSize: MaterialTapTargetSize . shrinkWrap ,
onChanged: ( value ) {
if ( value = = null ) return ;
privacyPolicyChecked = value ;
setState ( ( ) { } ) ;
} ) ,
RichText (
text: TextSpan ( text: " I have read and agree to " , style: AppTextStyles . bodyText . copyWith ( color: context . isDark ? AppColor . primary50 : AppColor . neutral50 ) , children: [
TextSpan (
text: " Privacy Policy " ,
style: AppTextStyles . bodyText . copyWith ( color: AppColor . blueStatus ( context ) , decoration: TextDecoration . underline ) ,
recognizer: TapGestureRecognizer ( )
. . onTap = ( ) async {
Uri uri = Uri . parse ( " https://cloudsolutions.com.sa/en/privacy-policy " ) ;
try {
launchUrl ( uri ) ;
} catch ( ex ) { }
} ) ,
] ) ,
) . expanded ,
] ,
) ,
16. height ,
] ,
) ,
) . center . expanded ,
@ -152,6 +191,10 @@ class _LoginPageState extends State<LoginPage> {
Future < void > _login ( ) async {
if ( ! _formKey . currentState . validate ( ) ) return ;
if ( privacyPolicyChecked = = false ) {
" You must agree privacy policy " . showToast ;
return ;
}
_formKey . currentState . save ( ) ;
int status = await _userProvider . login ( context: context , user: _user ) ;
if ( status > = 200 & & status < 300 & & _userProvider . user . isAuthenticated ? ? false ) {
@ -159,15 +202,13 @@ class _LoginPageState extends State<LoginPage> {
( await SharedPreferences . getInstance ( ) ) . remove ( ASettings . localAuth ) ;
await _settingProvider . setRememberMe ( _user . userName , _user . password , rememberMe ) ;
if ( _userProvider . user . onlySwipe ) {
Navigator . pushReplacementNamed ( context , SwipeView . routeName ) ;
}
else {
Navigator . pushReplacementNamed ( context , LandPage . routeName ) ;
}
if ( _userProvider . user . onlySwipe ) {
Navigator . pushReplacementNamed ( context , SwipeView . routeName ) ;
} else {
Navigator . pushReplacementNamed ( context , LandPage . routeName ) ;
}
} else {
Fluttertoast. showToast ( msg: _userProvider . user ? . message ? ? context . translation . failedToCompleteRequest ) ;
context . showConfirmDialog ( _userProvider . user ? . message ? ? context . translation . failedToCompleteRequest ) ;
}
}
}