Merge branch 'sultan_merge' into 'master'
Sultan merge See merge request Cloud_Solution/diplomatic-quarter!5merge-requests/6/merge
commit
bbb6dcd913
@ -0,0 +1,42 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "815750722565",
|
||||
"firebase_url": "https://api-project-815750722565.firebaseio.com",
|
||||
"project_id": "api-project-815750722565",
|
||||
"storage_bucket": "api-project-815750722565.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:815750722565:android:62281cd3e5df4063",
|
||||
"android_client_info": {
|
||||
"package_name": "com.cloud.diplomaticquarterapp"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "815750722565-3a0gc7neins0eoahdrimrfksk0sqice8.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyDUfg6AKM1-00WyzpvLImUBC46wFrq9-qw"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"analytics_service": {
|
||||
"status": 1
|
||||
},
|
||||
"appinvite_service": {
|
||||
"status": 1,
|
||||
"other_platform_oauth_client": []
|
||||
},
|
||||
"ads_service": {
|
||||
"status": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
@ -0,0 +1 @@
|
||||
include ':app'
|
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
@ -1,3 +1,7 @@
|
||||
const TOKEN = 'token';
|
||||
const APP_LANGUAGE = 'language';
|
||||
|
||||
const USER_PROFILE = 'user-profile';
|
||||
const PUSH_TOKEN = 'push-token';
|
||||
const REGISTER_DATA_FOR_REGISTER = 'register-data-for-register';
|
||||
const LOGIN_TOKEN_ID = 'register-data-for-register';
|
||||
const REGISTER_DATA_FOR_LOGIIN = 'register-data-for-login';
|
||||
|
@ -0,0 +1,76 @@
|
||||
class CheckPatientAuthenticationReq {
|
||||
int patientMobileNumber;
|
||||
String zipCode;
|
||||
bool isRegister;
|
||||
String tokenID;
|
||||
int searchType;
|
||||
String patientIdentificationID;
|
||||
int patientID;
|
||||
double versionID;
|
||||
int channel;
|
||||
int languageID;
|
||||
String iPAdress;
|
||||
String generalid;
|
||||
int patientOutSA;
|
||||
Null sessionID;
|
||||
bool isDentalAllowedBackend;
|
||||
int deviceTypeID;
|
||||
|
||||
CheckPatientAuthenticationReq(
|
||||
{this.patientMobileNumber,
|
||||
this.zipCode,
|
||||
this.isRegister,
|
||||
this.tokenID,
|
||||
this.searchType,
|
||||
this.patientIdentificationID,
|
||||
this.patientID,
|
||||
this.versionID,
|
||||
this.channel,
|
||||
this.languageID,
|
||||
this.iPAdress,
|
||||
this.generalid,
|
||||
this.patientOutSA,
|
||||
this.sessionID,
|
||||
this.isDentalAllowedBackend,
|
||||
this.deviceTypeID});
|
||||
|
||||
CheckPatientAuthenticationReq.fromJson(Map<String, dynamic> json) {
|
||||
patientMobileNumber = json['PatientMobileNumber'];
|
||||
zipCode = json['ZipCode'];
|
||||
isRegister = json['isRegister'];
|
||||
tokenID = json['TokenID'];
|
||||
searchType = json['SearchType'];
|
||||
patientIdentificationID = json['PatientIdentificationID'];
|
||||
patientID = json['PatientID'];
|
||||
versionID = json['VersionID'];
|
||||
channel = json['Channel'];
|
||||
languageID = json['LanguageID'];
|
||||
iPAdress = json['IPAdress'];
|
||||
generalid = json['generalid'];
|
||||
patientOutSA = json['PatientOutSA'];
|
||||
sessionID = json['SessionID'];
|
||||
isDentalAllowedBackend = json['isDentalAllowedBackend'];
|
||||
deviceTypeID = json['DeviceTypeID'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['PatientMobileNumber'] = this.patientMobileNumber;
|
||||
data['ZipCode'] = this.zipCode;
|
||||
data['isRegister'] = this.isRegister;
|
||||
data['TokenID'] = this.tokenID;
|
||||
data['SearchType'] = this.searchType;
|
||||
data['PatientIdentificationID'] = this.patientIdentificationID;
|
||||
data['PatientID'] = this.patientID;
|
||||
data['VersionID'] = this.versionID;
|
||||
data['Channel'] = this.channel;
|
||||
data['LanguageID'] = this.languageID;
|
||||
data['IPAdress'] = this.iPAdress;
|
||||
data['generalid'] = this.generalid;
|
||||
data['PatientOutSA'] = this.patientOutSA;
|
||||
data['SessionID'] = this.sessionID;
|
||||
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
|
||||
data['DeviceTypeID'] = this.deviceTypeID;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
class SelectDeviceIMEIRES {
|
||||
bool biometricEnabled;
|
||||
String createdOn;
|
||||
String editedOn;
|
||||
int iD;
|
||||
String iMEI;
|
||||
String identificationNo;
|
||||
int logInType;
|
||||
String mobile;
|
||||
String name;
|
||||
String nameN;
|
||||
bool outSA;
|
||||
int patientID;
|
||||
int patientType;
|
||||
int preferredLanguage;
|
||||
|
||||
SelectDeviceIMEIRES(
|
||||
{this.biometricEnabled,
|
||||
this.createdOn,
|
||||
this.editedOn,
|
||||
this.iD,
|
||||
this.iMEI,
|
||||
this.identificationNo,
|
||||
this.logInType,
|
||||
this.mobile,
|
||||
this.name,
|
||||
this.nameN,
|
||||
this.outSA,
|
||||
this.patientID,
|
||||
this.patientType,
|
||||
this.preferredLanguage});
|
||||
|
||||
SelectDeviceIMEIRES.fromJson(Map<String, dynamic> json) {
|
||||
biometricEnabled = json['BiometricEnabled'];
|
||||
createdOn = json['CreatedOn'];
|
||||
editedOn = json['EditedOn'];
|
||||
iD = json['ID'];
|
||||
iMEI = json['IMEI'];
|
||||
identificationNo = json['IdentificationNo'];
|
||||
logInType = json['LogInType'];
|
||||
mobile = json['Mobile'];
|
||||
name = json['Name'];
|
||||
nameN = json['NameN'];
|
||||
outSA = json['OutSA'];
|
||||
patientID = json['PatientID'];
|
||||
patientType = json['PatientType'];
|
||||
preferredLanguage = json['PreferredLanguage'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['BiometricEnabled'] = this.biometricEnabled;
|
||||
data['CreatedOn'] = this.createdOn;
|
||||
data['EditedOn'] = this.editedOn;
|
||||
data['ID'] = this.iD;
|
||||
data['IMEI'] = this.iMEI;
|
||||
data['IdentificationNo'] = this.identificationNo;
|
||||
data['LogInType'] = this.logInType;
|
||||
data['Mobile'] = this.mobile;
|
||||
data['Name'] = this.name;
|
||||
data['NameN'] = this.nameN;
|
||||
data['OutSA'] = this.outSA;
|
||||
data['PatientID'] = this.patientID;
|
||||
data['PatientType'] = this.patientType;
|
||||
data['PreferredLanguage'] = this.preferredLanguage;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ForgotPassword extends StatefulWidget {
|
||||
@override
|
||||
_ForgotPassword createState() => _ForgotPassword();
|
||||
}
|
||||
|
||||
class _ForgotPassword extends State<ForgotPassword> {
|
||||
String selectedType = 'Saudi Arabia';
|
||||
final TextEditingController nationalIDorFile = null;
|
||||
final TextEditingController mobileNo = null;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).forgotPassword,
|
||||
isShowAppBar: true,
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 10, left: 20, right: 20),
|
||||
height: SizeConfig.realScreenHeight * .8,
|
||||
width: SizeConfig.realScreenWidth,
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: AppText(
|
||||
TranslationBase.of(context).forgotDesc,
|
||||
fontSize: SizeConfig.textMultiplier * 3.5,
|
||||
textAlign: TextAlign.left,
|
||||
)),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// add Expanded to have your dropdown button fill remaining space
|
||||
child: DropdownButtonHideUnderline(
|
||||
child: DropdownButton(
|
||||
isExpanded: true,
|
||||
value: selectedType,
|
||||
iconSize: 40,
|
||||
elevation: 16,
|
||||
onChanged: (String newValue) => {
|
||||
setState(() {
|
||||
selectedType = newValue;
|
||||
})
|
||||
},
|
||||
items: <String>[
|
||||
'Saudi Arabia',
|
||||
'Dubai',
|
||||
].map<DropdownMenuItem<String>>(
|
||||
(String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
value: value,
|
||||
child: Text(value),
|
||||
);
|
||||
}).toList()))),
|
||||
],
|
||||
),
|
||||
MobileNo(controller: mobileNo),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
color: Colors.grey,
|
||||
textColor: Colors.white,
|
||||
child: Text(TranslationBase.of(context).submit),
|
||||
onPressed: () => {},
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
))
|
||||
]),
|
||||
)));
|
||||
}
|
||||
}
|
@ -0,0 +1,162 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:diplomaticquarterapp/routes.dart';
|
||||
|
||||
class LoginType extends StatelessWidget {
|
||||
static int loginType = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).welcome,
|
||||
isShowAppBar: true,
|
||||
body: Padding(
|
||||
padding: EdgeInsets.all(20),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/images/habib-logo.png',
|
||||
height: 80,
|
||||
width: 80,
|
||||
),
|
||||
AppText(
|
||||
TranslationBase.of(context).logintypeRadio,
|
||||
fontSize: SizeConfig.textMultiplier * 3.5,
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => {
|
||||
LoginType.loginType = 1,
|
||||
Navigator.of(context)
|
||||
.pushNamed(LOGIN_PAGE)
|
||||
},
|
||||
child: RoundedContainer(
|
||||
borderColor: Colors.grey,
|
||||
showBorder: true,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(
|
||||
20, 10, 20, 10),
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/images/id_card_icon.png',
|
||||
height: SizeConfig
|
||||
.imageSizeMultiplier *
|
||||
12,
|
||||
width: SizeConfig
|
||||
.imageSizeMultiplier *
|
||||
15,
|
||||
),
|
||||
SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
AppText(
|
||||
TranslationBase.of(context)
|
||||
.nationalID,
|
||||
fontSize:
|
||||
SizeConfig.textMultiplier *
|
||||
2,
|
||||
)
|
||||
],
|
||||
),
|
||||
)))),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => {
|
||||
LoginType.loginType = 2,
|
||||
Navigator.of(context)
|
||||
.pushNamed(LOGIN_PAGE)
|
||||
},
|
||||
child: RoundedContainer(
|
||||
borderColor: Colors.grey,
|
||||
showBorder: true,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(
|
||||
25, 10, 25, 10),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/images/my_file_white_icon.png',
|
||||
height: SizeConfig
|
||||
.imageSizeMultiplier *
|
||||
12,
|
||||
width: SizeConfig
|
||||
.imageSizeMultiplier *
|
||||
15,
|
||||
),
|
||||
SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
AppText(
|
||||
TranslationBase.of(context)
|
||||
.fileNo,
|
||||
fontSize:
|
||||
SizeConfig.textMultiplier *
|
||||
2,
|
||||
)
|
||||
],
|
||||
),
|
||||
))))
|
||||
],
|
||||
),
|
||||
Divider(
|
||||
color: Colors.grey,
|
||||
height: 2,
|
||||
),
|
||||
Center(
|
||||
child: InkWell(
|
||||
onTap: () => {
|
||||
Navigator.of(context)
|
||||
.pushNamed(FORGOT_PASSWORD)
|
||||
},
|
||||
child: AppText(
|
||||
TranslationBase.of(context).forgotPassword,
|
||||
fontSize: SizeConfig.textMultiplier * 3,
|
||||
margin: 10,
|
||||
underline: true)))
|
||||
]),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
color: Colors.grey,
|
||||
textColor: Colors.white,
|
||||
child:
|
||||
Text(TranslationBase.of(context).registerNow),
|
||||
onPressed: () => {
|
||||
Navigator.of(context).pushNamed(
|
||||
REGISTER,
|
||||
)
|
||||
},
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
)));
|
||||
}
|
||||
}
|
@ -0,0 +1,163 @@
|
||||
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/auth/check_paitent_authentication_req.dart';
|
||||
import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/login-type.dart';
|
||||
import 'package:diplomaticquarterapp/providers/auth_provider.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Login extends StatefulWidget {
|
||||
@override
|
||||
_Login createState() => _Login();
|
||||
}
|
||||
|
||||
class _Login extends State<Login> {
|
||||
final util = Utils();
|
||||
final nationalIDorFile = TextEditingController();
|
||||
final int loginType = LoginType.loginType;
|
||||
String mobileNo;
|
||||
String countryCode = '966';
|
||||
bool isButtonDisabled = true;
|
||||
final authService = new AuthProvider();
|
||||
var sharedPref = new AppSharedPreferences();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).login,
|
||||
isShowAppBar: true,
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 10, left: 20, right: 20),
|
||||
height: SizeConfig.realScreenHeight * .8,
|
||||
width: SizeConfig.realScreenWidth,
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: AppText(
|
||||
TranslationBase.of(context).enterNationalId,
|
||||
fontSize: SizeConfig.textMultiplier * 3.5,
|
||||
textAlign: TextAlign.left,
|
||||
)),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
MobileNo(
|
||||
onNumberChange: (value) =>
|
||||
{mobileNo = value, validateForm()},
|
||||
onCountryChange: (value) => countryCode = value),
|
||||
Container(
|
||||
child: TextFields(
|
||||
controller: nationalIDorFile,
|
||||
onChanged: (value) => {validateForm()},
|
||||
prefixIcon: Icon(
|
||||
loginType == 1
|
||||
? Icons.chrome_reader_mode
|
||||
: Icons.receipt,
|
||||
color: Colors.red),
|
||||
padding: EdgeInsets.only(
|
||||
top: 20, bottom: 20, left: 10, right: 10),
|
||||
hintText: loginType == 1
|
||||
? TranslationBase.of(context).nationalID
|
||||
: TranslationBase.of(context).fileNo,
|
||||
))
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
color: isButtonDisabled == true
|
||||
? Colors.grey
|
||||
: Colors.grey[600],
|
||||
textColor: Colors.white,
|
||||
child: Text(TranslationBase.of(context).login),
|
||||
onPressed: () => {this.startLogin()},
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
))
|
||||
]),
|
||||
)));
|
||||
}
|
||||
|
||||
startLogin() {
|
||||
if (isButtonDisabled == false) {
|
||||
checkUserAuthentication();
|
||||
}
|
||||
}
|
||||
|
||||
void validateForm() {
|
||||
if (validateIDBox(nationalIDorFile.text) == true &&
|
||||
mobileNo != null &&
|
||||
util.isSAUDIIDValid(nationalIDorFile.text) == true) {
|
||||
setState(() {
|
||||
isButtonDisabled = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
isButtonDisabled = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
bool validateIDBox(String value) {
|
||||
Pattern pattern = loginIDPattern(); //r'^\d+(?:\.\d+)?$';
|
||||
|
||||
RegExp regex = new RegExp(pattern);
|
||||
return regex.hasMatch(value);
|
||||
}
|
||||
|
||||
String loginIDPattern() {
|
||||
var length = loginType == 1 ? 10 : 7;
|
||||
return "([0-9]{" + length.toString() + "})";
|
||||
}
|
||||
|
||||
checkUserAuthentication() {
|
||||
var request = CheckPatientAuthenticationReq();
|
||||
request.isRegister = false;
|
||||
request.patientMobileNumber = int.parse(mobileNo);
|
||||
request.zipCode = countryCode;
|
||||
request.searchType = this.loginType;
|
||||
request.deviceTypeID = this.loginType;
|
||||
if (this.loginType == 1) {
|
||||
request.patientIdentificationID = this.nationalIDorFile.text;
|
||||
request.patientID = 0;
|
||||
} else {
|
||||
request.patientIdentificationID = '';
|
||||
request.patientID = int.parse(nationalIDorFile.text);
|
||||
}
|
||||
sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request);
|
||||
authService.checkPatientAuthentication(request).then((value) => {
|
||||
if (value.isSMSSent)
|
||||
{
|
||||
sharedPref.setString(LOGIN_TOKEN_ID, value.LogInTokenID),
|
||||
sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request),
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value.IsAuthenticated) {this.checkActivationCode()}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
checkActivationCode() {}
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/login-type.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Register extends StatefulWidget {
|
||||
@override
|
||||
_Register createState() => _Register();
|
||||
}
|
||||
|
||||
class _Register extends State<Register> {
|
||||
final TextEditingController nationalIDorFile = null;
|
||||
final int loginType = LoginType.loginType;
|
||||
final TextEditingController mobileNo = null;
|
||||
var isHijri;
|
||||
|
||||
DateTime selectedDate;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).login,
|
||||
isShowAppBar: true,
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 10, left: 20, right: 20),
|
||||
height: SizeConfig.realScreenHeight * .8,
|
||||
width: SizeConfig.realScreenWidth,
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: AppText(
|
||||
TranslationBase.of(context).enterNationalId,
|
||||
fontSize: SizeConfig.textMultiplier * 3.5,
|
||||
textAlign: TextAlign.left,
|
||||
)),
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
MobileNo(controller: mobileNo),
|
||||
Container(
|
||||
child: TextFields(
|
||||
controller: nationalIDorFile,
|
||||
prefixIcon:
|
||||
Icon(Icons.chrome_reader_mode, color: Colors.red),
|
||||
padding: EdgeInsets.only(
|
||||
top: 20, bottom: 20, left: 10, right: 10),
|
||||
hintText: TranslationBase.of(context).nationalID,
|
||||
)),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Radio(
|
||||
value: 1,
|
||||
groupValue: isHijri,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
isHijri = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
Text(TranslationBase.of(context).hijriDate),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Radio(
|
||||
value: 0,
|
||||
groupValue: isHijri,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
isHijri = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
Text(TranslationBase.of(context).gregorianDate),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton.icon(
|
||||
onPressed: () => {_selectDate(context)},
|
||||
icon: Icon(Icons.date_range),
|
||||
label: Text(selectedDate != null
|
||||
? "${selectedDate.toLocal()}".split(' ')[0]
|
||||
: TranslationBase.of(context).dob)))
|
||||
])
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
color: Colors.grey,
|
||||
textColor: Colors.white,
|
||||
child: Text(TranslationBase.of(context).login),
|
||||
onPressed: () => {},
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
))
|
||||
]),
|
||||
)));
|
||||
}
|
||||
|
||||
Future<Null> _selectDate(BuildContext context) async {
|
||||
final DateTime picked = await showDatePicker(
|
||||
context: context,
|
||||
initialDate: DateTime.now(),
|
||||
firstDate: DateTime(2015, 8),
|
||||
lastDate: DateTime(2101));
|
||||
if (picked != null && picked != selectedDate)
|
||||
setState(() {
|
||||
selectedDate = picked;
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:diplomaticquarterapp/routes.dart';
|
||||
|
||||
class WelcomeLogin extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).welcome,
|
||||
isShowAppBar: true,
|
||||
body: Padding(
|
||||
padding: EdgeInsets.all(20),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/images/habib-logo.png',
|
||||
height: 80,
|
||||
width: 80,
|
||||
),
|
||||
Text(
|
||||
TranslationBase.of(context).welcome,
|
||||
style: TextStyle(fontSize: 30),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
Text(
|
||||
TranslationBase.of(context).welcomeText,
|
||||
style: TextStyle(fontSize: 24),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
Text(
|
||||
TranslationBase.of(context).welcomeText2,
|
||||
style: TextStyle(fontSize: 24),
|
||||
textAlign: TextAlign.left,
|
||||
)
|
||||
]),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
color: Colors.red[900],
|
||||
textColor: Colors.white,
|
||||
child: Text(TranslationBase.of(context).yes),
|
||||
onPressed: () => {
|
||||
Navigator.of(context).pushNamed(
|
||||
LOGIN_TYPE,
|
||||
)
|
||||
},
|
||||
))
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: RaisedButton(
|
||||
child: Text(TranslationBase.of(context).no),
|
||||
onPressed: () => {
|
||||
Navigator.of(context).pushNamed(
|
||||
REGISTER,
|
||||
)
|
||||
},
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
)));
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
import 'package:diplomaticquarterapp/config/config.dart';
|
||||
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/auth/check_paitent_authentication_req.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/auth/select_device_imei_res.dart';
|
||||
import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
// SharedPreferences sharedPref = new SharedPreferences();
|
||||
enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED }
|
||||
AppSharedPreferences sharedPref = new AppSharedPreferences();
|
||||
|
||||
const String INSERT_DEVICE_IMEI = '/Patients.svc/REST/Patient_INSERTDeviceIMEI';
|
||||
const String SELECT_DEVICE_IMEI =
|
||||
'/Patients.svc/REST/Patient_SELECTDeviceIMEIbyIMEI';
|
||||
const String CHECK_PATIENT_AUTH =
|
||||
'/Authentication.svc/REST/CheckPatientAuthentication';
|
||||
|
||||
class AuthProvider with ChangeNotifier {
|
||||
bool isLogin = false;
|
||||
bool isLoading = true;
|
||||
AuthProvider() {
|
||||
getUserAuthentication();
|
||||
}
|
||||
|
||||
void getUserAuthentication() async {
|
||||
Map profile = await sharedPref.getObject(USER_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<dynamic> login(UserModel userInfo) async {
|
||||
// try {
|
||||
// dynamic localRes;
|
||||
|
||||
// await BaseAppClient.post(LOGIN_URL,
|
||||
// onSuccess: (dynamic response, int statusCode) {
|
||||
// localRes = response;
|
||||
// }, onFailure: (String error, int statusCode) {
|
||||
// throw error;
|
||||
// }, body: userInfo.toJson());
|
||||
|
||||
// return Future.value(localRes);
|
||||
// } catch (error) {
|
||||
// print(error);
|
||||
// throw error;
|
||||
// }
|
||||
// }
|
||||
|
||||
Future<dynamic> insertDeviceImei(imei) async {
|
||||
try {
|
||||
dynamic localRes;
|
||||
|
||||
await new BaseAppClient().post(INSERT_DEVICE_IMEI,
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
localRes = response;
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
throw error;
|
||||
}, body: imei);
|
||||
return Future.value(localRes);
|
||||
} catch (error) {
|
||||
print(error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
Future<SelectDeviceIMEIRES> selectDeviceImei(imei) async {
|
||||
try {
|
||||
dynamic localRes;
|
||||
await new BaseAppClient().post(SELECT_DEVICE_IMEI,
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
localRes = response;
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
throw error;
|
||||
}, body: imei);
|
||||
return Future.value(localRes);
|
||||
} catch (error) {
|
||||
print(error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> checkPatientAuthentication(
|
||||
CheckPatientAuthenticationReq request) async {
|
||||
request.versionID = VERSION_ID;
|
||||
request.channel = CHANNEL;
|
||||
request.iPAdress = IP_ADDRESS;
|
||||
request.generalid = GENERAL_ID;
|
||||
request.languageID = 2;
|
||||
request.patientOutSA = request.zipCode == '966' ? 0 : 1;
|
||||
try {
|
||||
dynamic localRes;
|
||||
await new BaseAppClient().post(CHECK_PATIENT_AUTH,
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
localRes = response;
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
throw error;
|
||||
}, body: request.toJson());
|
||||
return Future.value(localRes);
|
||||
} catch (error) {
|
||||
print(error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/forgot-password.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/welcome.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/login-type.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/login.dart';
|
||||
import 'package:diplomaticquarterapp/pages/login/register.dart';
|
||||
|
||||
const String INIT_ROUTE = '/';
|
||||
const String ROOT = 'root';
|
||||
const String HOME = '/';
|
||||
const String LOGIN = 'login';
|
||||
const String WELCOME_LOGIN = 'welcome-login';
|
||||
const String LOGIN_TYPE = 'login-type';
|
||||
const String LOGIN_PAGE = 'login-page';
|
||||
const String FORGOT_PASSWORD = 'forgot-password';
|
||||
const String REGISTER = 'register';
|
||||
var routes = {
|
||||
// ROOT: (_) => RootPage(),
|
||||
HOME: (_) => LandingPage(),
|
||||
WELCOME_LOGIN: (_) => WelcomeLogin(),
|
||||
LOGIN_TYPE: (_) => LoginType(),
|
||||
LOGIN_PAGE: (_) => Login(),
|
||||
FORGOT_PASSWORD: (_) => ForgotPassword(),
|
||||
REGISTER: (_) => Register()
|
||||
};
|
@ -0,0 +1,88 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// OWNER : Ibrahim albitar
|
||||
// DATE : 05-04-2020
|
||||
// DESCRIPTION : Custom widget for rounded container and custom decoration
|
||||
|
||||
class RoundedContainer extends StatefulWidget {
|
||||
final double width;
|
||||
final double height;
|
||||
final double raduis;
|
||||
final Color backgroundColor;
|
||||
final double margin;
|
||||
final double elevation;
|
||||
final bool showBorder;
|
||||
final Color borderColor;
|
||||
final bool customCornerRaduis;
|
||||
final double topLeft;
|
||||
final double bottomRight;
|
||||
final double topRight;
|
||||
final double bottomLeft;
|
||||
final Widget child;
|
||||
final double borderWidth;
|
||||
|
||||
RoundedContainer(
|
||||
{@required this.child,
|
||||
this.width,
|
||||
this.height,
|
||||
this.raduis = 10,
|
||||
this.backgroundColor = Colors.white,
|
||||
this.margin = 10,
|
||||
this.elevation = 1,
|
||||
this.showBorder = false,
|
||||
this.borderColor = Colors.red,
|
||||
this.customCornerRaduis = false,
|
||||
this.topLeft = 0,
|
||||
this.topRight = 0,
|
||||
this.bottomRight = 0,
|
||||
this.bottomLeft = 0,
|
||||
this.borderWidth = 1});
|
||||
|
||||
@override
|
||||
_RoundedContainerState createState() => _RoundedContainerState();
|
||||
}
|
||||
|
||||
class _RoundedContainerState extends State<RoundedContainer> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
margin: EdgeInsets.all(widget.margin),
|
||||
decoration: widget.showBorder == true
|
||||
? BoxDecoration(
|
||||
color: Theme.of(context).primaryColor,
|
||||
border: Border.all(
|
||||
color: widget.borderColor, width: widget.borderWidth),
|
||||
borderRadius: widget.customCornerRaduis
|
||||
? BorderRadius.only(
|
||||
topLeft: Radius.circular(widget.topLeft),
|
||||
topRight: Radius.circular(widget.topRight),
|
||||
bottomRight: Radius.circular(widget.bottomRight),
|
||||
bottomLeft: Radius.circular(widget.bottomLeft))
|
||||
: BorderRadius.circular(widget.raduis),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
spreadRadius: 10,
|
||||
blurRadius: 5,
|
||||
offset: Offset(0, 5), // changes position of shadow
|
||||
),
|
||||
])
|
||||
: null,
|
||||
child: Card(
|
||||
margin: EdgeInsets.all(0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: widget.customCornerRaduis
|
||||
? BorderRadius.only(
|
||||
topLeft: Radius.circular(widget.topLeft),
|
||||
topRight: Radius.circular(widget.topRight),
|
||||
bottomRight: Radius.circular(widget.bottomRight),
|
||||
bottomLeft: Radius.circular(widget.bottomLeft))
|
||||
: BorderRadius.circular(widget.raduis),
|
||||
),
|
||||
color: widget.backgroundColor,
|
||||
child: widget.child,
|
||||
));
|
||||
}
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// OWNER : Ibrahim albitar
|
||||
// DATE : 12-04-2020
|
||||
// DESCRIPTION : Customization for Texts in app
|
||||
|
||||
class MobileNo extends StatefulWidget {
|
||||
final bool disabled;
|
||||
// final String data;
|
||||
final List<Countries> countries = [
|
||||
new Countries(name: 'Saudi Arabia', code: '966'),
|
||||
new Countries(name: 'Dubai', code: '971'),
|
||||
];
|
||||
final double margin;
|
||||
final double marginTop;
|
||||
final double marginRight;
|
||||
final double marginBottom;
|
||||
final double marginLeft;
|
||||
final TextEditingController controller;
|
||||
final Function onNumberChange;
|
||||
final Function onCountryChange;
|
||||
MobileNo(
|
||||
{this.disabled = false,
|
||||
this.marginTop = 0,
|
||||
this.marginRight = 0,
|
||||
this.marginBottom = 0,
|
||||
this.controller,
|
||||
this.marginLeft = 0,
|
||||
this.onNumberChange,
|
||||
this.onCountryChange,
|
||||
this.margin = 0});
|
||||
|
||||
@override
|
||||
_MobileNo createState() => _MobileNo();
|
||||
}
|
||||
|
||||
class _MobileNo extends State<MobileNo> {
|
||||
var _selectedType = '966';
|
||||
String countryCode = '966';
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Visibility(
|
||||
child: Column(children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
// add Expanded to have your dropdown button fill remaining space
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(10),
|
||||
child: DropdownButtonHideUnderline(
|
||||
child: DropdownButton(
|
||||
isExpanded: true,
|
||||
value: _selectedType,
|
||||
iconSize: 40,
|
||||
elevation: 16,
|
||||
onChanged: (value) => {
|
||||
widget.onCountryChange(value),
|
||||
setState(() {
|
||||
countryCode = value;
|
||||
_selectedType = value;
|
||||
})
|
||||
},
|
||||
items: widget.countries
|
||||
.map<DropdownMenuItem<String>>((Countries value) {
|
||||
return DropdownMenuItem<String>(
|
||||
value: value.code,
|
||||
child: Text(value.name),
|
||||
);
|
||||
}).toList())))),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
padding: EdgeInsets.all(5),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: Colors.grey),
|
||||
borderRadius: BorderRadius.circular(10)),
|
||||
child: Row(children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Icon(
|
||||
Icons.phone,
|
||||
color: Colors.red,
|
||||
)),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Text(
|
||||
countryCode,
|
||||
overflow: TextOverflow.clip,
|
||||
)),
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Container(
|
||||
margin: widget.margin != null
|
||||
? EdgeInsets.all(widget.margin)
|
||||
: EdgeInsets.only(
|
||||
top: widget.marginTop,
|
||||
right: widget.marginRight,
|
||||
bottom: widget.marginBottom,
|
||||
left: widget.marginLeft),
|
||||
child: TextField(
|
||||
controller: widget.controller,
|
||||
keyboardType: TextInputType.phone,
|
||||
// onChanged: (value) {
|
||||
// widget.controller.text = countryCode;
|
||||
// },
|
||||
onChanged: (value) => widget.onNumberChange(value),
|
||||
decoration: InputDecoration(
|
||||
border: InputBorder.none, hintText: '5xxxxxxxx'),
|
||||
),
|
||||
),
|
||||
)
|
||||
]),
|
||||
)
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
||||
class Countries {
|
||||
final String name;
|
||||
final String code;
|
||||
Countries({this.name, this.code});
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// OWNER : Ibrahim albitar
|
||||
// DATE : 12-04-2020
|
||||
// DESCRIPTION : Customization for Texts in app
|
||||
|
||||
class AppText extends StatefulWidget {
|
||||
final String data;
|
||||
final Color color;
|
||||
final FontWeight fontWeight;
|
||||
final double fontSize;
|
||||
final String fontFamily;
|
||||
final double margin;
|
||||
final double marginTop;
|
||||
final double marginRight;
|
||||
final double marginBottom;
|
||||
final double marginLeft;
|
||||
final bool visibility;
|
||||
final TextAlign textAlign;
|
||||
final Color backGroundcolor;
|
||||
final bool underline;
|
||||
AppText(this.data,
|
||||
{this.color = Colors.black,
|
||||
this.fontWeight = FontWeight.normal,
|
||||
this.fontSize,
|
||||
this.fontFamily = 'WorkSans',
|
||||
this.margin,
|
||||
this.marginTop = 0,
|
||||
this.marginRight = 0,
|
||||
this.marginBottom = 0,
|
||||
this.marginLeft = 0,
|
||||
this.visibility = true,
|
||||
this.textAlign,
|
||||
this.underline = false,
|
||||
this.backGroundcolor = Colors.white});
|
||||
|
||||
@override
|
||||
_AppTextState createState() => _AppTextState();
|
||||
}
|
||||
|
||||
class _AppTextState extends State<AppText> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Visibility(
|
||||
visible: widget.visibility,
|
||||
child: Container(
|
||||
margin: widget.margin != null
|
||||
? EdgeInsets.all(widget.margin)
|
||||
: EdgeInsets.only(
|
||||
top: widget.marginTop,
|
||||
right: widget.marginRight,
|
||||
bottom: widget.marginBottom,
|
||||
left: widget.marginLeft),
|
||||
child: Text(
|
||||
widget.data,
|
||||
textAlign: widget.textAlign,
|
||||
overflow: TextOverflow.clip,
|
||||
style: TextStyle(
|
||||
color: widget.color,
|
||||
fontWeight: widget.fontWeight,
|
||||
fontSize: widget.fontSize ?? (SizeConfig.textMultiplier * 2),
|
||||
fontFamily: widget.fontFamily,
|
||||
decoration: widget.underline == true
|
||||
? TextDecoration.underline
|
||||
: TextDecoration.none
|
||||
// backgroundColor:widget.backGroundcolor
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue