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_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mohem_flutter_app/api/api_client.dart'; // import 'package:huawei_hmsavailability/huawei_hmsavailability.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/notifications.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/dialogs/otp_dialog.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/basic_member_information_model.dart'; import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart'; import 'package:mohem_flutter_app/models/generic_response_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'; import 'package:safe_device/safe_device.dart'; // import 'package:safe_device/safe_device.dart'; import 'package:wifi_iot/wifi_iot.dart'; class LoginScreen extends StatefulWidget { LoginScreen({Key? key}) : super(key: key); @override _LoginScreenState createState() { return _LoginScreenState(); } } class _LoginScreenState extends State { TextEditingController username = TextEditingController(); TextEditingController password = TextEditingController(); ApiResponse? _checkMobileAppVersion; MemberLoginListModel? _memberLoginList; late final FirebaseMessaging _firebaseMessaging; bool _autoLogin = false; bool? isAppOpenBySystem; bool isJailBroken = false; bool isRealDevice = true; bool isDevelopmentModeEnable = false; BasicMemberInformationModel? _basicMemberInformation; GenericResponseModel? genericResponseModel; // late HmsApiAvailability hmsApiAvailability; @override void initState() { super.initState(); // hmsApiAvailability = HmsApiAvailability(); // checkFirebaseToken(); if (kReleaseMode) { // checkDeviceSafety(); } } void checkDeviceSafety() { try { SafeDevice.isJailBroken.then((bool value) { isJailBroken = value; }); SafeDevice.isRealDevice.then((value) { isRealDevice = value; }); if (Platform.isAndroid) { // isOnExternalStorage = await SafeDevice.isOnExternalStorage; SafeDevice.isDevelopmentModeEnable.then((value) { isDevelopmentModeEnable = value; }); } } catch (error) { print(error); } } @override void dispose() { super.dispose(); } String? firebaseToken; GetMobileLoginInfoListModel? loginInfo; Future checkFirebaseToken() async { try { await checkPrefs(); Utils.showLoading(context); if (Platform.isAndroid) { try { if (!(await Utils.isGoogleServicesAvailable())) { print("HUAWEI APPPP GALLERYYYY!!!!"); AppNotifications().init(firebaseToken, context); AppState().setIsHuawei = true; AppNotifications().initHuaweiPush(checkLoginInfo); } else { print("GOOGLE PLAY STOREEEE!!!!"); await Firebase.initializeApp(); _firebaseMessaging = FirebaseMessaging.instance; try { firebaseToken = await _firebaseMessaging.getToken(); } catch (ex) { firebaseToken = ""; } AppNotifications().init(firebaseToken, context); if (isJailBroken || !isRealDevice || isDevelopmentModeEnable) { Utils.hideLoading(context); Navigator.pushNamedAndRemoveUntil(context, AppRoutes.unsafeDeviceScreen, (_) => false); } else { checkLoginInfo(); } await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); } // }); } catch (ex) {} } else { await Firebase.initializeApp(); _firebaseMessaging = FirebaseMessaging.instance; firebaseToken = await _firebaseMessaging.getToken(); String? firebaseAPNSToken = await _firebaseMessaging.getAPNSToken(); print("Firebase Token: $firebaseToken"); print("Firebase APNS Token: $firebaseAPNSToken"); AppNotifications().init(firebaseToken, context); checkLoginInfo(); await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); } } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); } } void checkLoginInfo() async { try { loginInfo = await LoginApiClient().getMobileLoginInfoNEW(AppState().getIsHuawei ? AppState().getHuaweiPushToken : firebaseToken ?? "", Platform.isAndroid ? "android" : "ios"); if (loginInfo == null) { await checkPrefs(); _autoLogin = false; Utils.hideLoading(context); return; } else { loginInfo!.deviceToken = firebaseToken; await checkPrefs(); Utils.hideLoading(context); performLogin(); } } catch (ex) { Utils.hideLoading(context); } } Future 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"); } Utils.saveStringFromPrefs(SharedPrefsConsts.password, password.text); } catch (ex) { print(ex); print(ex.toString()); Utils.hideLoading(context); Utils.handleException(ex, context, (msg) { Utils.confirmDialog( context, msg, onTap: () async { if (msg.toLowerCase().contains("password has expired")) { Navigator.pop(context); // await Navigator.pushNamed(context, AppRoutes.newPassword, arguments: username.text); performForgotPassword(); } else { Navigator.pop(context); } }, ); }); } } void performForgotPassword() async { // if (username.text.isEmpty) { // return; // } Utils.showLoading(context); try { _basicMemberInformation = await LoginApiClient().getBasicUserInformation("CS", username.text); genericResponseModel = await LoginApiClient().sendPublicActivationCode(_basicMemberInformation?.pMobileNumber, username.text); Utils.hideLoading(context); OtpDialog( context, 1, int.tryParse(_basicMemberInformation?.pMobileNumber ?? ""), (value, TextEditingController _pinPutController) async { Utils.showLoading(context); try { GenericResponseModel? genericResponseModel = await LoginApiClient().checkPublicActivationCode(value, username.text); if (genericResponseModel?.errorMessage != null) { Utils.showToast(genericResponseModel?.errorMessage ?? ""); return; } Utils.hideLoading(context); await Navigator.pushNamed(context, AppRoutes.newPassword, arguments: username.text); Navigator.pop(context); // Navigator.pop(context); } catch (ex) { print(ex); _pinPutController.clear(); otpFieldClear.value = ""; Utils.hideLoading(context); Utils.handleException(ex, context, null); } }, () => { Navigator.pop(context), }, onResendCode: () { performForgotPassword(); }, ).displayDialog(context); } catch (ex) { print(ex); Utils.hideLoading(context); Utils.handleException(ex, context, null); } } @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 = "206535"; // Hashim User // password.text = "Namira786"; // 13777 // Ab12345cd } 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(child: HmgConnectivityButton(),), // ), 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); performForgotPassword(); }, ), ), 20.height, // DefaultButton( // "Connect HMG Network", // () async { // SystemChannels.textInput.invokeMethod('TextInput.hide'); // connectWithHmgNetwork(); // }, // ), ], ), ) ], ), ), ), DefaultButton(LocaleKeys.login.tr(), () async { SystemChannels.textInput.invokeMethod('TextInput.hide'); performLogin(); }).insideContainer ], ), ); } void connectWithHmgNetwork() async { try { bool isConnected = await WiFiForIoTPlugin.connect("MOHEMM-CONNECT", password: "0987654321", joinOnce: Platform.isIOS ? false : true, security: NetworkSecurity.WPA, withInternet: false); if (isConnected) { await WiFiForIoTPlugin.forceWifiUsage(true); // if (Platform.isIOS) { // await closeWifiRequest(); // await Future.delayed(Duration(seconds: 6)); // } else { // await WiFiForIoTPlugin.forceWifiUsage(true); // } } } catch (e) { print("----------------o----"); print(e); } } Future closeWifiRequest() async { if (Platform.isAndroid) { await WiFiForIoTPlugin.forceWifiUsage(false); } return await WiFiForIoTPlugin.disconnect(); } }