Merge branch 'development_new_design_2.0' into haroon-new-design

# Conflicts:
#	lib/config/localized_values.dart
merge-update-with-lab-changes
haroon amjad 4 years ago
commit e1f5eb8b83

@ -1500,4 +1500,9 @@ const Map localizedValues = {
"invoiceDetails": {"en": "Invoice Details", "ar": "تفاصيل الفاتورة"},
"appoDetails": {"en": "Appointment Details", "ar": "تفاصيل الموعد"},
"appoPaymentConfirm": {"en": "Are you sure you Want to make payment for this appointment?", "ar": "هل أنت متأكد من أنك تريد سداد هذا الموعد؟"},
"selectLanguage": { "en": "Please select any language:", "ar": ":الرجاء تحديد أي لغة" },
"recAlert": { "en": "How do you want to receive alerts?", "ar": "كيف تريد تلقي التنبيهات؟" },
"modesBelow": { "en": "Please select the modes below:", "ar": ":الرجاء تحديد الأوضاع أدناه" },
"prefferedMode": { "en": "Please select the preferred mode below:", "ar": ":الرجاء تحديد الوضع المفضل أدناه" },
"permissionsBellow": { "en": "Please allow the permissions below:", "ar": ":الرجاء السماح الأذونات أدناه" },
};

@ -9,14 +9,19 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_p
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/H2O_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart';
import '../../../locator.dart';
class H2OViewModel extends BaseViewModel {
H2OService _h2OService = locator<H2OService>();
List<charts.Series> userProgressForWeekDataSeries;
List<charts.Series> userProgressForMonthDataSeries;
//
// List<charts.Series> userProgressForWeekDataSeries;
List<LineChartModel> userProgressForWeekDataSeries;
List<LineChartModel> userProgressForMonthDataSeries;
// List<charts.Series> userProgressForMonthDataSeries;
UserDetailModel get userDetail => _h2OService.userDetailModel;
@ -71,7 +76,8 @@ class H2OViewModel extends BaseViewModel {
error = _h2OService.error;
setState(ViewState.Error);
} else {
userProgressForWeekDataSeries = createUserProgressForWeekDataSeries();
// userProgressForWeekDataSeries = createUserProgressForWeekDataSeries();
userProgressForWeekDataSeries = createUserProgressForWeekDataSeriesNew();
setState(ViewState.Idle);
}
}
@ -83,7 +89,7 @@ class H2OViewModel extends BaseViewModel {
error = _h2OService.error;
setState(ViewState.Error);
} else {
userProgressForMonthDataSeries = createUserProgressForMonthDataSeries();
userProgressForMonthDataSeries = createUserProgressForMonthDataSeriesNew();
setState(ViewState.Idle);
}
}
@ -113,6 +119,23 @@ class H2OViewModel extends BaseViewModel {
];
}
List<LineChartModel> createUserProgressForWeekDataSeriesNew() {
List<LineChartModel> list = [];
_h2OService.userProgressForWeekDataList.forEach((UserProgressForWeekDataModel data) {
list.add(new LineChartModel(data.dayName, data.percentageConsumed));
});
return list;
}
List<LineChartModel> createUserProgressForMonthDataSeriesNew() {
List<LineChartModel> list = [];
_h2OService.userProgressForMonthDataList.forEach((UserProgressForMonthDataModel data) {
list.add(new LineChartModel(data.monthName, data.percentageConsumed));
});
return list;
}
List<charts.Series<ChartSeries, String>> createUserProgressForMonthDataSeries() {
List<ChartSeries> globalData = [];
_h2OService.userProgressForMonthDataList.forEach((UserProgressForMonthDataModel data) {

@ -21,6 +21,7 @@ class DashboardViewModel extends BaseViewModel {
if (isLogin && _vitalSignService.weightKg.isEmpty) {
setState(ViewState.Busy);
await _vitalSignService.getPatientRadOrders();
if (_vitalSignService.hasError) {
error = _vitalSignService.error;
setState(ViewState.ErrorLocal);

@ -244,10 +244,7 @@ class _AllHabibMedicalServiceState extends State<AllHabibMedicalService> {
imageLocation: 'assets/images/emergency_service_image.png',
title: TranslationBase.of(context).emergencyService,
),
ServicesContainer(
onTap: () => getPharmacyToken(),
imageLocation: 'assets/images/pharmacy_logo.png',
title: TranslationBase.of(context).pharmacy),
ServicesContainer(onTap: () => getPharmacyToken(), imageLocation: 'assets/images/pharmacy_logo.png', title: TranslationBase.of(context).pharmacy),
ServicesContainer(
onTap: () => Navigator.push(
context,
@ -332,9 +329,7 @@ class _AllHabibMedicalServiceState extends State<AllHabibMedicalService> {
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: SmartWatchInstructions()
),
FadePage(page: SmartWatchInstructions()),
),
imageLocation: 'assets/images/new-design/smartwatch_icon.png',
title: TranslationBase.of(context).smartWatches,

@ -1,5 +1,6 @@
import 'dart:ui';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
@ -8,8 +9,12 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h20_setting
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/month_page.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/today_page.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/week_page.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/medical_profile_page_new.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
@ -104,6 +109,39 @@ class _H2OPageState extends State<H2OPage> with SingleTickerProviderStateMixin {
)
],
),
bottomNavigationBar: BottomNavBar(
changeIndex: (index) {
if (index == 0) {
IS_VOICE_COMMAND_CLOSED = false;
} else if (index == 1) {
Navigator.push(
context,
FadePage(
page: AppScaffold(
appBarTitle: TranslationBase.of(context).medicalProfile,
isShowAppBar: true,
showHomeAppBarIcon: false,
appBarIcons: [
IconButton(
icon: Image.asset("assets/images/new-design/setting_gear_icon.png"),
color: Colors.white,
onPressed: () => Navigator.of(context).pushNamed(
SETTINGS,
),
),
],
body: MedicalProfilePageNew())));
} else if (index == 2) {
Navigator.of(context).pushNamedAndRemoveUntil(HOME, (Route<dynamic> route) => false);
} else if (index == 3) {
Navigator.of(context).pushNamed(MY_FAMILIY);
} else if (index == 4) {
Navigator.push(context, FadePage(page: ToDo(isShowAppBar: false)));
}
},
showHomeIcon: true,
index: 0,
),
),
);
}

@ -6,10 +6,11 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_bar_chart.dart';
import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart';
class MonthPage extends StatelessWidget {
@override
@ -21,37 +22,39 @@ class MonthPage extends StatelessWidget {
isShowAppBar: false,
appBarTitle: TranslationBase.of(context).h2o,
baseViewModel: model,
body: Padding(
padding: EdgeInsets.all(8.0),
child: ListView(
children: [
Center(
child: Text(
TranslationBase.of(context).waterConsumedInMonth,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 20.0, color: Colors.black87),
),
),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 10,
width: 40,
color: Colors.blue,
body: SingleChildScrollView(
padding: EdgeInsets.all(21),
physics: BouncingScrollPhysics(),
child: (model.userProgressForMonthDataSeries ?? []).isEmpty
? getNoDataWidget(context)
: Container(
padding: EdgeInsets.fromLTRB(16, 14, 16, 14),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
blurRadius: 27,
offset: Offset(0, -3),
),
],
),
SizedBox(width: 8),
Text(
TranslationBase.of(context).waterConsumedInMonth,
style: TextStyle(fontSize: 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
TranslationBase.of(context).waterConsumedInMonth,
style: TextStyle(fontSize: 16.0, color: Color(0xff2E303A), fontWeight: FontWeight.w600, letterSpacing: -0.64),
),
SizedBox(height: 24),
CustomLineChart(model.userProgressForMonthDataSeries, projectViewModel.isArabic),
],
),
],
),
// SizedBox(height: 8),
AppBarChart(seriesList: model.userProgressForMonthDataSeries, isArabic: projectViewModel.isArabic),
],
),
),
),
),
);

@ -1,12 +1,10 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_bar_chart.dart';
import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/charts/custom_line_chart.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -21,37 +19,39 @@ class WeekPage extends StatelessWidget {
isShowAppBar: false,
appBarTitle: TranslationBase.of(context).h2o,
baseViewModel: model,
body: Padding(
padding: EdgeInsets.all(8.0),
child: ListView(
children: [
Center(
child: Text(
TranslationBase.of(context).waterConsumedInWeek,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 20.0, color: Colors.black87),
),
),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 10,
width: 40,
color: Colors.blue,
body: SingleChildScrollView(
padding: EdgeInsets.all(21),
physics: BouncingScrollPhysics(),
child: (model.userProgressForWeekDataSeries ?? []).isEmpty
? getNoDataWidget(context)
: Container(
padding: EdgeInsets.fromLTRB(16, 14, 16, 14),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
blurRadius: 27,
offset: Offset(0, -3),
),
],
),
SizedBox(width: 8),
Text(
TranslationBase.of(context).waterConsumedInWeek,
style: TextStyle(fontSize: 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
TranslationBase.of(context).waterConsumedInWeek,
style: TextStyle(fontSize: 16.0, color: Color(0xff2E303A), fontWeight: FontWeight.w600, letterSpacing: -0.64),
),
SizedBox(height: 24),
CustomLineChart(model.userProgressForWeekDataSeries, projectViewModel.isArabic),
],
),
],
),
// SizedBox(height: 8),
AppBarChart(seriesList: model.userProgressForWeekDataSeries,isArabic: projectViewModel.isArabic),
],
),
),
),
),
);

@ -531,14 +531,14 @@ class _MyFamily extends State<MyFamily> with TickerProviderStateMixin {
result = list.CheckActivationCode.fromJson(result);
var familyFile = await sharedPref.getObject(FAMILY_FILE);
var bloodType = await sharedPref.getString(BLOOD_TYPE);
var mainUser = await sharedPref.getObject(MAIN_USER);
var loginType = await sharedPref.getInt(LAST_LOGIN);
this.sharedPref.clear();
if (mainUser["PatientID"] != result.list.patientID) {
result.list.isFamily = true;
}
this.sharedPref.setString(BLOOD_TYPE, bloodType);
this.sharedPref.setString(APP_LANGUAGE, currentLang);
this.sharedPref.setInt(LAST_LOGIN, loginType);
this.sharedPref.setObject(MAIN_USER, mainUser);

@ -102,13 +102,18 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
LocationUtils locationUtils;
Future<bool> onWillPop() {
DateTime now = DateTime.now();
if (currentBackPressTime == null || now.difference(currentBackPressTime) > Duration(seconds: 2)) {
currentBackPressTime = now;
AppToast.showToast(message: TranslationBase.of(context).pressAgain);
if (currentTab != 0) {
changeCurrentTab(0);
return Future.value(false);
} else {
DateTime now = DateTime.now();
if (currentBackPressTime == null || now.difference(currentBackPressTime) > Duration(seconds: 2)) {
currentBackPressTime = now;
AppToast.showToast(message: TranslationBase.of(context).pressAgain);
return Future.value(false);
}
return Future.value(true);
}
return Future.value(true);
}
changeCurrentTab(int tab) {
@ -610,21 +615,28 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
changeCurrentTab(1);
},
),
MedicalProfilePageNew(onTap: (){
changeCurrentTab(0);
},),
Search(onBackClick: (){
changeCurrentTab(0);
},),
MedicalProfilePageNew(
onTap: () {
changeCurrentTab(0);
},
),
Search(
onBackClick: () {
changeCurrentTab(0);
},
),
MyFamily(
isAppbarVisible: false,
onBackClick: () {
changeCurrentTab(0);
},
),
ToDo(isShowAppBar: true,onBackClick: (){
changeCurrentTab(0);
},),
ToDo(
isShowAppBar: true,
onBackClick: () {
changeCurrentTab(0);
},
),
], // Please do not remove the BookingOptions from this array
),
RobotIcon()

@ -536,8 +536,7 @@ class _ConfirmLogin extends State<ConfirmLogin> {
sharedPref.remove(FAMILY_FILE),
result.list.isFamily = false,
userData = result.list,
// sharedPref.setString(
// BLOOD_TYPE, result['PatientBloodType']),
sharedPref.setString(BLOOD_TYPE, result.patientBloodType),
authenticatedUserObject.user = result.list,
projectViewModel.setPrivilege(privilegeList: res),
sharedPref.setObject(MAIN_USER, result.list),

@ -308,7 +308,7 @@ class _Login extends State<Login> {
projectViewModel.setPrivilege(privilegeList: result);
result = CheckActivationCode.fromJson(result);
result.list.isFamily = false;
// this.sharedPref.setString(BLOOD_TYPE, result['PatientBloodType']),
this.sharedPref.setString(BLOOD_TYPE, result.patientBloodType);
this.sharedPref.setObject(USER_PROFILE, result.list);
this.sharedPref.setObject(MAIN_USER, result.list);
this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID);

@ -67,70 +67,38 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
return BaseView<MyBalanceViewModel>(
onModelReady: (model) => model.getHospitals(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
imagesInfo: imagesInfo,
appBarTitle: TranslationBase.of(context).advancePayment,
description: TranslationBase.of(context).infoAdvancePayment,
showNewAppBarTitle: true,
showNewAppBar: true,
backgroundColor: CustomColors.appBackgroudGreyColor,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
TranslationBase.of(context).advancePaymentLabel,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectBeneficiaryDialog(model),
child: Container(
padding: EdgeInsets.all(8),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getBeneficiaryType(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
Icon(Icons.arrow_drop_down)
],
isShowAppBar: true,
imagesInfo: imagesInfo,
appBarTitle: TranslationBase.of(context).advancePayment,
description: TranslationBase.of(context).infoAdvancePayment,
showNewAppBarTitle: true,
showNewAppBar: true,
backgroundColor: CustomColors.appBackgroudGreyColor,
body: Column(
children: [
Expanded(
child: SingleChildScrollView(
padding: EdgeInsets.all(21),
physics: BouncingScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
TranslationBase.of(context).advancePaymentLabel,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
),
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
InkWell(
onTap: () {
GifLoaderDialogUtils.showMyDialog(context);
model.getFamilyFiles().then((value) {
GifLoaderDialogUtils.hideDialog(context);
confirmSelectFamilyDialog(model.getAllSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList);
});
},
onTap: () => confirmSelectBeneficiaryDialog(model),
child: Container(
padding: EdgeInsets.all(12),
padding: EdgeInsets.all(8),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
@ -138,42 +106,102 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getFamilyMembersName(),
getBeneficiaryType(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
Icon(Icons.arrow_drop_down),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).fileNumber,
controller: _fileTextController,
readOnly: beneficiaryType == BeneficiaryType.OtherAccount ? false : true,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
InkWell(
onTap: () {
GifLoaderDialogUtils.showMyDialog(context);
model.getFamilyFiles().then((value) {
GifLoaderDialogUtils.hideDialog(context);
confirmSelectFamilyDialog(model.getAllSharedRecordsByStatusResponse.getAllSharedRecordsByStatusList);
});
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getFamilyMembersName(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
Icon(Icons.arrow_drop_down),
],
),
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).fileNumber,
controller: _fileTextController,
readOnly: beneficiaryType == BeneficiaryType.OtherAccount ? false : true,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
InkWell(
onTap: () {
if (_fileTextController.text.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
model.getPatientInfoByPatientID(id: _fileTextController.text).then((value) {
GifLoaderDialogUtils.hideDialog(context);
confirmSelectPatientDialog(model.patientInfoList);
});
} else
AppToast.showErrorToast(message: 'Please Enter The File Number');
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getPatientName(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
Icon(Icons.arrow_drop_down),
],
),
),
),
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
InkWell(
onTap: () {
if (_fileTextController.text.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
model.getPatientInfoByPatientID(id: _fileTextController.text).then((value) {
GifLoaderDialogUtils.hideDialog(context);
confirmSelectPatientDialog(model.patientInfoList);
});
} else
AppToast.showErrorToast(message: 'Please Enter The File Number');
},
onTap: () => confirmSelectHospitalDialog(model.hospitals),
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
@ -183,7 +211,7 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getPatientName(),
getHospitalName(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
@ -195,132 +223,114 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
),
),
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectHospitalDialog(model.hospitals),
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
getHospitalName(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.46,
),
),
Icon(Icons.arrow_drop_down),
],
),
SizedBox(
height: 12,
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).amount,
keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true),
onChanged: (value) {
setState(() {
amount = value;
});
},
),
SizedBox(
height: 12,
),
if (model.user != null)
NewTextFields(
hintText: TranslationBase.of(context).depositorEmail,
initialValue: model.user.emailAddress,
hintText: TranslationBase.of(context).amount,
keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true),
onChanged: (value) {
email = value;
setState(() {
amount = value;
});
},
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).notes,
controller: _notesTextController,
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.15,
)
],
SizedBox(
height: 12,
),
if (model.user != null)
NewTextFields(
hintText: TranslationBase.of(context).depositorEmail,
initialValue: model.user.emailAddress,
onChanged: (value) {
email = value;
},
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).notes,
controller: _notesTextController,
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.15,
)
],
),
),
),
),
bottomSheet: Container(
width: double.infinity,
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(12),
child: DefaultButton(
TranslationBase.of(context).submit,
(amount.isEmpty || _fileTextController.text.isEmpty || _selectedHospital == null) ? null :
() {
var mobileNum;
var patientName;
Container(
color: Colors.white,
padding: EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21),
child: DefaultButton(
TranslationBase.of(context).submit,
(amount.isEmpty || _fileTextController.text.isEmpty || _selectedHospital == null)
? null
: () {
var mobileNum;
var patientName;
if (beneficiaryType == BeneficiaryType.MyFamilyFiles) {
mobileNum = selectedPatientFamily.mobileNumber;
patientName = selectedPatientFamily.patientName;
}
if (beneficiaryType == BeneficiaryType.MyAccount) {
mobileNum = model.user.mobileNumber;
patientName = model.user.firstName;
}
if (beneficiaryType == BeneficiaryType.MyFamilyFiles) {
mobileNum = selectedPatientFamily.mobileNumber;
patientName = selectedPatientFamily.patientName;
}
if (beneficiaryType == BeneficiaryType.OtherAccount) {
mobileNum = _selectedPatientInfo.mobileNumber;
patientName = _selectedPatientInfo.fullName;
}
if (beneficiaryType == BeneficiaryType.MyAccount) {
mobileNum = model.user.mobileNumber;
patientName = model.user.firstName;
}
advanceModel.fileNumber = _fileTextController.text;
advanceModel.hospitalsModel = _selectedHospital;
advanceModel.note = _notesTextController.text;
advanceModel.email = email ?? model.user.emailAddress;
advanceModel.amount = amount;
advanceModel.mobileNumber = mobileNum;
advanceModel.patientName = patientName;
GifLoaderDialogUtils.showMyDialog(context);
model.getPatientInfoByPatientIDAndMobileNumber(advanceModel).then((value) {
GifLoaderDialogUtils.hideDialog(context);
if (model.state != ViewState.Error && model.state != ViewState.ErrorLocal) {
Utils.hideKeyboard(context);
Navigator.push(context, FadePage(page: PaymentMethod(
onSelectedMethod: (String metohd) {
setState(() {});
if (beneficiaryType == BeneficiaryType.OtherAccount) {
mobileNum = _selectedPatientInfo.mobileNumber;
patientName = _selectedPatientInfo.fullName;
}
))).then(
(value) {
Navigator.push(
context,
FadePage(
page: ConfirmPaymentPage(
advanceModel: advanceModel,
selectedPaymentMethod: value,
patientInfoAndMobileNumber: model.patientInfoAndMobileNumber,
authenticatedUser: authUser,
),
),
);
advanceModel.fileNumber = _fileTextController.text;
advanceModel.hospitalsModel = _selectedHospital;
advanceModel.note = _notesTextController.text;
advanceModel.email = email ?? model.user.emailAddress;
advanceModel.amount = amount;
advanceModel.mobileNumber = mobileNum;
advanceModel.patientName = patientName;
GifLoaderDialogUtils.showMyDialog(context);
model.getPatientInfoByPatientIDAndMobileNumber(advanceModel).then((value) {
GifLoaderDialogUtils.hideDialog(context);
if (model.state != ViewState.Error && model.state != ViewState.ErrorLocal) {
Utils.hideKeyboard(context);
Navigator.push(
context,
FadePage(
page: PaymentMethod(onSelectedMethod: (String metohd) {
setState(() {});
}),
),
).then(
(value) {
Navigator.push(
context,
FadePage(
page: ConfirmPaymentPage(
advanceModel: advanceModel,
selectedPaymentMethod: value,
patientInfoAndMobileNumber: model.patientInfoAndMobileNumber,
authenticatedUser: authUser,
),
),
);
},
);
}
});
},
);
}
});
},
disabledColor: Colors.grey,
color: Color(0xffD02127),
textColor: Colors.white,
disabledColor: Color(0xffEAEAEA),
),
),
)),
],
),
),
);
}

@ -42,6 +42,7 @@ class VitalSignItem extends StatelessWidget {
maxLines: 1,
style: TextStyle(
fontSize: 15,
color: Color(0xff2B353E),
letterSpacing: -0.45,
fontWeight: FontWeight.bold,
),
@ -64,7 +65,7 @@ class VitalSignItem extends StatelessWidget {
height: MediaQuery.of(context).size.width / 16,
child: SvgPicture.asset(
vitalSign.icon,
color: Colors.black,
color: Color(0xff2E303A),
),
),
],

@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/charts/show_chart.dart';
import 'package:diplomaticquarterapp/widgets/charts/sync_fu_chart.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -49,15 +50,19 @@ class _VitalSingChartAndDetialsState extends State<VitalSingChartAndDetials> {
return SingleChildScrollView(
child: Column(
children: <Widget>[
Card(
shape: cardRadius(12),
elevation: 1,
margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
child: ShowChart(
title: widget.name,
timeSeries: timeSeriesData,
indexes: timeSeriesData.length ~/ 5.5,
horizontalInterval: 8,
Container(
height: 400,
child: Card(
shape: cardRadius(12),
elevation: 1,
margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
child: ShowChart(
title: widget.name,
timeSeries: timeSeriesData,
indexes: timeSeriesData.length ~/ 5.5,
horizontalInterval: 8,
),
// child: SyncFuChart(),
),
),
Card(

@ -1,9 +1,11 @@
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/services/permission/permission_service.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/theme/theme_notifier.dart';
import 'package:diplomaticquarterapp/theme/theme_value.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -16,8 +18,7 @@ class GeneralSettings extends StatefulWidget {
_GeneralSettings createState() => _GeneralSettings();
}
class _GeneralSettings extends State<GeneralSettings>
with TickerProviderStateMixin {
class _GeneralSettings extends State<GeneralSettings> with TickerProviderStateMixin {
var themeNotifier;
int blindValue = 0;
bool vibration = false;
@ -28,6 +29,7 @@ class _GeneralSettings extends State<GeneralSettings>
var permission = new PermissionService();
LocationPermission locationPermission;
var mediaQueryData;
@override
void initState() {
this.getValues();
@ -38,196 +40,243 @@ class _GeneralSettings extends State<GeneralSettings>
mediaQueryData = MediaQuery.of(context);
themeNotifier = Provider.of<ThemeNotifier>(context);
return Container(
child: ListView(scrollDirection: Axis.vertical, children: <Widget>[
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: AppText(
TranslationBase.of(context).modes,
fontWeight: FontWeight.bold,
),
),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).vibration),
Switch(
value: vibration,
onChanged: (value) {
setState(() {
vibration = value;
});
setVibration(value);
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
)),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).accessibility),
Switch(
value: accsibility,
onChanged: (value) {
setState(() {
accsibility = value;
});
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
)),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: AppText(
TranslationBase.of(context).blindMode,
fontWeight: FontWeight.bold,
),
),
new Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(8.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Text(
TranslationBase.of(context).offTheme,
style: new TextStyle(fontSize: 16.0),
),
Radio(
value: 0,
groupValue: blindValue,
onChanged: (value) {
setState(() => {this.blindValue = value});
setTheme(value);
},
),
],
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(21.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
TranslationBase.of(context).alert,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).modesBelow,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
),
Row(
children: [
Checkbox(
value: vibration,
onChanged: (value) {
setState(() {
vibration = value;
});
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).prefferedMode,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Text(
TranslationBase.of(context).invertTheme,
style: new TextStyle(
fontSize: 16.0,
),
),
new Radio(
value: 1,
groupValue: blindValue,
onChanged: (value) {
setState(() => {this.blindValue = value});
setTheme(value);
},
)
],
),
],
),
Row(
children: [
Checkbox(
value: accsibility,
onChanged: (value) {
setState(() {
accsibility = value;
});
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).accessibility,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Text(
TranslationBase.of(context).dimTheme,
style: new TextStyle(fontSize: 16.0),
),
],
),
mHeight(16),
mHeight(12),
Text(
TranslationBase.of(context).blindMode,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).prefferedMode,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
),
Column(
children: [
Row(
children: [
new Radio(
value: 0,
groupValue: blindValue,
onChanged: (value) {
setState(() {
blindValue = value;
setTheme(value);
});
},
),
Text(
TranslationBase.of(context).offTheme,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
new Radio(
value: 2,
groupValue: blindValue,
onChanged: (value) {
setState(() => {this.blindValue = value});
),
],
),
Row(
children: [
Radio(
value: 1,
groupValue: blindValue,
onChanged: (value) {
setState(() {
blindValue = value;
setTheme(value);
},
});
},
),
Text(
TranslationBase.of(context).invertTheme,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Text(
TranslationBase.of(context).bwTheme,
style: new TextStyle(fontSize: 16.0),
),
],
),
Row(
children: [
Radio(
value: 2,
groupValue: blindValue,
onChanged: (value) {
setState(() {
blindValue = value;
setTheme(value);
});
},
),
Text(
TranslationBase.of(context).dimTheme,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
new Radio(
value: 3,
groupValue: blindValue,
onChanged: (value) {
setState(() => {this.blindValue = value});
),
],
),
Row(
children: [
Radio(
value: 1,
groupValue: blindValue,
onChanged: (value) {
setState(() {
blindValue = value;
setTheme(value);
},
});
},
),
Text(
TranslationBase.of(context).bwTheme,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
],
),
],
),
],
),
mHeight(12),
mHeight(12),
Text(
TranslationBase.of(context).permissions,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).permissionsBellow,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
),
Row(
children: [
Checkbox(
value: camera,
onChanged: (value) {
setState(() {
camera = value;
});
this.permission.openSettings();
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).cameraPermission,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
),
],
),
Row(
children: [
Checkbox(
value: location,
onChanged: (value) {
if (value == true) {
Navigator.pop(context);
this.setLocationPermission();
} else {
Geolocator.openLocationSettings();
}
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).locationPermission,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
],
)
])),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: AppText(
TranslationBase.of(context).permissions,
fontWeight: FontWeight.bold,
),
],
),
mHeight(16),
],
),
),
),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).cameraPermission),
Switch(
value: camera,
onChanged: (value) {
setState(() {
camera = value;
});
this.permission.openSettings();
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
)),
Container(
color: Theme.of(context).scaffoldBackgroundColor,
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).locationPermission),
Switch(
value: location,
onChanged: (value) {
if (value == true) {
Navigator.pop(context);
this.setLocationPermission();
} else {
Geolocator.openLocationSettings();
}
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
))
]));
);
}
setLocationPermission() async {
@ -292,11 +341,8 @@ class _GeneralSettings extends State<GeneralSettings>
getValues() async {
if (permission.isThemeEnabled() != null) {
blindValue =
permission.isThemeEnabled() == null ? 0 : permission.isThemeEnabled();
vibration = permission.isVibrationEnabled() == null
? false
: permission.isVibrationEnabled();
blindValue = permission.isThemeEnabled() == null ? 0 : permission.isThemeEnabled();
vibration = permission.isVibrationEnabled() == null ? false : permission.isVibrationEnabled();
// accsibility = mediaQueryData.accessibleNavigation;
//setTheme(blindValue);
}
@ -310,19 +356,11 @@ class _GeneralSettings extends State<GeneralSettings>
getTheme(value) async {
if (value == 1) {
return invertThemes(
fontName: Provider.of<ProjectViewModel>(context, listen: false).isArabic ? 'Cairo' : 'Poppins'
);
return invertThemes(fontName: Provider.of<ProjectViewModel>(context, listen: false).isArabic ? 'Cairo' : 'Poppins');
} else if (value == 3) {
return bwThemes(
fontName: Provider.of<ProjectViewModel>(context, listen: false).isArabic ? 'Cairo' : 'Poppins'
);
return bwThemes(fontName: Provider.of<ProjectViewModel>(context, listen: false).isArabic ? 'Cairo' : 'Poppins');
} else {
return defaultTheme(
fontName:
Provider.of<ProjectViewModel>(context, listen: false).isArabic
? 'Cairo'
: 'Poppins');
return defaultTheme(fontName: Provider.of<ProjectViewModel>(context, listen: false).isArabic ? 'Cairo' : 'Poppins');
}
}
}

@ -2,9 +2,11 @@ import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/cupertino.dart';
@ -16,8 +18,7 @@ class ProfileSettings extends StatefulWidget {
_ProfileSettings createState() => _ProfileSettings();
}
class _ProfileSettings extends State<ProfileSettings>
with TickerProviderStateMixin {
class _ProfileSettings extends State<ProfileSettings> with TickerProviderStateMixin {
bool smsAlert = true;
bool emailAlert = true;
int language = 1;
@ -25,6 +26,7 @@ class _ProfileSettings extends State<ProfileSettings>
TextEditingController emergencyContact = new TextEditingController();
TextEditingController emailController = new TextEditingController();
TextEditingController emergencyContactName = new TextEditingController();
@override
void initState() {
Future.delayed(new Duration(seconds: 0), () {
@ -37,199 +39,300 @@ class _ProfileSettings extends State<ProfileSettings>
Widget build(BuildContext context) {
return BaseView<DashboardViewModel>(
onModelReady: (model) => {},
builder: (_, model, wi) => Container(
child: model.user != null
? ListView(scrollDirection: Axis.vertical, children: <Widget>[
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.all(15),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(
TranslationBase.of(context).fileNo,
color: Colors.black,
),
AppText(
model.user.patientID.toString(),
color: Colors.black,
),
],
onModelReady: (model) => {},
builder: (_, model, wi) => Container(
child: model.user != null
? Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(21.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Card(
shape: cardRadius(8),
margin: EdgeInsets.zero,
elevation: 3,
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
TranslationBase.of(context).fileNo + ": ",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
model.user.patientID.toString(),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
],
),
),
),
mHeight(12),
Text(
TranslationBase.of(context).languageSetting,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).selectLanguage,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
),
Row(
children: [
Expanded(
child: Row(
children: [
new Radio(
value: 2,
groupValue: language,
onChanged: (value) {
setState(() {
language = value;
});
},
),
Text(
TranslationBase.of(context).english,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
),
],
),
),
Expanded(
child: Row(
children: [
Radio(
value: 1,
groupValue: language,
onChanged: (value) {
setState(() {
language = value;
});
},
),
Text(
TranslationBase.of(context).arabic,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
),
],
),
),
],
),
mHeight(12),
Text(
TranslationBase.of(context).alert,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
Text(
TranslationBase.of(context).recAlert,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
),
Row(
children: [
Checkbox(
value: emailAlert,
onChanged: (value) {
setState(() {
emailAlert = value;
});
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).emailAlert,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
),
],
),
Row(
children: [
Checkbox(
value: smsAlert,
onChanged: (value) {
setState(() {
smsAlert = value;
});
},
activeColor: CustomColors.accentColor,
),
Text(
TranslationBase.of(context).smsAlert,
style: TextStyle(
fontSize: 12,
letterSpacing: -0.48,
),
),
],
),
mHeight(16),
Text(
TranslationBase.of(context).contactInfo,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.64,
),
),
mHeight(12),
inputWidget(TranslationBase.of(context).email, "", emailController),
mHeight(8),
inputWidget(TranslationBase.of(context).emergencyName, "", emergencyContactName),
mHeight(8),
inputWidget(TranslationBase.of(context).emergencyContact, "", emergencyContact),
mHeight(8),
],
),
),
),
SizedBox(
height: 1,
width: MediaQuery.of(context).size.width,
child: Container(
color: Colors.grey[300],
),
Container(
width: double.infinity,
child: Card(
margin: EdgeInsets.zero,
elevation: 20,
child: Padding(
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16, top: 16),
child: DefaultButton(
TranslationBase.of(context).save,
() {
saveSettings();
},
),
),
),
Padding(
child: AppText(
TranslationBase.of(context).languageSetting,
fontWeight: FontWeight.bold),
padding: EdgeInsets.all(10),
),
],
)
: Center(
child: AppText(TranslationBase.of(context).loginToUseService),
),
),
);
}
Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String prefix, bool isEnable = true, bool hasSelection = false}) {
return Container(
padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Colors.white,
border: Border.all(
color: Color(0xffefefef),
width: 1,
),
),
child: InkWell(
onTap: hasSelection ? () {} : null,
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_labelText,
style: TextStyle(
fontSize: 11,
fontWeight: FontWeight.w600,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).english),
new Radio(
value: 2,
groupValue: language,
onChanged: (value) {
setState(() {
language = value;
});
},
)
],
)),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).arabic),
new Radio(
value: 1,
groupValue: language,
onChanged: (value) {
setState(() {
language = value;
});
},
)
],
)),
Padding(
child: AppText(TranslationBase.of(context).alert),
padding: EdgeInsets.all(10),
),
TextField(
enabled: isEnable,
scrollPadding: EdgeInsets.zero,
keyboardType: TextInputType.number,
controller: _controller,
// onChanged: (value) => {validateForm()},
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).emailAlert),
Switch(
value: emailAlert,
onChanged: (value) {
setState(() {
emailAlert = value;
});
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
)),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(TranslationBase.of(context).smsAlert),
Switch(
value: smsAlert,
onChanged: (value) {
setState(() {
smsAlert = value;
});
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
)
],
)),
Padding(
child: AppText(TranslationBase.of(context).contactInfo),
padding: EdgeInsets.all(10),
),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(TranslationBase.of(context).email),
TextField(
controller: emailController,
decoration: InputDecoration(
suffixIcon: Icon(Icons.edit),
))
],
)),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(TranslationBase.of(context).emergencyName),
TextField(
controller: emergencyContactName,
decoration: InputDecoration(
suffixIcon: Icon(Icons.edit),
))
],
)),
Container(
color: Theme.of(context).textTheme.headline2.color,
padding: EdgeInsets.only(
top: 0, left: 10, right: 10, bottom: 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).emergencyContact),
TextField(
controller: emergencyContact,
decoration: InputDecoration(
suffixIcon: Icon(Icons.edit),
decoration: InputDecoration(
isDense: true,
hintText: _hintText,
hintStyle: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff575757),
letterSpacing: -0.56,
),
prefixIconConstraints: BoxConstraints(minWidth: 50),
prefixIcon: prefix == null
? null
: Text(
"+" + prefix,
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w500,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
)
],
)),
Container(
padding: EdgeInsets.all(10),
child: Row(
children: <Widget>[
Expanded(
child: DefaultButton(
TranslationBase.of(context).save,
() {
saveSettings();
},
)),
],
))
])
: Center(
child:
AppText(TranslationBase.of(context).loginToUseService),
)));
),
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
),
],
),
),
if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined),
],
),
),
);
}
getSettings(context) {
GifLoaderDialogUtils.showMyDialog(context);
authService.getSettings().then((result) => {
GifLoaderDialogUtils.hideDialog(context),
setValue(result["PateintInfoForUpdateList"][0])
});
authService.getSettings().then((result) => {GifLoaderDialogUtils.hideDialog(context), setValue(result["PateintInfoForUpdateList"][0])});
}
setValue(value) {
@ -252,10 +355,6 @@ class _ProfileSettings extends State<ProfileSettings>
request["IsEmailAlertRequired"] = this.emailAlert;
request["IsSMSAlertRequired"] = this.smsAlert;
request["PreferredLanguage"] = this.language.toString();
authService.saveSettings(request).then((result) => {
AppToast.showSuccessToast(
message: TranslationBase.of(context).profileUpdate),
GifLoaderDialogUtils.hideDialog(context)
});
authService.saveSettings(request).then((result) => {AppToast.showSuccessToast(message: TranslationBase.of(context).profileUpdate), GifLoaderDialogUtils.hideDialog(context)});
}
}

@ -1,7 +1,9 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/pages/settings/general_setting.dart';
import 'package:diplomaticquarterapp/pages/settings/profile_setting.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/arrow_back.dart';
import 'package:flutter/material.dart';
@ -9,6 +11,7 @@ class Settings extends StatefulWidget {
final int type;
Settings({this.type = 0});
@override
_Settings createState() => _Settings();
}
@ -18,8 +21,7 @@ class _Settings extends State<Settings> with TickerProviderStateMixin {
@override
void initState() {
_tabController =
new TabController(length: 2, vsync: this, initialIndex: widget.type);
_tabController = new TabController(length: 2, vsync: this, initialIndex: widget.type);
if (widget.type == 1) {
_tabController.animateTo(1);
@ -31,45 +33,45 @@ class _Settings extends State<Settings> with TickerProviderStateMixin {
@override
Widget build(BuildContext context) {
AppGlobal.context = context;
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: Icon(Icons.info, color: Colors.white),
onPressed: () {
//openInfoPage()
},
)
],
bottom: TabBar(
// isScrollable: true,
return AppScaffold(
isShowAppBar: false,
isShowDecPage: false,
showNewAppBarTitle: true,
showNewAppBar: true,
appBarTitle: TranslationBase.of(context).settings,
backgroundColor: Color(0xFFF7F7F7),
body: Column(
children: [
TabBar(
// isScrollable: true,
indicatorWeight: 5.0,
//indicatorSize: TabBarIndicatorSize.label,
// indicatorSize: TabBarIndicatorSize.tab,
indicatorWeight: 3.0,
//indicatorSize: TabBarIndicatorSize.label,
// indicatorSize: TabBarIndicatorSize.tab,
indicatorColor: Theme.of(context).primaryColor,
// labelColor: Theme.of(context).primaryColor,
tabs: [
Tab(text: TranslationBase.of(context).general),
Tab(
text: TranslationBase.of(context).profile,
)
],
controller: _tabController,
),
title: Text(TranslationBase.of(context).settings,
style: TextStyle(color: Colors.white)),
leading: Builder(
builder: (BuildContext context) {
return ArrowBack();
},
),
indicatorColor: CustomColors.accentColor,
labelColor: Colors.black,
unselectedLabelColor: CustomColors.grey,
// labelColor: Theme.of(context).primaryColor,
tabs: [
Tab(text: TranslationBase.of(context).general),
Tab(
text: TranslationBase.of(context).profile,
)
],
controller: _tabController,
),
Expanded(
child: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
GeneralSettings(),
ProfileSettings(),
],
controller: _tabController),
),
],
),
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [GeneralSettings(), ProfileSettings()],
controller: _tabController),
);
}
}

@ -236,7 +236,7 @@ class AuthProvider with ChangeNotifier {
return Future.value(error);
// throw error;
}, body: neRequest.toJson());
sharedPref.setString(BLOOD_TYPE, localRes['PatientBloodType']);
// sharedPref.setString(BLOOD_TYPE, localRes['PatientBloodType']);
return Future.value(localRes);
} catch (error) {
throw localRes;

@ -2361,14 +2361,19 @@ class TranslationBase {
String get selectSlot => localizedValues["selectSlot"][locale.languageCode];
String get selectLanguage => localizedValues["selectLanguage"][locale.languageCode];
String get recAlert => localizedValues["recAlert"][locale.languageCode];
String get modesBelow => localizedValues["modesBelow"][locale.languageCode];
String get prefferedMode => localizedValues["prefferedMode"][locale.languageCode];
String get permissionsBellow => localizedValues["permissionsBellow"][locale.languageCode];
String get invoiceDetails => localizedValues["invoiceDetails"][locale.languageCode];
String get appoDetails => localizedValues["appoDetails"][locale.languageCode];
String get appoPaymentConfirm => localizedValues["appoPaymentConfirm"][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -0,0 +1,148 @@
import 'dart:math' as math;
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
class LineChartModel {
int value;
String title;
LineChartModel(this.title, this.value);
}
class CustomLineChart extends StatefulWidget {
final List<LineChartModel> list;
final bool isArabic;
CustomLineChart(this.list, this.isArabic);
@override
_CustomLineChartState createState() => _CustomLineChartState();
}
class _CustomLineChartState extends State<CustomLineChart> {
bool showAvg = false;
final List<LineChartModel> myList = [
LineChartModel("", 0),
LineChartModel("", 0),
// LineChartModel("", 0),
];
List<LineChartModel> list = [];
@override
void initState() {
super.initState();
if (widget.list.isEmpty) {
list = myList;
} else {
list = widget.list;
}
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
AspectRatio(
aspectRatio: 1.0,
child: LineChart(
mainData(),
),
),
SizedBox(
width: 60,
height: 34,
child: TextButton(
onPressed: () {
setState(() {
showAvg = !showAvg;
});
},
child: Text(
'',
style: TextStyle(fontSize: 12, color: showAvg ? Colors.white.withOpacity(0.5) : Colors.white),
),
),
),
],
);
}
LineChartData mainData() {
SideTitles right = SideTitles(
showTitles: true,
margin: 0,
reservedSize: 8,
getTitles: (value) {
return '';
},
);
SideTitles left = SideTitles(
showTitles: true,
interval: 1,
getTextStyles: (value) => const TextStyle(color: Color(0xff2E303A), fontWeight: FontWeight.w600, fontSize: 12, letterSpacing: 0),
getTitles: (value) {
if (widget.list.isEmpty) {
return (value).toInt().toString();
}
return (value * 20).toInt().toString();
},
reservedSize: 22,
margin: 12,
);
return LineChartData(
lineTouchData: LineTouchData(enabled: false),
gridData: FlGridData(
show: true,
drawVerticalLine: false,
getDrawingHorizontalLine: (value) {
return FlLine(
color: const Color(0xffEFEFEF),
strokeWidth: 1,
);
},
),
titlesData: FlTitlesData(
show: true,
topTitles: SideTitles(showTitles: false),
bottomTitles: SideTitles(
showTitles: true,
reservedSize: 22,
interval: 1,
getTextStyles: (value) => const TextStyle(color: Color(0xff2E303A), fontWeight: FontWeight.w600, fontSize: 12, letterSpacing: 0),
getTitles: (value) {
String _title = list[value.toInt()].title;
return (_title.length > 3 ? (widget.isArabic ? _title : _title.substring(0, 3)) : _title).toUpperCase();
},
margin: 12,
),
rightTitles: widget.isArabic ? left : right,
leftTitles: widget.isArabic ? right : left),
borderData: FlBorderData(
show: true,
border: Border.symmetric(
horizontal: BorderSide(color: const Color(0xffEFEFEF), width: 1),
),
),
minX: 0,
maxX: widget.list.isEmpty ? 1 : widget.list.length - 1.0,
minY: widget.list.isEmpty ? -1 : 0,
maxY: widget.list.isEmpty ? 1 : 5,
lineBarsData: [
LineChartBarData(
spots: [
for (int i = 0; i < list.length; i++) FlSpot(i + 0.0, (list[i].value / 20) + 0.0),
],
isCurved: true,
preventCurveOverShooting: true,
barWidth: 2,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
),
],
);
}
}

@ -0,0 +1,52 @@
// import 'package:flutter/material.dart';
// import 'package:syncfusion_flutter_charts/charts.dart';
// import 'package:syncfusion_flutter_charts/sparkcharts.dart';
//
// class SyncFuChart extends StatelessWidget {
// List<_SalesData> data = [
// _SalesData('Jan', 35),
// _SalesData('Feb', 28),
// _SalesData('Mar', 34),
// _SalesData('Apr', 32),
// _SalesData('May', 40),
// ];
//
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// body: Column(
// children: [
// //Initialize the chart widget
// SfCartesianChart(
//
// primaryXAxis: CategoryAxis(),
// primaryYAxis: CategoryAxis(minimum: 28),
// // Chart title
// title: ChartTitle(text: 'Half yearly sales analysis'),
// // Enable legend
// legend: Legend(isVisible: true),
// // Enable tooltip
// tooltipBehavior: TooltipBehavior(enable: true),
// series: <ChartSeries<_SalesData, String>>[
// LineSeries<_SalesData, String>(
// dataSource: data,
// xValueMapper: (_SalesData sales, _) => sales.year,
// yValueMapper: (_SalesData sales, _) => sales.sales,
// name: 'Sales',
// // Enable data label
// dataLabelSettings: DataLabelSettings(isVisible: true),
// ),
// ],
// ),
// ],
// ),
// );
// }
// }
//
// class _SalesData {
// _SalesData(this.year, this.sales);
//
// final String year;
// final double sales;
// }

@ -543,7 +543,7 @@ class _AppDrawerState extends State<AppDrawer> {
Utils.hideProgressDialog();
Provider.of<ProjectViewModel>(context, listen: false).setPrivilege(privilegeList: result, isLoginChild: !isMainUser);
result = CheckActivationCode.fromJson(result);
var bloodType = await sharedPref.getString(BLOOD_TYPE);
var familyFile = await sharedPref.getObject(FAMILY_FILE);
var currentLang = await sharedPref.getString(APP_LANGUAGE);
var mainUser = await sharedPref.getObject(MAIN_USER);
@ -556,6 +556,7 @@ class _AppDrawerState extends State<AppDrawer> {
}
// result.list.cRSVerificationStatus = result['CRSVerificationStatus'];
this.sharedPref.setString(APP_LANGUAGE, currentLang);
this.sharedPref.setString(BLOOD_TYPE, bloodType);
this.sharedPref.setInt(LAST_LOGIN, loginType);
this.sharedPref.setObject(MAIN_USER, mainUser);
this.sharedPref.setObject(USER_PROFILE, result.list);

@ -28,6 +28,7 @@ class AppScaffold extends StatelessWidget {
final String appBarTitle;
final Widget body;
final Widget bottomSheet;
final Widget bottomNavigationBar;
final bool isLoading;
final bool isShowAppBar;
final bool showNewAppBar;
@ -70,6 +71,7 @@ class AppScaffold extends StatelessWidget {
this.showNewAppBarTitle = false,
this.hasAppBarParam,
this.bottomSheet,
this.bottomNavigationBar,
this.baseViewModel,
this.floatingActionButton,
this.isPharmacy = false,
@ -118,7 +120,7 @@ class AppScaffold extends StatelessWidget {
dropDownList: dropDownList ?? [],
dropDownIndexChange: dropDownIndexChange,
appBarIcons: appBarIcons,
onTap: onTap,
onTap: onTap,
)
: (isShowAppBar
? appBar = AppBarWidget(
@ -151,6 +153,7 @@ class AppScaffold extends StatelessWidget {
)
: buildBodyWidget(context),
),
bottomNavigationBar: bottomNavigationBar,
floatingActionButton: floatingActionButton,
);
}
@ -174,8 +177,7 @@ class NewAppBarWidget extends StatelessWidget with PreferredSizeWidget {
final List<Widget> appBarIcons;
Function onTap;
NewAppBarWidget(
{Key key, this.showTitle = false, this.showDropDown = false, this.title = "", this.dropDownList, this.appBarIcons, this.dropdownIndexValue, this.dropDownIndexChange, this.onTap})
NewAppBarWidget({Key key, this.showTitle = false, this.showDropDown = false, this.title = "", this.dropDownList, this.appBarIcons, this.dropdownIndexValue, this.dropDownIndexChange, this.onTap})
: super(key: key);
@override

@ -104,6 +104,7 @@ dependencies:
# Calendar
# table_calendar: ^2.3.0
syncfusion_flutter_calendar: ^18.4.49
# syncfusion_flutter_charts: any
# SVG Images
flutter_svg: ^0.18.0

Loading…
Cancel
Save