You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			243 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			243 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:io';
 | |
| 
 | |
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:easy_localization/src/public_ext.dart';
 | |
| import 'package:firebase_core/firebase_core.dart';
 | |
| import 'package:firebase_messaging/firebase_messaging.dart';
 | |
| import 'package:flutter/cupertino.dart';
 | |
| import 'package:flutter/foundation.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| import 'package:mohem_flutter_app/api/login_api_client.dart';
 | |
| import 'package:mohem_flutter_app/app_state/app_state.dart';
 | |
| import 'package:mohem_flutter_app/classes/colors.dart';
 | |
| import 'package:mohem_flutter_app/classes/consts.dart';
 | |
| import 'package:mohem_flutter_app/classes/utils.dart';
 | |
| import 'package:mohem_flutter_app/config/routes.dart';
 | |
| import 'package:mohem_flutter_app/extensions/int_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/string_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
 | |
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
 | |
| import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart';
 | |
| import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
 | |
| import 'package:mohem_flutter_app/models/member_information_list_model.dart';
 | |
| import 'package:mohem_flutter_app/models/member_login_list_model.dart';
 | |
| import 'package:mohem_flutter_app/models/privilege_list_model.dart';
 | |
| import 'package:mohem_flutter_app/widgets/button/default_button.dart';
 | |
| import 'package:mohem_flutter_app/widgets/input_widget.dart';
 | |
| 
 | |
| class LoginScreen extends StatefulWidget {
 | |
|   LoginScreen({Key? key}) : super(key: key);
 | |
| 
 | |
|   @override
 | |
|   _LoginScreenState createState() {
 | |
|     return _LoginScreenState();
 | |
|   }
 | |
| }
 | |
| 
 | |
| class _LoginScreenState extends State<LoginScreen> {
 | |
|   TextEditingController username = TextEditingController();
 | |
|   TextEditingController password = TextEditingController();
 | |
| 
 | |
|   CheckMobileAppVersionModel? _checkMobileAppVersion;
 | |
|   MemberLoginListModel? _memberLoginList;
 | |
| 
 | |
|   late final FirebaseMessaging _firebaseMessaging;
 | |
| 
 | |
|   bool _autoLogin = false;
 | |
| 
 | |
|   bool? isAppOpenBySystem;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
|      // checkFirebaseToken();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     super.dispose();
 | |
|   }
 | |
| 
 | |
|   String? firebaseToken;
 | |
|   GetMobileLoginInfoListModel? loginInfo;
 | |
| 
 | |
|   Future<void> checkFirebaseToken() async {
 | |
|     try {
 | |
|       Utils.showLoading(context);
 | |
|       await Firebase.initializeApp();
 | |
|       _firebaseMessaging = FirebaseMessaging.instance;
 | |
|       firebaseToken = await _firebaseMessaging.getToken();
 | |
|       loginInfo = await LoginApiClient().getMobileLoginInfoNEW(
 | |
|           firebaseToken ?? "", Platform.isAndroid ? "android" : "ios");
 | |
|       if (loginInfo == null) {
 | |
|         Utils.hideLoading(context);
 | |
|         return;
 | |
|       } else {
 | |
|         loginInfo!.deviceToken = firebaseToken;
 | |
|         await checkPrefs();
 | |
|         Utils.hideLoading(context);
 | |
|         performLogin();
 | |
|       }
 | |
|     } catch (ex) {
 | |
|       Utils.hideLoading(context);
 | |
|       Utils.handleException(ex, context, (errorMsg) {});
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   Future<void> checkPrefs() async {
 | |
|     String username =
 | |
|         await Utils.getStringFromPrefs(SharedPrefsConsts.username);
 | |
|     if (username.isNotEmpty) {
 | |
|       String password =
 | |
|           await Utils.getStringFromPrefs(SharedPrefsConsts.password);
 | |
|       // String firebaseToken = await Utils.getStringFromPrefs(SharedPrefsConsts.firebaseToken);
 | |
|       // print("firebaseToken:$firebaseToken");
 | |
|       this.username.text = username;
 | |
|       this.password.text = password;
 | |
|       _autoLogin = true;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   void performLogin() async {
 | |
|     Utils.showLoading(context);
 | |
|     try {
 | |
|       _checkMobileAppVersion = await LoginApiClient().checkMobileAppVersion();
 | |
|       _memberLoginList =
 | |
|           await LoginApiClient().memberLogin(username.text, password.text);
 | |
|       AppState().setMemberLoginListModel = _memberLoginList;
 | |
|       AppState().setUserName = username.text;
 | |
|       AppState().password = password.text;
 | |
|       if (_autoLogin) {
 | |
|         AppState().setMemberInformationListModel =
 | |
|             (await MemberInformationListModel.getFromPrefs()).first;
 | |
|         AppState().setPrivilegeListModel =
 | |
|             await PrivilegeListModel.getFromPrefs();
 | |
|         String mohemmWifiSSID =
 | |
|             await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID);
 | |
|         String mohemmWifiPassword = await Utils.getStringFromPrefs(
 | |
|             SharedPrefsConsts.mohemmWifiPassword);
 | |
|         AppState().setMohemmWifiSSID = mohemmWifiSSID;
 | |
|         AppState().setMohemmWifiPassword = mohemmWifiPassword;
 | |
|       }
 | |
|       Utils.hideLoading(context);
 | |
|       if (_autoLogin) {
 | |
|         Navigator.pushReplacementNamed(context, AppRoutes.verifyLastLogin,
 | |
|             arguments: loginInfo);
 | |
|       } else {
 | |
|         Navigator.pushNamed(context, AppRoutes.verifyLogin,
 | |
|             arguments: "$firebaseToken");
 | |
|       }
 | |
|     } catch (ex) {
 | |
|       Utils.hideLoading(context);
 | |
|       Utils.handleException(ex, context, (msg) {
 | |
|         Utils.confirmDialog(context, msg);
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     if (isAppOpenBySystem == null) {
 | |
|       isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool;
 | |
|       if (!kReleaseMode) {
 | |
|         // username.text = "15444"; // Maha User
 | |
|         username.text = "15153"; // Tamer User
 | |
|         password.text = "Abcd@12345";
 | |
|         //
 | |
|         // username.text = "210038"; // Hashim User
 | |
|         // password.text = "123";
 | |
|       }
 | |
|       if (isAppOpenBySystem!) checkFirebaseToken();
 | |
|     }
 | |
| 
 | |
|     // username.text = "15444";
 | |
| 
 | |
|     return Scaffold(
 | |
|       body: Column(
 | |
|         children: [
 | |
|           const SizedBox(height: 23),
 | |
|           Expanded(
 | |
|             child: Padding(
 | |
|               padding: const EdgeInsets.all(21.0),
 | |
|               child: Column(
 | |
|                 crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                 children: [
 | |
|                   Row(
 | |
|                     children: [
 | |
|                       Expanded(child: SizedBox()),
 | |
|                       Row(
 | |
|                         children: [
 | |
|                           LocaleKeys.english
 | |
|                               .tr()
 | |
|                               .toText14(
 | |
|                                   color: AppState().isArabic(context)
 | |
|                                       ? null
 | |
|                                       : MyColors.textMixColor)
 | |
|                               .onPress(() {
 | |
|                             context.setLocale(const Locale("en", "US"));
 | |
|                           }),
 | |
|                           Container(
 | |
|                             width: 1,
 | |
|                             color: MyColors.darkWhiteColor,
 | |
|                             height: 16,
 | |
|                             margin: const EdgeInsets.only(left: 10, right: 10),
 | |
|                           ),
 | |
|                           LocaleKeys.arabic
 | |
|                               .tr()
 | |
|                               .toText14(
 | |
|                                   color: !AppState().isArabic(context)
 | |
|                                       ? null
 | |
|                                       : MyColors.textMixColor)
 | |
|                               .onPress(() {
 | |
|                             context.setLocale(const Locale("ar", "SA"));
 | |
|                           }),
 | |
|                         ],
 | |
|                       ),
 | |
|                     ],
 | |
|                   ),
 | |
|                   Expanded(
 | |
|                     child: Column(
 | |
|                       mainAxisSize: MainAxisSize.min,
 | |
|                       crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                       mainAxisAlignment: MainAxisAlignment.center,
 | |
|                       children: [
 | |
|                         LocaleKeys.login.tr().toText24(isBold: true),
 | |
|                         LocaleKeys.pleaseEnterLoginDetails.tr().toText16(),
 | |
|                         16.height,
 | |
|                         InputWidget(
 | |
|                             LocaleKeys.username.tr(), "123456", username),
 | |
|                         12.height,
 | |
|                         InputWidget(
 | |
|                             LocaleKeys.password.tr(), "xxxxxx", password,
 | |
|                             isTextIsPassword: true),
 | |
|                         9.height,
 | |
|                         Align(
 | |
|                           alignment: Alignment.centerRight,
 | |
|                           child: LocaleKeys.forgotPassword
 | |
|                               .tr()
 | |
|                               .toText12(
 | |
|                                   isUnderLine: true,
 | |
|                                   color: MyColors.textMixColor)
 | |
|                               .onPress(() {
 | |
|                             Navigator.pushNamed(
 | |
|                                 context, AppRoutes.forgotPassword);
 | |
|                           }),
 | |
|                         ),
 | |
|                       ],
 | |
|                     ),
 | |
|                   )
 | |
|                 ],
 | |
|               ),
 | |
|             ),
 | |
|           ),
 | |
|           DefaultButton(LocaleKeys.login.tr(), () async {
 | |
|             SystemChannels.textInput.invokeMethod('TextInput.hide');
 | |
|             performLogin();
 | |
|           }).insideContainer
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |