merge-requests/1/merge
unknown 6 years ago
commit c53439f014

@ -26,6 +26,8 @@
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIMainStoryboardFile</key> <key>UIMainStoryboardFile</key>
<string>Main</string> <string>Main</string>
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortrait</string>

@ -0,0 +1,54 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:flutter/cupertino.dart';
class SizeConfig {
static double _blockWidth = 0;
static double _blockHeight = 0;
static double screenWidth;
static double screenHeight;
static double textMultiplier;
static double imageSizeMultiplier;
static double heightMultiplier;
static double widthMultiplier;
static bool isPortrait = true;
static bool isMobilePortrait = false;
static bool isMobile = false;
void init(BoxConstraints constraints, Orientation orientation) {
screenHeight = constraints.maxHeight;
screenWidth = constraints.maxWidth;
_blockWidth = screenWidth / 100;
_blockHeight = screenHeight / 100;
if(constraints.maxWidth<= MAX_SMALL_SCREEN){
isMobile = true;
}
if (orientation == Orientation.portrait) {
isPortrait = true;
if (screenWidth < 450) {
isMobilePortrait = true;
}
textMultiplier = _blockHeight;
imageSizeMultiplier = _blockWidth;
} else {
isPortrait = false;
isMobilePortrait = false;
textMultiplier = _blockWidth;
imageSizeMultiplier = _blockHeight;
}
heightMultiplier = _blockHeight;
widthMultiplier = _blockWidth;
print('screenWidth $screenWidth');
print('screenHeight $screenHeight');
print('textMultiplier $textMultiplier');
print('imageSizeMultiplier $imageSizeMultiplier');
print('heightMultiplier$heightMultiplier');
print('widthMultiplier $widthMultiplier');
print('isPortrait $isPortrait');
print('isMobilePortrait $isMobilePortrait');
}
}

@ -1,14 +1,39 @@
import 'package:doctor_app_flutter/providers/auth_provider.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:http_interceptor/http_interceptor.dart'; import 'package:http_interceptor/http_interceptor.dart';
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
List<String> publicUrls = [LOGIN_URL,SELECT_DEVICE_IMEI,];
class HttpInterceptor extends InterceptorContract { class HttpInterceptor extends InterceptorContract {
Future<RequestData> interceptRequest({RequestData data}) async { Future<RequestData> interceptRequest({RequestData data}) async {
print('RequestData ${data.body}'); // print('RequestData ${data.body}');
try { try {
// data.params['appid'] = OPEN_WEATHER_API_KEY;
// data.params['units'] = 'metric';
data.headers["Content-Type"] = "application/json"; data.headers["Content-Type"] = "application/json";
data.headers["Accept"] = "application/json"; data.headers["Accept"] = "application/json";
if (!publicUrls.contains(data.url)) {
var loggedUserInfo = await sharedPref.getObj('loggedUser');
print('loggedUserInfo$loggedUserInfo');
// the sevices handel the token in differat name so I ask to be change
// we must change the implementaion once the name are changed
if(data.body['LogInTokenID']){
data.body['LogInTokenID'] = loggedUserInfo['LogInTokenID'];
}
if(data.body['TokenID']){
data.body['TokenID'] = loggedUserInfo['LogInTokenID'];
}
print('data.body${data.body}');
}
else {
if(data.body['LogInTokenID']){
data.body['LogInTokenID'] = '';
}
if(data.body['TokenID']){
data.body['TokenID'] = '';
}
}
} catch (e) { } catch (e) {
print(e); print(e);
} }
@ -17,7 +42,7 @@ class HttpInterceptor extends InterceptorContract {
@override @override
Future<ResponseData> interceptResponse({ResponseData data}) async { Future<ResponseData> interceptResponse({ResponseData data}) async {
print('${data.body}'); // print('ResponseData ${data.body}');
return data; return data;
} }
} }

@ -1 +1 @@
enum loginType { knownUser, unknownUser } enum loginType { knownUser, unknownUser, changePassword, verifyPassword }

@ -1,9 +1,11 @@
import 'package:doctor_app_flutter/providers/auth_provider.dart';
import 'package:doctor_app_flutter/providers/patients_provider.dart';
import 'package:doctor_app_flutter/providers/projects_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import './config/size_config.dart';
import './providers/auth_provider.dart';
import './providers/patients_provider.dart';
import './providers/projects_provider.dart';
import './routes.dart'; import './routes.dart';
void main() => runApp(MyApp()); void main() => runApp(MyApp());
@ -12,22 +14,29 @@ class MyApp extends StatelessWidget {
// This widget is the root of your application. // This widget is the root of your application.
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MultiProvider( return LayoutBuilder(
providers: [ builder: (context, constraints) {
ChangeNotifierProvider.value(value: PatientsProvider()), return OrientationBuilder(builder: (context, orientation) {
ChangeNotifierProvider.value(value: AuthProvider()), SizeConfig().init(constraints, orientation);
ChangeNotifierProvider.value(value: ProjectsProvider()), return MultiProvider(
], providers: [
child: MaterialApp( ChangeNotifierProvider.value(value: PatientsProvider()),
title: 'Flutter Demo', ChangeNotifierProvider.value(value: AuthProvider()),
theme: ThemeData( ChangeNotifierProvider.value(value: ProjectsProvider()),
primarySwatch: Colors.blue, ],
primaryColor: Hexcolor('#B8382C'), child: MaterialApp(
buttonColor: Hexcolor('#B8382C'), title: 'Flutter Demo',
fontFamily: 'WorkSans'), theme: ThemeData(
initialRoute: INIT_ROUTE, primarySwatch: Colors.blue,
routes: routes, primaryColor: Hexcolor('#B8382C'),
), buttonColor: Hexcolor('#B8382C'),
fontFamily: 'WorkSans'),
initialRoute: INIT_ROUTE,
routes: routes,
),
);
});
},
); );
} }
} }

@ -9,32 +9,34 @@ import './screens/medicine/medicine_search_screen.dart';
import './screens/my_schedule_screen.dart'; import './screens/my_schedule_screen.dart';
import './screens/patients/patient_search_screen.dart'; import './screens/patients/patient_search_screen.dart';
import './screens/patients/patients_list_screen.dart'; import './screens/patients/patients_list_screen.dart';
import './screens/auth/change_password_screen.dart';
import './screens/auth/verify_account_screen.dart';
const String INIT_ROUTE = LOGIN;
const String HOME = '/'; const String HOME = '/';
const String LOGIN = 'login'; const String LOGIN = 'login';
const String INIT_ROUTE = LOGIN; const String CHANGE_PASSWORD = 'change-password';
const String VERIFY_ACCOUNT = 'verify-account';
const String MY_SCHEDULE = 'my-schedule'; const String MY_SCHEDULE = 'my-schedule';
const String QR_READER = 'qr_reader'; const String QR_READER = 'qr-reader';
const String PATIENT_SEARCH = 'patients/patient-search'; const String PATIENT_SEARCH = 'patients/patient-search';
const String PATIENTS = 'patients/patients'; const String PATIENTS = 'patients/patients';
const String BLOOD_BANK = 'blood_bank'; const String BLOOD_BANK = 'blood-bank';
const String DOCTOR_REPLY = 'doctor_reply'; const String DOCTOR_REPLY = 'doctor-reply';
const String MEDICINE_SEARCH='medicine_search'; const String MEDICINE_SEARCH = 'medicine-search';
const String SETTINGS ='settings'; const String SETTINGS = 'settings';
var routes = { var routes = {
HOME:(_)=>DashboardPage(title: 'Home',), HOME: (_) => DashboardPage(title: 'Home',),
INIT_ROUTE:(_)=>Loginsreen(), INIT_ROUTE: (_) => Loginsreen(),
MY_SCHEDULE:(_)=>MyScheduleScreen(), MY_SCHEDULE: (_) => MyScheduleScreen(),
PATIENT_SEARCH:(_)=>PatientSearchScreen(), PATIENT_SEARCH: (_) => PatientSearchScreen(),
PATIENTS:(_)=>PatientsListScreen(), PATIENTS: (_) => PatientsListScreen(),
QR_READER:(_)=>QrReaderScreen(), QR_READER: (_) => QrReaderScreen(),
BLOOD_BANK:(_)=>BloodBankScreen(), BLOOD_BANK: (_) => BloodBankScreen(),
DOCTOR_REPLY:(_)=>DoctorReplyScreen(), DOCTOR_REPLY: (_) => DoctorReplyScreen(),
MEDICINE_SEARCH:(_)=>MedicineSearchScreen(), MEDICINE_SEARCH: (_) => MedicineSearchScreen(),
SETTINGS:(_)=>SettingsScreen() SETTINGS: (_) => SettingsScreen(),
CHANGE_PASSWORD: (_) => ChangePasswordScreen(),
VERIFY_ACCOUNT: (_) => VerifyAccountScreen(),
}; };

@ -0,0 +1,24 @@
import 'package:doctor_app_flutter/lookups/auth_lookup.dart';
import 'package:doctor_app_flutter/widgets/auth/auth_header.dart';
import 'package:flutter/material.dart';
import '../../widgets/auth/change_password.dart';
class ChangePasswordScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// return Container()];
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsetsDirectional.fromSTEB(30, 0, 0, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
AuthHeader(loginType.changePassword),
ChangePassword(),
],
),
),
));
}
}

@ -1,14 +1,14 @@
import 'dart:async'; import 'dart:async';
import 'package:doctor_app_flutter/lookups/auth_lookup.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/widgets/auth/known_user_login.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import '../../lookups/auth_lookup.dart';
import '../../util/dr_app_shared_pref.dart';
import '../../widgets/auth/auth_header.dart'; import '../../widgets/auth/auth_header.dart';
import '../../widgets/auth/known_user_login.dart';
import '../../widgets/auth/login_form.dart'; import '../../widgets/auth/login_form.dart';
import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart';
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
class Loginsreen extends StatefulWidget { class Loginsreen extends StatefulWidget {

@ -0,0 +1,24 @@
import 'package:doctor_app_flutter/lookups/auth_lookup.dart';
import 'package:doctor_app_flutter/widgets/auth/auth_header.dart';
import 'package:flutter/material.dart';
class VerifyAccountScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// return Container()];
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsetsDirectional.fromSTEB(30, 0, 0, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
AuthHeader(loginType.verifyPassword),
// ChangePassword(),
],
),
),
));
}
}

@ -1,5 +1,5 @@
import 'package:doctor_app_flutter/lookups/home_items_lookup.dart'; import '../lookups/home_items_lookup.dart';
import 'package:doctor_app_flutter/routes.dart'; import '../routes.dart';
import '../widgets/home/home_item.dart'; import '../widgets/home/home_item.dart';
import '../widgets/shared/app.drawer.dart'; import '../widgets/shared/app.drawer.dart';

@ -80,6 +80,6 @@ class DrAppSharedPreferances {
if (string == null ){ if (string == null ){
return null; return null;
} }
return json.decode(prefs.getString(key)); return json.decode(string);
} }
} }

@ -1,7 +1,8 @@
import 'package:doctor_app_flutter/lookups/auth_lookup.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter_device_type/flutter_device_type.dart';
import '../../config/size_config.dart';
import '../../lookups/auth_lookup.dart';
class AuthHeader extends StatelessWidget { class AuthHeader extends StatelessWidget {
var userType; var userType;
@ -9,119 +10,166 @@ class AuthHeader extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var smallScreenSize = 660; var screen = Container(
return LayoutBuilder(builder: (ctx, constraints) { margin: SizeConfig.isMobile
bool isSmallScreen = constraints.maxWidth <= smallScreenSize; ? null
var screen = Container( : EdgeInsetsDirectional.fromSTEB(SizeConfig.screenWidth * 0.30,
margin: isSmallScreen SizeConfig.screenWidth * 0.1, 0, 0),
? null child: Column(
: EdgeInsetsDirectional.fromSTEB(constraints.maxWidth * 0.30, crossAxisAlignment: CrossAxisAlignment.start,
constraints.maxWidth * 0.1, 0, 0), children: <Widget>[
child: Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Column( Container(
crossAxisAlignment: CrossAxisAlignment.start, margin: SizeConfig.isMobile
children: <Widget>[ ? EdgeInsetsDirectional.fromSTEB(0, 50, 0, 0)
Container( : EdgeInsetsDirectional.fromSTEB(
margin: isSmallScreen SizeConfig.screenWidth * 0.13, 0, 0, 0),
? EdgeInsetsDirectional.fromSTEB(0, 50, 0, 0) child: buildImageLogo(),
: EdgeInsetsDirectional.fromSTEB( ),
constraints.maxWidth * 0.13, 0, 0, 0), SizedBox(
child: Image.asset( height: 10,
'assets/images/login_icon.png', ),
fit: BoxFit.cover, Container(
height: margin: SizeConfig.isMobile
isSmallScreen ? null : constraints.maxWidth * 0.09, ? null
), : EdgeInsetsDirectional.fromSTEB(
), SizeConfig.screenWidth * 0.13, 0, 0, 0),
SizedBox( child: buildTextUnderLogo(context),
height: 10, )
), ],
Container( ),
margin: isSmallScreen Column(
? null crossAxisAlignment: CrossAxisAlignment.start,
: EdgeInsetsDirectional.fromSTEB( children: SizeConfig.isMobile
constraints.maxWidth * 0.13, 0, 0, 0), ? <Widget>[
child: Text( SizedBox(
"LOGIN", height: 10,
style: TextStyle( ),
fontSize: buildWelText(),
isSmallScreen ? 30 : constraints.maxWidth * 0.035, buildDrSulText(context),
fontWeight: FontWeight.w800), ]
), : <Widget>[
) SizedBox(
], height: 10,
), ),
Column( Row(
crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: isSmallScreen children: <Widget>[
? <Widget>[ buildWelText(),
SizedBox( buildDrSulText(context),
height: 10, ],
), ),
buildWelText(isSmallScreen, constraints), ],
buildDrSulText(isSmallScreen, constraints, context), ),
] buildDrAppContainer(context)
: <Widget>[ ],
SizedBox( ));
height: 10, return screen;
), }
Row(
mainAxisAlignment: MainAxisAlignment.start, Image buildImageLogo() {
children: <Widget>[ String img = 'assets/images/login_icon.png';
buildWelText(isSmallScreen, constraints), if (userType == loginType.unknownUser) {
buildDrSulText(isSmallScreen, constraints, context), img = 'assets/images/welcome_login_icon.png';
], }
),
], return Image.asset(
), img,
buildDrAppContainer(isSmallScreen, constraints, context) fit: BoxFit.cover,
], height: SizeConfig.isMobile ? null : SizeConfig.screenWidth * 0.09,
)); );
return screen; }
});
Widget buildTextUnderLogo(context) {
if (userType == loginType.knownUser || userType == loginType.unknownUser) {
return Text(
"LOGIN",
style: TextStyle(
fontSize: SizeConfig.isMobile ? 30 : SizeConfig.screenWidth * 0.035,
fontWeight: FontWeight.w800),
);
} else {
String text1;
String text2;
if (userType == loginType.changePassword) {
text1 = 'Change';
text2 = 'Password!';
}
if (userType == loginType.verifyPassword) {
text1 = 'verify';
text2 = 'Your Account!';
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
text1,
style: TextStyle(
fontSize:
SizeConfig.isMobile ? 30 : SizeConfig.screenWidth * 0.035,
fontWeight: FontWeight.w800),
),
Text(
text2,
style: TextStyle(
color: Theme.of(context).primaryColor,
fontSize:
SizeConfig.isMobile ? 30 : SizeConfig.screenWidth * 0.035,
fontWeight: FontWeight.w800),
)
],
);
}
} }
Container buildDrAppContainer( Container buildDrAppContainer(BuildContext context) {
bool isSmallScreen, BoxConstraints constraints, BuildContext context) { if (userType == loginType.changePassword || userType == loginType.verifyPassword ) {
return Container();
}
return Container( return Container(
margin: isSmallScreen margin: SizeConfig.isMobile
? null ? null
: EdgeInsetsDirectional.fromSTEB( : EdgeInsetsDirectional.fromSTEB(
constraints.maxWidth * 0.13, 0, 0, 0), SizeConfig.screenWidth * 0.13, 0, 0, 0),
child: Text( child: Text(
"Doctor App", "Doctor App",
style: TextStyle( style: TextStyle(
fontSize: isSmallScreen ? 26 : constraints.maxWidth * 0.030, fontSize: SizeConfig.isMobile ? 26 : SizeConfig.screenWidth * 0.030,
fontWeight: FontWeight.w800, fontWeight: FontWeight.w800,
color: Theme.of(context).primaryColor), color: Theme.of(context).primaryColor),
), ),
); );
} }
Text buildDrSulText( Text buildDrSulText(BuildContext context) {
bool isSmallScreen, BoxConstraints constraints, BuildContext context) { if (userType == loginType.changePassword || userType == loginType.verifyPassword ) {
return Text('');
}
return Text( return Text(
'Dr Sulaiman Al Habib', 'Dr Sulaiman Al Habib',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w800, fontWeight: FontWeight.w800,
fontSize: isSmallScreen ? 24 : constraints.maxWidth * 0.029, fontSize: SizeConfig.isMobile ? 24 : SizeConfig.screenWidth * 0.029,
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
), ),
); );
} }
Text buildWelText(bool isSmallScreen, BoxConstraints constraints) { Widget buildWelText() {
String text = 'Welcome to '; String text = 'Welcome to ';
if (userType == loginType.unknownUser) { if (userType == loginType.unknownUser) {
text = 'Welcome Back to '; text = 'Welcome Back to ';
} }
if (userType == loginType.changePassword || userType == loginType.verifyPassword ) {
return Text('');
}
return Text( return Text(
text, text,
style: TextStyle( style: TextStyle(
fontSize: isSmallScreen ? 24 : constraints.maxWidth * 0.029), fontSize: SizeConfig.isMobile ? 24 : SizeConfig.screenWidth * 0.029),
); );
} }
} }

@ -0,0 +1,159 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class ChangePassword extends StatelessWidget {
final changePassFormKey = GlobalKey<FormState>();
var changePassFormValues = {
'currentPass': null,
'newPass': null,
'repeatedPass': null
};
@override
Widget build(BuildContext context) {
return Form(
key: changePassFormKey,
child: Container(
width: SizeConfig.widthMultiplier * 90,
child:
Column(crossAxisAlignment: CrossAxisAlignment.start, children: <
Widget>[
buildSizedBox(),
TextFormField(
keyboardType: TextInputType.number,
decoration: InputDecoration(
// ts/images/password_icon.png
prefixIcon: Image.asset('assets/images/password_icon.png'),
hintText: 'Current Password',
hintStyle:
TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
if (value.isEmpty) {
return 'Please enter your Current Password';
}
return null;
},
onSaved: (value) {
// changePassFormValues. = value;
},
),
buildSizedBox(40),
// buildSizedBox(),
Text(
"New Password",
style: TextStyle(
fontSize: 2.8 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w800),
),
buildSizedBox(10.0),
// Text()
TextFormField(
keyboardType: TextInputType.number,
decoration: InputDecoration(
// ts/images/password_icon.png
prefixIcon: Image.asset('assets/images/password_icon.png'),
hintText: 'New Password',
hintStyle:
TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
if (value.isEmpty) {
return 'Please enter your New Password';
}
return null;
},
onSaved: (value) {
// userInfo.UserID = value;
},
),
buildSizedBox(),
TextFormField(
keyboardType: TextInputType.number,
decoration: InputDecoration(
prefixIcon: Image.asset('assets/images/password_icon.png'),
hintText: 'Repeat Password',
hintStyle:
TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
if (value.isEmpty) {
return 'Please enter your Repeat Password';
}
return null;
},
onSaved: (value) {
// userInfo.UserID = value;
},
),
buildSizedBox(),
RaisedButton(
onPressed:changePass,
elevation: 0.0,
child: Container(
width: double.infinity,
height: 50,
child: Center(
child: Text(
'Change Password'
.toUpperCase(),
// textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 2.5 * SizeConfig.textMultiplier),
),
),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(width: 0.5, color: Hexcolor('#CCCCCC'))),
),
SizedBox(
height: 10,
),
])));
}
SizedBox buildSizedBox([double height = 20]) {
return SizedBox(
height: height,
);
}
changePass(){
if(changePassFormKey.currentState.validate()){
changePassFormKey.currentState.save();
// call Api
}
}
}

@ -1,17 +1,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:local_auth/error_codes.dart' as auth_error;
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import '../../config/config.dart'; import '../../config/size_config.dart';
import '../../providers/auth_provider.dart'; import '../../providers/auth_provider.dart';
import '../../routes.dart'; import '../../routes.dart';
import '../../util/dr_app_shared_pref.dart'; import '../../util/dr_app_shared_pref.dart';
import '../../util/dr_app_toast_msg.dart'; import '../../util/dr_app_toast_msg.dart';
import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:local_auth/error_codes.dart' as auth_error;
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
DrAppToastMsg toastMsg = DrAppToastMsg(); DrAppToastMsg toastMsg = DrAppToastMsg();
@ -88,85 +88,72 @@ class _KnownUserLoginState extends State<KnownUserLogin> {
if (snapshot.hasError) { if (snapshot.hasError) {
return Text('Error: ${snapshot.error}'); return Text('Error: ${snapshot.error}');
} else { } else {
return LayoutBuilder( return Column(
builder: (ctx, constraints) { mainAxisAlignment: MainAxisAlignment.start,
int maxSmallScreenSize = MAX_SMALL_SCREEN; children: <Widget>[
bool isSmallScreen = Stack(children: [
constraints.maxWidth <= maxSmallScreenSize; Container(
return Column( decoration: BoxDecoration(
mainAxisAlignment: MainAxisAlignment.start, border: Border.all(
children: <Widget>[ color: Hexcolor('#CCCCCC'),
Stack(children: [
Container(
decoration: BoxDecoration(
border: Border.all(
color: Hexcolor('#CCCCCC'),
),
borderRadius: BorderRadius.circular(50)),
margin: const EdgeInsets.fromLTRB(0, 20.0, 30, 0),
child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
height: 100,
width: 100,
decoration: new BoxDecoration(
// color: Colors.green, // border color
shape: BoxShape.circle,
border: Border.all(
color: Hexcolor('#CCCCCC'))),
child: CircleAvatar(
child: Image.asset(
'assets/images/dr_avatar.png',
fit: BoxFit.cover,
),
)),
Container(
margin: EdgeInsets.symmetric(
vertical: 3, horizontal: 15),
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Text(
_loggedUser['List_MemberInformation'][0]
['MemberName'],
style: TextStyle(
color: Hexcolor('515A5D'),
fontSize: isSmallScreen
? 24
: constraints.maxWidth * 0.029,
fontWeight: FontWeight.w800),
),
Text(
'ENT Spec',
style: TextStyle(
color: Hexcolor('515A5D'),
fontSize: isSmallScreen
? 20
: constraints.maxWidth * 0.025),
)
],
),
)
],
), ),
), borderRadius: BorderRadius.circular(50)),
Positioned( margin: const EdgeInsets.fromLTRB(0, 20.0, 30, 0),
top: 7, child: Row(
right: 70, // mainAxisAlignment: MainAxisAlignment.spaceBetween,
child: Image.asset( children: <Widget>[
'assets/images/close_icon.png', Container(
fit: BoxFit.cover, height: 100,
)) width: 100,
]), decoration: new BoxDecoration(
buildVerificationTypeImageContainer(), // color: Colors.green, // border color
buildButtonsContainer( shape: BoxShape.circle,
isSmallScreen, constraints, context) border:
], Border.all(color: Hexcolor('#CCCCCC'))),
); child: CircleAvatar(
}, child: Image.asset(
'assets/images/dr_avatar.png',
fit: BoxFit.cover,
),
)),
Container(
margin: EdgeInsets.symmetric(
vertical: 3, horizontal: 15),
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
_loggedUser['List_MemberInformation'][0]
['MemberName'],
style: TextStyle(
color: Hexcolor('515A5D'),
fontSize: 2.5 *SizeConfig.textMultiplier,
fontWeight: FontWeight.w800),
),
Text(
'ENT Spec',
style: TextStyle(
color: Hexcolor('515A5D'),
fontSize: 1.5 *SizeConfig.textMultiplier),
)
],
),
)
],
),
),
Positioned(
top: 7,
right: 70,
child: Image.asset(
'assets/images/close_icon.png',
fit: BoxFit.cover,
))
]),
buildVerificationTypeImageContainer(),
buildButtonsContainer(context)
],
); );
} }
} }
@ -187,8 +174,7 @@ class _KnownUserLoginState extends State<KnownUserLogin> {
} }
// //
Container buildButtonsContainer( Container buildButtonsContainer(BuildContext context) {
bool isSmallScreen, BoxConstraints constraints, BuildContext context) {
return Container( return Container(
margin: EdgeInsetsDirectional.fromSTEB(0, 0, 30, 0), margin: EdgeInsetsDirectional.fromSTEB(0, 0, 30, 0),
width: double.infinity, width: double.infinity,
@ -207,8 +193,7 @@ class _KnownUserLoginState extends State<KnownUserLogin> {
// textAlign: TextAlign.center, // textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: fontSize: 2.5 *SizeConfig.textMultiplier),
isSmallScreen ? 20 : constraints.maxWidth * 0.029),
), ),
), ),
), ),
@ -234,8 +219,7 @@ class _KnownUserLoginState extends State<KnownUserLogin> {
"More verification Options".toUpperCase(), "More verification Options".toUpperCase(),
style: TextStyle( style: TextStyle(
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
fontSize: fontSize: 2.5 *SizeConfig.textMultiplier),
isSmallScreen ? 20 : constraints.maxWidth * 0.029),
)), )),
), ),
SizedBox( SizedBox(

@ -1,5 +1,3 @@
import '../../providers/projects_provider.dart';
import '../../util/dr_app_toast_msg.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -7,13 +5,16 @@ import 'package:hexcolor/hexcolor.dart';
import 'package:imei_plugin/imei_plugin.dart'; import 'package:imei_plugin/imei_plugin.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../config/size_config.dart';
import '../../models/user_model.dart'; import '../../models/user_model.dart';
import '../../providers/auth_provider.dart'; import '../../providers/auth_provider.dart';
import '../../providers/projects_provider.dart';
import '../../routes.dart'; import '../../routes.dart';
import '../../util/dr_app_shared_pref.dart'; import '../../util/dr_app_shared_pref.dart';
import '../../util/dr_app_toast_msg.dart';
DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = DrAppSharedPreferances();
DrAppToastMsg toastMsg = DrAppToastMsg(); DrAppToastMsg toastMsg = DrAppToastMsg();
class LoginForm extends StatefulWidget with DrAppToastMsg { class LoginForm extends StatefulWidget with DrAppToastMsg {
LoginForm({ LoginForm({
@ -53,27 +54,49 @@ class _LoginFormState extends State<LoginForm> {
} }
AuthProvider authProv = Provider.of<AuthProvider>(context); AuthProvider authProv = Provider.of<AuthProvider>(context);
return LayoutBuilder(builder: (ctx, constraints) { return Form(
var smallScreenSize = 660; key: loginFormKey,
bool isSmallScreen = constraints.maxWidth <= smallScreenSize; child: Container(
return Form( width: SizeConfig.widthMultiplier * 90,
key: loginFormKey, child: Column(
child: Container( crossAxisAlignment: CrossAxisAlignment.start,
width: constraints.maxWidth * 0.9, children: <Widget>[
child: Column( buildSizedBox(),
crossAxisAlignment: CrossAxisAlignment.start, TextFormField(
children: <Widget>[ keyboardType: TextInputType.number,
SizedBox( decoration: InputDecoration(
height: 20, prefixIcon: Image.asset('assets/images/user_id_icon.png'),
), hintText: 'Enter ID',
TextFormField( hintStyle: TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
keyboardType: TextInputType.number, enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
if (value.isEmpty) {
return 'Please enter your ID';
}
return null;
},
onSaved: (value) {
userInfo.UserID = value;
},
),
buildSizedBox(),
TextFormField(
obscureText: true,
decoration: InputDecoration( decoration: InputDecoration(
prefixIcon: Image.asset('assets/images/user_id_icon.png'), prefixIcon: Image.asset('assets/images/password_icon.png'),
hintText: 'Enter ID', hintText: 'Enter Password',
hintStyle: TextStyle( hintStyle:
fontSize: TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
isSmallScreen ? 14 : constraints.maxWidth * 0.024),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)), borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')), borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
@ -87,149 +110,113 @@ class _LoginFormState extends State<LoginForm> {
), ),
validator: (value) { validator: (value) {
if (value.isEmpty) { if (value.isEmpty) {
return 'Please enter some text'; return 'Please enter your Password';
} }
return null; return null;
}, },
onSaved: (value) { onSaved: (value) {
userInfo.UserID = value; userInfo.Password = value;
}),
buildSizedBox(),
DropdownButtonFormField(
value: userInfo.ProjectID,
isExpanded: false,
decoration: InputDecoration(
contentPadding: EdgeInsets.all(10),
isDense: true,
prefixIcon: Image.asset('assets/images/hospital_icon.png'),
// hintText: 'Enter Password',
hintStyle:
TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
print(value);
if (value == null) {
return 'Please select your project';
}
return null;
}, },
), items: projectsList.map((item) {
SizedBox( return DropdownMenuItem(
height: 20, child: Text(
), '${item['Desciption']}',
TextFormField( ),
obscureText: true, value: item['ID'],
decoration: InputDecoration( );
prefixIcon: }).toList(),
Image.asset('assets/images/password_icon.png'), onChanged: (value) {
hintText: 'Enter Password', print(value);
hintStyle: TextStyle( setState(() {
fontSize: isSmallScreen
? 14
: constraints.maxWidth * 0.024),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
if (value.isEmpty) {
return 'Please enter some text';
}
return null;
},
onSaved: (value) {
userInfo.Password = value;
}),
SizedBox(
height: 20,
),
DropdownButtonFormField(
value: userInfo.ProjectID,
isExpanded: false,
decoration: InputDecoration(
contentPadding: EdgeInsets.all(10),
isDense: true,
prefixIcon:
Image.asset('assets/images/hospital_icon.png'),
// hintText: 'Enter Password',
hintStyle: TextStyle(
fontSize: isSmallScreen
? 14
: constraints.maxWidth * 0.024),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(color: Hexcolor('#CCCCCC')),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide:
BorderSide(color: Theme.of(context).primaryColor),
)
//BorderRadius.all(Radius.circular(20));
),
validator: (value) {
print(value);
if (value == null) {
return 'Please enter some text';
}
return null;
},
items: projectsList.map((item) {
return DropdownMenuItem(
child: Text(
'${item['Desciption']}',
),
value: item['ID'],
);
}).toList(),
onChanged: (value) {
userInfo.ProjectID = value; userInfo.ProjectID = value;
}), });
SizedBox( }),
height: 20, buildSizedBox(),
), Row(
Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
children: <Widget>[ Container(
Container( child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Checkbox(
value: true,
activeColor: Theme.of(context).primaryColor,
onChanged: (bool newValue) {}),
Text("Remember me",
style: TextStyle(
fontSize: 2 * SizeConfig.textMultiplier)),
],
),
),
RaisedButton(
onPressed: () {
login(context, authProv);
},
textColor: Colors.white,
elevation: 0.0,
padding: const EdgeInsets.all(0.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(width: 0.5, color: Hexcolor('#CCCCCC'))),
child: Container(
padding: const EdgeInsets.all(10.0),
height: 50,
width: SizeConfig.widthMultiplier * 30,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Checkbox( Text('LOGIN',
value: true,
activeColor: Theme.of(context).primaryColor,
onChanged: (bool newValue) {}),
Text("Remember me",
style: TextStyle( style: TextStyle(
fontSize: isSmallScreen fontSize: SizeConfig.isMobilePortrait
? 18 ? 2.3 * SizeConfig.textMultiplier
: constraints.maxWidth * 0.018)), : 2.3 * SizeConfig.textMultiplier)),
Image.asset('assets/images/login_btn_arrow_icon.png')
], ],
), ),
), ),
RaisedButton( )
onPressed: () { ],
login(context, authProv); ),
}, ],
textColor: Colors.white,
elevation: 0.0,
padding: const EdgeInsets.all(0.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side:
BorderSide(width: 0.5, color: Hexcolor('#CCCCCC'))),
child: Container(
padding: const EdgeInsets.all(10.0),
height: 50,
width: 140,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('LOG IN',
style: TextStyle(
fontSize: isSmallScreen
? 20
: constraints.maxWidth * 0.020)),
Image.asset('assets/images/login_btn_arrow_icon.png')
],
),
),
)
],
),
],
),
), ),
); ),
}); );
}
SizedBox buildSizedBox() {
return SizedBox(
height: 20,
);
} }
login(context, AuthProvider authProv) { login(context, AuthProvider authProv) {
@ -310,7 +297,7 @@ class _LoginFormState extends State<LoginForm> {
} }
Future<void> setSharedPref(key, value) async { Future<void> setSharedPref(key, value) async {
sharedPref.setString(key, value).then(( success) { sharedPref.setString(key, value).then((success) {
print("sharedPref.setString" + success.toString()); print("sharedPref.setString" + success.toString());
}); });
} }

@ -70,7 +70,7 @@ packages:
name: build_daemon name: build_daemon
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.3" version: "2.1.4"
build_modules: build_modules:
dependency: transitive dependency: transitive
description: description:
@ -91,14 +91,14 @@ packages:
name: build_runner name: build_runner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0" version: "1.8.1"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
name: build_runner_core name: build_runner_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.5.2" version: "5.0.0"
build_web_compilers: build_web_compilers:
dependency: "direct dev" dependency: "direct dev"
description: description:
@ -281,7 +281,7 @@ packages:
name: http_parser name: http_parser
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.3" version: "3.1.4"
i18n: i18n:
dependency: "direct main" dependency: "direct main"
description: description:
@ -386,7 +386,7 @@ packages:
name: package_config name: package_config
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.1" version: "1.9.3"
package_resolver: package_resolver:
dependency: transitive dependency: transitive
description: description:
@ -456,7 +456,7 @@ packages:
name: pub_semver name: pub_semver
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.4.3" version: "1.4.4"
pubspec_parse: pubspec_parse:
dependency: transitive dependency: transitive
description: description:

@ -70,6 +70,7 @@ flutter:
- assets/images/verification_sms_lg_icon.png - assets/images/verification_sms_lg_icon.png
- assets/images/verification_whatsapp_lg_icon.png - assets/images/verification_whatsapp_lg_icon.png
- assets/images/close_icon.png - assets/images/close_icon.png
- assets/images/welcome_login_icon.png
# - images/a_dot_ham.jpeg # - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see

Loading…
Cancel
Save