diff --git a/lib/main.dart b/lib/main.dart index 470c5d52..d5f65406 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,6 +11,7 @@ import './providers/auth_provider.dart'; import './providers/patients_provider.dart'; import './providers/hospital_provider.dart'; import './routes.dart'; +import 'config/config.dart'; void main() => runApp(MyApp()); @@ -18,6 +19,7 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { + AppGlobal.CONTEX = context; return LayoutBuilder( builder: (context, constraints) { return OrientationBuilder(builder: (context, orientation) { diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart index e79192ae..415b8d39 100644 --- a/lib/providers/auth_provider.dart +++ b/lib/providers/auth_provider.dart @@ -1,4 +1,6 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:flutter/cupertino.dart'; import '../models/user_model.dart'; @@ -14,8 +16,41 @@ const SEND_ACTIVATION_CODE_BY_OTP_NOTIFICATION_TYPE = const MEMBER_CHECK_ACTIVATION_CODE_NEW = 'Sentry.svc/REST/MemberCheckActivationCode_New'; const GET_DOC_PROFILES = 'Doctors.svc/REST/GetDocProfiles'; +DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); +enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED } + class AuthProvider with ChangeNotifier { + + bool isLogin= false; + bool isLoading = true; + AuthProvider(){ + getUserAuthentication(); + } + + void getUserAuthentication() async{ + Map profile = await sharedPref.getObj(DOCTOR_PROFILE); + if(profile != null) + { + isLoading = false; + isLogin = true; + } else { + isLoading = false; + isLogin = false; + } + notifyListeners(); + } + APP_STATUS get stutas { + if (isLoading) { + return APP_STATUS.LOADING; + } else{ + if ( this.isLogin) { + return APP_STATUS.AUTHENTICATED; + } else { + return APP_STATUS.UNAUTHENTICATED; + } + } + } Future login(UserModel userInfo) async { try { dynamic localRes; @@ -131,4 +166,6 @@ class AuthProvider with ChangeNotifier { throw error; } } + + } diff --git a/lib/root_page.dart b/lib/root_page.dart new file mode 100644 index 00000000..e361e42c --- /dev/null +++ b/lib/root_page.dart @@ -0,0 +1,38 @@ +import 'package:doctor_app_flutter/providers/auth_provider.dart'; +import 'package:doctor_app_flutter/screens/auth/login_screen.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import 'config/config.dart'; +import 'landing_page.dart'; + +class RootPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + AuthProvider authProvider = Provider.of(context); + Widget buildRoot() { + switch (authProvider.stutas) { + case APP_STATUS.LOADING: + return Scaffold( + body: Center( + child: DrAppCircularProgressIndeicator(), + ), + ); + break; + case APP_STATUS.UNAUTHENTICATED: + return Loginsreen(); + break; + case APP_STATUS.AUTHENTICATED: + return LandingPage(); + break; + } + } + + return AnimatedSwitcher( + duration: Duration(microseconds: 350), + child: buildRoot(), + ); + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 34d3224d..cd5b3187 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/root_page.dart'; import 'package:doctor_app_flutter/screens/patients/profile/insurance_approvals_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/patient_orders_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/progress_note_screen.dart'; @@ -38,7 +39,8 @@ import './screens/settings/settings_screen.dart'; import 'landing_page.dart'; import 'screens/doctor/doctor_reply_screen.dart'; -const String INIT_ROUTE = LOGIN; +const String INIT_ROUTE = ROOT; +const String ROOT = 'root'; const String HOME = '/'; const String LOGIN = 'login'; const String PROFILE = 'profile'; @@ -71,6 +73,7 @@ const String BODY_MEASUREMENTS = 'patients/body-measurements'; const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details'; var routes = { + ROOT: (_) => RootPage(), HOME: (_) => LandingPage(), LOGIN: (_) => Loginsreen(), PROFILE: (_) => ProfileScreen(), diff --git a/lib/util/helpers.dart b/lib/util/helpers.dart index ebcf817c..aa92b253 100644 --- a/lib/util/helpers.dart +++ b/lib/util/helpers.dart @@ -335,7 +335,7 @@ class Helpers { return localMsg; } - clearSharedPref() async { + static clearSharedPref() async { await sharedPref.clear(); } diff --git a/lib/widgets/auth/login_form.dart b/lib/widgets/auth/login_form.dart index 2d2d2bfd..17b5520d 100644 --- a/lib/widgets/auth/login_form.dart +++ b/lib/widgets/auth/login_form.dart @@ -37,8 +37,8 @@ class _LoginFormState extends State { String uniqueId = "Unknown"; var projectsList = []; bool _isInit = true; - FocusNode focusPass; - FocusNode focusProject; + FocusNode focusPass = FocusNode(); + FocusNode focusProject = FocusNode(); var userInfo = UserModel( UserID: '', @@ -72,8 +72,7 @@ class _LoginFormState extends State { @override Widget build(BuildContext context) { - final focusPass = FocusNode(); - final focusProject = FocusNode(); + AuthProvider authProv = Provider.of(context); @@ -100,7 +99,7 @@ class _LoginFormState extends State { userInfo.UserID = value.trim(); }, onFieldSubmitted: (_) { - FocusScope.of(context).nextFocus(); + focusPass.nextFocus(); }, autofocus: false, ), @@ -121,7 +120,7 @@ class _LoginFormState extends State { userInfo.Password = value; }, onFieldSubmitted: (_) { - FocusScope.of(context).nextFocus(); + focusPass.nextFocus(); helpers.showCupertinoPicker( context, projectsList, 'Name', onSelectProject); }, diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index 919dc939..b2cd3dd9 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -105,7 +106,8 @@ class _AppDrawerState extends State { ), InkWell( child: DrawerItem("lOGOUT", Icons.exit_to_app), - onTap: () { + onTap: () async { + await Helpers.clearSharedPref(); Navigator.pop(context); Navigator.of(context).pushNamed(LOGIN); }, diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index efdb0521..824ba11b 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -13,6 +14,7 @@ class AppScaffold extends StatelessWidget { @override Widget build(BuildContext context) { + AppGlobal.CONTEX = context; return Scaffold( backgroundColor: Hexcolor('#F5F5F5'), appBar: appBarTitle != ''