diff --git a/assets/images/loading_mohemm_logo.gif b/assets/images/loading_mohemm_logo.gif new file mode 100644 index 0000000..ffefdb0 Binary files /dev/null and b/assets/images/loading_mohemm_logo.gif differ diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index c9db991..30f160e 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -4,8 +4,8 @@ class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server - //static String baseUrl = 'https://hmgwebservices.com/'; - static String baseUrl = 'https://uat.hmgwebservices.com/'; + static String baseUrl = 'https://hmgwebservices.com/'; + // static String baseUrl = 'https://uat.hmgwebservices.com/'; static String baseUrlServices = baseUrl + "/Services/"; // server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; diff --git a/lib/classes/enums.dart b/lib/classes/enums.dart index c1026c2..6dbb839 100644 --- a/lib/classes/enums.dart +++ b/lib/classes/enums.dart @@ -1,3 +1,23 @@ -enum APPSTATUS { loading, unAuthenticated, authenticated, unverified } -enum AuthMethodTypes { sms, whatsApp, fingerPrint, faceID, moreOptions } -enum ViewState { idle, busy, error, busyLocal, errorLocal } +enum APPSTATUS { + loading, + unAuthenticated, + authenticated, + unverified, +} + +enum AuthMethodTypes { + sms, + whatsApp, + fingerPrint, + faceID, + moreOptions, +} + +enum ViewState { + hide, + idle, + busy, + error, + busyLocal, + errorLocal, +} diff --git a/lib/config/app_state.dart b/lib/config/app_state.dart index 9014d77..219254e 100644 --- a/lib/config/app_state.dart +++ b/lib/config/app_state.dart @@ -37,7 +37,7 @@ class AppState { languageID: 2, stamp: "", iPAdress: "9.9.9.9", - versionID: 8.3, + versionID: 9, channel: 9, sessionID: "BlUSkYymTt", isLoginForDoctorApp: true, diff --git a/lib/main.dart b/lib/main.dart index 4a4dab3..698ab60 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,6 +7,7 @@ import 'package:hmg_nurses/config/app_state.dart'; import 'package:hmg_nurses/config/dependencies.dart'; import 'package:hmg_nurses/config/routes.dart'; import 'package:hmg_nurses/provider/dashboard_provider_model.dart'; +import 'package:hmg_nurses/provider/login_provider_model.dart'; import 'package:hmg_nurses/theme/app_theme.dart'; import 'package:injector/injector.dart'; import 'package:logger/logger.dart'; @@ -53,6 +54,9 @@ Future main() async { providers: [ ChangeNotifierProvider( create: (_) => DashboardProviderModel(), + ), + ChangeNotifierProvider( + create: (_) => LoginProviderModel(), ) ], child: MyApp(), diff --git a/lib/provider/base_vm.dart b/lib/provider/base_vm.dart index bb5383b..c8f0d4d 100644 --- a/lib/provider/base_vm.dart +++ b/lib/provider/base_vm.dart @@ -12,10 +12,12 @@ class BaseViewModel extends ChangeNotifier { String error = ""; //TODO add the user login model when we need it + void setOnlyState(ViewState viewState) { + _state = viewState; + } void setState(ViewState viewState) { _state = viewState; - notifyListeners(); } diff --git a/lib/provider/login_provider_model.dart b/lib/provider/login_provider_model.dart new file mode 100644 index 0000000..ec9fb99 --- /dev/null +++ b/lib/provider/login_provider_model.dart @@ -0,0 +1,22 @@ +import 'package:hmg_nurses/classes/enums.dart'; +import 'package:hmg_nurses/model/login/project_info_model.dart'; +import 'package:hmg_nurses/provider/base_vm.dart'; +import 'package:hmg_nurses/services/api_repo/login_api_repo.dart'; +import 'package:injector/injector.dart'; + +class LoginProviderModel extends BaseViewModel { + LoginProviderModel() { + setOnlyState(ViewState.hide); + } + + final ILoginApiRepo _loginApiRepo = Injector.appInstance.get(); + + late List assignedBranches; + + getAssignedBranches(String userId) async { + setState(ViewState.busy); + assignedBranches = await _loginApiRepo.getProjectInfo(userId); + print(assignedBranches.length); + setState(ViewState.idle); + } +} diff --git a/lib/ui/login/login_page.dart b/lib/ui/login/login_page.dart index 9c7215d..5803499 100644 --- a/lib/ui/login/login_page.dart +++ b/lib/ui/login/login_page.dart @@ -1,13 +1,23 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_nurses/classes/colors.dart'; +import 'package:hmg_nurses/classes/enums.dart'; +import 'package:hmg_nurses/classes/utils.dart'; import 'package:hmg_nurses/config/routes.dart'; +import 'package:hmg_nurses/extensions/int_extensions.dart'; import 'package:hmg_nurses/generated/locale_keys.g.dart'; +import 'package:hmg_nurses/model/login/imei_details_model.dart'; +import 'package:hmg_nurses/model/login/project_info_model.dart'; +import 'package:hmg_nurses/provider/login_provider_model.dart'; import 'package:hmg_nurses/widgets/button/default_button.dart'; import 'package:hmg_nurses/widgets/cupertino_picker.dart'; import 'package:hmg_nurses/widgets/input_widget.dart'; +import 'package:injector/injector.dart'; +import 'package:provider/provider.dart'; import 'package:sizer/sizer.dart'; +import '../../services/api_repo/login_api_repo.dart'; + class LoginPage extends StatefulWidget { const LoginPage({Key? key}) : super(key: key); @@ -16,6 +26,10 @@ class LoginPage extends StatefulWidget { } class _LoginPageState extends State { + final ILoginApiRepo _loginApiRepo = Injector.appInstance.get(); + + int branchID=0; + final loginFormKey = GlobalKey(); var projectIdController = TextEditingController(); var userIdController = TextEditingController(); @@ -23,8 +37,24 @@ class _LoginPageState extends State { SizedBox buildSpacer20h() => SizedBox(height: 3.h); + @override + void initState() { + super.initState(); + checkLastSession(); + } + + checkLastSession() async { + try { + Utils.showLoading(); + List deviceInfo = await _loginApiRepo.getDeviceInfoByIMEI(); + Utils.showToast(deviceInfo.length.toString()); + Utils.showLoading(); + } catch (e) {} + } + @override Widget build(BuildContext context) { + final provider = Provider.of(context); return Scaffold( body: SingleChildScrollView( child: Column( @@ -64,19 +94,48 @@ class _LoginPageState extends State { isEnableBorder: true, ), buildSpacer20h(), - CustomTextField(LocaleKeys.password.tr(), passwordController, isTextIsPassword: true), - buildSpacer20h(), CustomTextField( - LocaleKeys.branch.tr(), - projectIdController, - hasSelection: true, - isEnable: false, - onClick: () => CustomCupertinoPicker.showCupertinoPicker(context, [], () {}), + LocaleKeys.password.tr(), + passwordController, + isTextIsPassword: true, + onChange: (v) { + if (v.length > 0) { + provider.getAssignedBranches(userIdController.text); + } + }, + ), + buildSpacer20h(), + Consumer( + builder: (_, data, w) { + return data.state == ViewState.hide + ? Container() + : data.state == ViewState.busy + ? const Center(child: CircularProgressIndicator()) + : CustomTextField( + LocaleKeys.branch.tr(), + projectIdController, + hasSelection: true, + isEnable: false, + onClick: () => CustomCupertinoPicker.showCupertinoPicker( + context, + provider.assignedBranches, + (index) { + projectIdController.text=provider.assignedBranches[index].facilityName!; + branchID=provider.assignedBranches[index].facilityId as int; + print(branchID); + provider.notifyListeners(); + }, + ), + ); + }, + ), + buildSpacer20h(), + SizedBox( + height: 12.h, ), - buildSpacer20h() ]), ), - ) + ), ], ), ), @@ -96,7 +155,9 @@ class _LoginPageState extends State { Navigator.pushNamed(context, AppRoutes.loginMethodsPage); }, colors: const [MyColors.redColor, MyColors.redColor]), ), - SizedBox(height: 3.h) + SizedBox( + height: 3.h, + ) ], ), ), diff --git a/lib/widgets/cupertino_picker.dart b/lib/widgets/cupertino_picker.dart index c45ef8b..ad0a16f 100644 --- a/lib/widgets/cupertino_picker.dart +++ b/lib/widgets/cupertino_picker.dart @@ -5,7 +5,7 @@ import 'package:hmg_nurses/generated/locale_keys.g.dart'; import 'package:sizer/sizer.dart'; class CustomCupertinoPicker { - static TextStyle textStyle(context) => TextStyle(color: Theme.of(context).primaryColor); + static TextStyle textStyle(context) => TextStyle(color: Colors.black); static int cupertinoPickerIndex = 0; @@ -21,7 +21,7 @@ class CustomCupertinoPicker { children: items.map((item) { return Text( '${item.facilityName}', - style: TextStyle(fontSize: 12.sp), + style: TextStyle(fontSize: 12.sp, color: Colors.black), ); }).toList(), ); @@ -29,43 +29,48 @@ class CustomCupertinoPicker { static showCupertinoPicker(context, List items, onSelectFun) { showModalBottomSheet( - isDismissible: false, - context: context, - builder: (BuildContext builder) { - return Container( - height: 40.h, - color: const Color(0xfff7f7f7), - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - color: const Color(0xfff7f7f7), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - CupertinoButton( - child: Text(LocaleKeys.userID.tr(), style: textStyle(context)), - onPressed: () { - Navigator.pop(context); - }, + isDismissible: false, + context: context, + builder: (BuildContext builder) { + return Container( + height: 40.h, + color: const Color(0xfff7f7f7), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: const Color(0xfff7f7f7), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + CupertinoButton( + child: Text(LocaleKeys.userID.tr(), style: textStyle(context)), + onPressed: () { + Navigator.pop(context); + }, + ), + CupertinoButton( + child: Text( + LocaleKeys.userID.tr(), + style: textStyle(context), ), - CupertinoButton( - child: Text( - LocaleKeys.userID.tr(), - style: textStyle(context), - ), - onPressed: () { - Navigator.pop(context); - onSelectFun(cupertinoPickerIndex); - }, - ) - ], - ), + onPressed: () { + Navigator.pop(context); + onSelectFun(cupertinoPickerIndex); + }, + ) + ], ), - Container(height: 3.h, color: const Color(0xfff7f7f7), child: buildPickerItems(context, items, onSelectFun)) - ], - ), - ); - }); + ), + Container( + height: 30.h, + color: const Color(0xfff7f7f7), + child: buildPickerItems(context, items, onSelectFun), + ) + ], + ), + ); + }, + ); } } diff --git a/lib/widgets/loading_dialog.dart b/lib/widgets/loading_dialog.dart index 9c88a39..540c094 100644 --- a/lib/widgets/loading_dialog.dart +++ b/lib/widgets/loading_dialog.dart @@ -36,7 +36,7 @@ class _LoadingDialogState extends State { textDirection: TextDirection.rtl, child: Center( child: Image.asset( - "assets/images/logos/loading_mohemm_logo.gif", + "assets/images/loading_mohemm_logo.gif", height: 96.0, width: 96.0, ),