fix auth issue

logut
Elham Rababah 5 years ago
parent 2aab227e0c
commit 41c66fc8ff

@ -0,0 +1,3 @@
import 'package:driverapp/core/service/base_service.dart';
class UserDetailsService extends BaseService {}

@ -34,6 +34,7 @@ class BaseAppClient {
body['TokenID'] = token; body['TokenID'] = token;
body['MobileNo'] = doctorProfile?.mobileNumber; body['MobileNo'] = doctorProfile?.mobileNumber;
body['Channel'] = CHANNEL; body['Channel'] = CHANNEL;
body['VersionID'] = 8.3;
} }

@ -1,22 +1,58 @@
import 'package:driverapp/config/shared_pref_kay.dart'; import 'package:driverapp/config/shared_pref_kay.dart';
import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/model/authentication/authenticated_user.dart';
import 'package:driverapp/core/model/authentication/login_request.dart'; import 'package:driverapp/core/model/authentication/login_request.dart';
import 'package:driverapp/core/service/authentication_service.dart'; import 'package:driverapp/core/service/authentication_service.dart';
import 'package:driverapp/core/service/client/base_app_client.dart'; import 'package:driverapp/core/service/client/base_app_client.dart';
import 'package:driverapp/core/viewModels/base_view_model.dart'; import 'package:flutter/cupertino.dart';
import '../../locator.dart'; import '../../locator.dart';
enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED } enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED }
class AuthenticationViewModel extends BaseViewModel { class AuthenticationViewModel with ChangeNotifier {
AuthenticationService _authenticationService = locator<AuthenticationService>(); AuthenticationService _authenticationService =
locator<AuthenticationService>();
AuthenticatedUser user;
bool isLogin = false;
bool isLoading = false;
bool isError = false;
String error;
AuthenticationViewModel() {
getUser();
}
getUser() async {
var asd = "";
if (user == null) {
isLoading = true;
notifyListeners();
var userProfile = await sharedPref.getObject(USER_PROFILE);
if (userProfile != null) {
user = AuthenticatedUser.fromJson(
await sharedPref.getObject(USER_PROFILE));
isLogin = true;
isLoading = false;
notifyListeners();
} else {
isLogin = false;
isLoading = false;
notifyListeners();
}
}
// else
// {
// isLogin = true;
// isLoading = false;
// notifyListeners();
// }
}
APP_STATUS get status { APP_STATUS get status {
if (state == ViewState.Busy || state == ViewState.BusyLocal) { if (isLoading) {
return APP_STATUS.LOADING; return APP_STATUS.LOADING;
} else { } else {
if ( user != null) { if (isLogin) {
return APP_STATUS.AUTHENTICATED; return APP_STATUS.AUTHENTICATED;
} else { } else {
return APP_STATUS.UNAUTHENTICATED; return APP_STATUS.UNAUTHENTICATED;
@ -25,16 +61,20 @@ class AuthenticationViewModel extends BaseViewModel {
} }
login(LoginRequest loginRequest) async { login(LoginRequest loginRequest) async {
setState(ViewState.BusyLocal); isLoading = true;
notifyListeners();
await _authenticationService.login(loginRequest); await _authenticationService.login(loginRequest);
if (_authenticationService.hasError) { if (_authenticationService.hasError) {
error = _authenticationService.error; error = _authenticationService.error;
setState(ViewState.ErrorLocal); isLoading = false;
isError = true;
notifyListeners();
} else { } else {
sharedPref.setObject( sharedPref.setObject(
USER_PROFILE, _authenticationService.authenticatedUser); USER_PROFILE, _authenticationService.authenticatedUser);
sharedPref.setString(TOKEN, _authenticationService.token); sharedPref.setString(TOKEN, _authenticationService.token);
setState(ViewState.Idle); user = _authenticationService.authenticatedUser;
notifyListeners();
} }
} }
} }

@ -20,4 +20,6 @@ void setupLocator() {
locator.registerFactory(() => HospitalViewModel()); locator.registerFactory(() => HospitalViewModel());
locator.registerFactory(() => AuthenticationViewModel()); locator.registerFactory(() => AuthenticationViewModel());
locator.registerFactory(() => OrdersViewModel()); locator.registerFactory(() => OrdersViewModel());
//locator.registerSingleton(AuthenticatedUser(),instanceName: "user",signalsReady: true);
// locator.registerSingleton(() => BaseViewModel());
} }

@ -5,6 +5,7 @@ import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'config/size_config.dart'; import 'config/size_config.dart';
import 'core/viewModels/authentication_view_model.dart';
import 'core/viewModels/project_view_model.dart'; import 'core/viewModels/project_view_model.dart';
import 'locator.dart'; import 'locator.dart';
@ -25,7 +26,15 @@ class MyApp extends StatelessWidget {
providers: [ providers: [
ChangeNotifierProvider<ProjectViewModel>( ChangeNotifierProvider<ProjectViewModel>(
create: (context) => ProjectViewModel(), create: (context) => ProjectViewModel(),
) ),
ChangeNotifierProvider<AuthenticationViewModel>(
create: (context) => AuthenticationViewModel(),
),
// ChangeNotifierProxyProvider<ProjectViewModel, AuthenticationViewModel>(
// update: (_, auth, payments) => payments..getUser(),
// create: (_) => AuthenticationViewModel(),
// ),
], ],
child: Consumer<ProjectViewModel>( child: Consumer<ProjectViewModel>(
builder: (context, projectProvider, child) => MaterialApp( builder: (context, projectProvider, child) => MaterialApp(

@ -1,9 +1,7 @@
import 'package:driverapp/app-icons/driver_app_icons.dart'; import 'package:driverapp/app-icons/driver_app_icons.dart';
import 'package:driverapp/core/enum/viewstate.dart';
import 'package:driverapp/core/model/authentication/login_request.dart'; import 'package:driverapp/core/model/authentication/login_request.dart';
import 'package:driverapp/core/viewModels/authentication_view_model.dart'; import 'package:driverapp/core/viewModels/authentication_view_model.dart';
import 'package:driverapp/core/viewModels/project_view_model.dart'; import 'package:driverapp/core/viewModels/project_view_model.dart';
import 'package:driverapp/pages/base/base_view.dart';
import 'package:driverapp/pages/dashboard/dashboard_screen.dart'; import 'package:driverapp/pages/dashboard/dashboard_screen.dart';
import 'package:driverapp/uitl/translations_delegate_base.dart'; import 'package:driverapp/uitl/translations_delegate_base.dart';
import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/uitl/utils.dart';
@ -21,244 +19,245 @@ class LoginPage extends StatelessWidget {
LoginRequest loginRequest = LoginRequest(); LoginRequest loginRequest = LoginRequest();
final loginFormKey = GlobalKey<FormState>(); final loginFormKey = GlobalKey<FormState>();
ProjectViewModel projectViewModel; ProjectViewModel projectViewModel;
AuthenticationViewModel authenticationViewModel;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context); projectViewModel = Provider.of(context);
authenticationViewModel = Provider.of(context);
return AnimatedSwitcher( return AnimatedSwitcher(
duration: Duration(microseconds: 350), duration: Duration(microseconds: 350),
child: BaseView<AuthenticationViewModel>( child: AppScaffold(
builder: (_, model, widget) => isShowAppBar: false,
AppScaffold( body: SingleChildScrollView(
isShowAppBar: false, child: Center(
body: SingleChildScrollView( child: Column(
child: Center( mainAxisAlignment: MainAxisAlignment.spaceBetween,
child: Column( children: <Widget>[
mainAxisAlignment: MainAxisAlignment.spaceBetween, FractionallySizedBox(
children: <Widget>[ widthFactor: 0.80,
FractionallySizedBox( child: Column(
widthFactor: 0.80, children: <Widget>[
child: Column( SizedBox(
children: <Widget>[ height: 40,
SizedBox( ),
height: 40, Column(
), crossAxisAlignment: CrossAxisAlignment.start,
Column( children: <Widget>[
crossAxisAlignment: CrossAxisAlignment.start, Container(
children: <Widget>[ child: Icon(
Container( DriverApp.logo,
child: Icon( size: 70,
DriverApp.logo, color: Theme.of(context).primaryColor,
size: 70,
color: Theme.of(context).primaryColor,
),
margin: EdgeInsets.only(
right: projectViewModel.isArabic
? 0
: MediaQuery.of(context).size.width * 0.15,
left: !projectViewModel.isArabic
? 0
: MediaQuery.of(context).size.width * 0.15),
),
],
),
SizedBox(
height: 20,
),
Column(
children: <Widget>[
Text(
"Driver",
style: TextStyle(
fontSize: 50, fontWeight: FontWeight.bold),
),
Text(
"Delivery",
style: TextStyle(fontSize: 36, letterSpacing: 1),
), ),
Text( margin: EdgeInsets.only(
"APP", right: projectViewModel.isArabic
? 0
: MediaQuery.of(context).size.width * 0.15,
left: !projectViewModel.isArabic
? 0
: MediaQuery.of(context).size.width * 0.15),
),
],
),
SizedBox(
height: 20,
),
Column(
children: <Widget>[
Text(
"Driver",
style: TextStyle(
fontSize: 50, fontWeight: FontWeight.bold),
),
Text(
"Delivery",
style: TextStyle(fontSize: 36, letterSpacing: 1),
),
Text(
"APP",
style: TextStyle(
fontSize: 33,
letterSpacing: 33,
fontWeight: FontWeight.w400),
),
],
),
SizedBox(
height: 30,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircleContainer(
onTap: () => projectViewModel.changeLanguage('en'),
child: Text(
TranslationBase.of(context).lanEnglish,
style: TextStyle( style: TextStyle(
fontSize: 33, fontSize: 12,
letterSpacing: 33, color: projectViewModel.isArabic
fontWeight: FontWeight.w400), ? Colors.black
: Colors.white),
), ),
], color: projectViewModel.isArabic
), ? Colors.transparent
SizedBox( : Theme.of(context).primaryColor,
height: 30, borderWidth: projectViewModel.isArabic ? 3 : 0,
), borderColor: projectViewModel.isArabic
Row( ? Theme.of(context).primaryColor
mainAxisAlignment: MainAxisAlignment.center, : Colors.transparent,
children: <Widget>[ ),
CircleContainer( SizedBox(
onTap: () => projectViewModel.changeLanguage('en'), width: 20,
),
CircleContainer(
onTap: () =>
projectViewModel.changeLanguage('ar'),
child: Text( child: Text(
TranslationBase.of(context).lanEnglish, TranslationBase.of(context).lanArabic,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
color: projectViewModel.isArabic color: !projectViewModel.isArabic
? Colors.black ? Colors.black
: Colors.white), : Colors.white),
), ),
color: projectViewModel.isArabic color: !projectViewModel.isArabic
? Colors.transparent ? Colors.transparent
: Theme.of(context).primaryColor, : Theme.of(context).primaryColor,
borderWidth: projectViewModel.isArabic ? 3 : 0, borderWidth: !projectViewModel.isArabic ? 3 : 0,
borderColor: projectViewModel.isArabic borderColor: !projectViewModel.isArabic
? Theme.of(context).primaryColor ? Theme.of(context).primaryColor
: Colors.transparent, : Colors.transparent),
],
),
SizedBox(
height: 10,
),
Form(
key: loginFormKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Expanded(
child: Text(
TranslationBase.of(context)
.enterCredentialsMsg,
style: TextStyle(
fontSize: 13, color: Colors.grey),
),
),
SizedBox(
height: 10,
)
],
),
), ),
SizedBox( SizedBox(
width: 20, height: 10,
), ),
CircleContainer( Container(
onTap: () => child: TextFields(
projectViewModel.changeLanguage('ar'), hintText: TranslationBase.of(context).enterId,
child: Text( validator: (value) {
TranslationBase.of(context).lanArabic, if (value.isEmpty) {
return TranslationBase.of(context)
.pleaseEnterYourID;
}
return null;
},
onSaved: (value) {
loginRequest.userID = int.parse(value.trim());
},
),
),
SizedBox(
height: 20,
),
Container(
child: TextFields(
borderRadiusValue: 6,
hintText:
TranslationBase.of(context).enterPassword,
validator: (value) {
if (value.isEmpty) {
return TranslationBase.of(context)
.pleaseEnterPassword;
}
return null;
},
onSaved: (value) {
loginRequest.password = value;
},
),
),
SizedBox(
height: 25,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
TranslationBase.of(context).forgotPassword,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 14,
color: !projectViewModel.isArabic color: Theme.of(context).primaryColor),
? Colors.black
: Colors.white),
), ),
color: !projectViewModel.isArabic ],
? Colors.transparent ),
: Theme.of(context).primaryColor,
borderWidth: !projectViewModel.isArabic ? 3 : 0,
borderColor: !projectViewModel.isArabic
? Theme.of(context).primaryColor
: Colors.transparent),
], ],
), ),
SizedBox( ),
height: 10, ],
),
),
SizedBox(
height: 20,
),
SizedBox(
height: 10,
),
Container(
margin: EdgeInsets.all(10),
height: MediaQuery.of(context).size.height * 0.22,
child: Column(
children: <Widget>[
SecondaryButton(
label: TranslationBase.of(context).login,
onTap: () {
login(context);
},
disabled: authenticationViewModel.isLoading,
loading: authenticationViewModel.isLoading,
), ),
Form( SizedBox(
key: loginFormKey, height: 30,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Expanded(
child: Text(
TranslationBase.of(context).enterCredentialsMsg,
style: TextStyle(
fontSize: 13, color: Colors.grey),
),
),
SizedBox(
height: 10,
)
],
),
),
SizedBox(
height: 10,
),
Container(
child: TextFields(
hintText: TranslationBase.of(context).enterId,
validator: (value) {
if (value.isEmpty) {
return TranslationBase.of(context)
.pleaseEnterYourID;
}
return null;
},
onSaved: (value) {
loginRequest.userID = int.parse(value.trim());
},
),
),
SizedBox(
height: 20,
),
Container(
child: TextFields(
borderRadiusValue: 6,
hintText:
TranslationBase.of(context).enterPassword,
validator: (value) {
if (value.isEmpty) {
return TranslationBase.of(context)
.pleaseEnterPassword;
}
return null;
},
onSaved: (value) {
loginRequest.password = value;
},
),
),
SizedBox(
height: 25,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
TranslationBase.of(context).forgotPassword,
style: TextStyle(
fontSize: 14,
color: Theme.of(context).primaryColor),
),
],
),
],
),
), ),
], ],
), ))
), ],
SizedBox(
height: 20,
),
SizedBox(
height: 10,
),Container(
margin: EdgeInsets.all(10),
height: MediaQuery.of(context).size.height * 0.22,
child: Column(
children: <Widget>[
SecondaryButton(
label: TranslationBase.of(context).login,
onTap: () {
login(model, context);
},
disabled: model.state == ViewState.BusyLocal,
loading: model.state == ViewState.BusyLocal,
),
SizedBox(
height: 30,
),
],
))
],
),
), ),
), ),
), ),
), ),
); );
} }
login(AuthenticationViewModel model, BuildContext context) async { login(BuildContext context) async {
if (loginFormKey.currentState.validate()) { if (loginFormKey.currentState.validate()) {
loginFormKey.currentState.save(); loginFormKey.currentState.save();
await model.login(loginRequest); await authenticationViewModel.login(loginRequest);
if (model.state == ViewState.ErrorLocal) { if (authenticationViewModel.isError) {
Utils.showErrorToast(model.error); Utils.showErrorToast(authenticationViewModel.error);
} else { } else {
Navigator.push( Navigator.push(
context, MaterialPageRoute(builder: (context) => DashboardScreen())); context,
MaterialPageRoute(builder: (context) => DashboardScreen()));
} }
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -1,34 +1,35 @@
import 'package:driverapp/pages/authentication/login_page.dart'; import 'package:driverapp/pages/authentication/login_page.dart';
import 'package:driverapp/pages/base/base_view.dart'; import 'package:driverapp/pages/dashboard/dashboard_screen.dart';
import 'package:driverapp/pages/landing/landing_page.dart'; import 'package:driverapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart';
import 'package:driverapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:driverapp/pages/dashboard/dashboard_screen.dart'; import 'package:provider/provider.dart';
import 'core/viewModels/authentication_view_model.dart'; import 'core/viewModels/authentication_view_model.dart';
class RootPage extends StatelessWidget { class RootPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget buildRoot(APP_STATUS status) { AuthenticationViewModel authenticationViewModel = Provider.of(context);
APP_STATUS status = authenticationViewModel.status;
Widget buildRoot() {
switch (status) { switch (status) {
case APP_STATUS.UNAUTHENTICATED: case APP_STATUS.UNAUTHENTICATED:
return LoginPage (); return LoginPage();
break; break;
case APP_STATUS.AUTHENTICATED: case APP_STATUS.AUTHENTICATED:
return DashboardScreen(); return DashboardScreen();
break; break;
case APP_STATUS.LOADING:
return Center(child: AppCircularProgressIndicator());
break;
} }
} }
return AnimatedSwitcher( return AnimatedSwitcher(
duration: Duration(microseconds: 350), duration: Duration(microseconds: 350),
child: BaseView<AuthenticationViewModel>( child: Scaffold(
builder: (_, model, widget) => AppScaffold( body: buildRoot(),
baseViewModel: model,
body: buildRoot((model.status)),
),
), ),
); );
} }

Loading…
Cancel
Save