h2o today page, prescription & schedule appointment improvements.

merge-update-with-lab-changes
Sikander Saleem 4 years ago
parent 8aa1fbfb4a
commit 1346eab593

@ -45,7 +45,7 @@ class PrescriptionsViewModel extends BaseViewModel {
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
_filterList(); _filterList();
await getPrescriptionsOrders(); // await getPrescriptionsOrders();
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }

@ -1,13 +1,17 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:percent_indicator/circular_percent_indicator.dart'; import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -17,13 +21,27 @@ import 'package:wave/wave.dart';
import 'Dialog/confirm_add_amount_dialog.dart'; import 'Dialog/confirm_add_amount_dialog.dart';
import 'add_custom_amount.dart'; import 'add_custom_amount.dart';
class TodayPage extends StatelessWidget { class TodayPage extends StatefulWidget {
TodayPage({Key key}) : super(key: key);
@override
_TodayPageState createState() {
return _TodayPageState();
}
}
class _TodayPageState extends State<TodayPage> {
TextEditingController _h20AmountController = TextEditingController();
bool isUnitML = true;
Future<bool> readPrefs() async { Future<bool> readPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
return (prefs.getString(H2O_UNIT) ?? "ml") == "ml" ? true : false; isUnitML = (prefs.getString(H2O_UNIT) ?? "ml") == "ml" ? true : false;
return isUnitML;
} }
bool canShowAddButton = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<H2OViewModel>( return BaseView<H2OViewModel>(
@ -46,7 +64,6 @@ class TodayPage extends StatelessWidget {
child: FutureBuilder<bool>( child: FutureBuilder<bool>(
future: readPrefs(), future: readPrefs(),
builder: (context, data) { builder: (context, data) {
var isUnitML = true;
String unit; String unit;
if (data.connectionState == ConnectionState.done) { if (data.connectionState == ConnectionState.done) {
isUnitML = data.data; isUnitML = data.data;
@ -152,8 +169,6 @@ class TodayPage extends StatelessWidget {
_circularButton(context, 330, model), _circularButton(context, 330, model),
SizedBox(height: 8), SizedBox(height: 8),
_circularButton(context, 200, model), _circularButton(context, 200, model),
// SizedBox(height: 8),
// _circularButton(context, 0, model, isCustom: true),
SizedBox(height: 8), SizedBox(height: 8),
InkWell( InkWell(
onTap: () => undoVolume(context, model), onTap: () => undoVolume(context, model),
@ -175,24 +190,114 @@ class TodayPage extends StatelessWidget {
), ),
), ),
SizedBox(height: 40), SizedBox(height: 40),
// Text( Text(
// TranslationBase.of(context).addCustomAmount, TranslationBase.of(context).addCustomAmount,
// style: TextStyle( style: TextStyle(
// fontSize: 14, fontSize: 14,
// height: 21 / 14, height: 21 / 14,
// fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
// color: Color(0xff2B353E), color: Color(0xff2B353E),
// letterSpacing: -0.56, letterSpacing: -0.56,
// ), ),
// ), ),
SizedBox(height: 12),
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: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [
Expanded(
flex: 3,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
TranslationBase.of(context).amount,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
color: Color(0xff2E303A),
letterSpacing: -0.44,
),
),
TextField(
controller: _h20AmountController,
keyboardType: TextInputType.number,
onChanged: (value) {
double _value = 0;
if (value.length > 0) _value = double.parse(value);
if (value.length > 0) {
if (canShowAddButton) {
return;
}
canShowAddButton = true;
setState(() {});
} else {
canShowAddButton = false;
setState(() {});
}
},
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9]')),
],
style: TextStyle(
color: Color(0xff575757),
letterSpacing: -0.56,
),
decoration: InputDecoration(
isDense: true,
hintText: "0",
hintStyle: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff575757),
letterSpacing: -0.56,
),
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
),
],
),
),
if (canShowAddButton)
Expanded(
flex: 1,
child: DefaultButton(
TranslationBase.of(context).add,
() async {
await showConfirmMessage(context, int.parse(_h20AmountController.text), model);
_h20AmountController.text = "";
canShowAddButton = false;
SystemChannels.textInput.invokeMethod('TextInput.hide');
setState(() {});
},
),
),
],
),
],
),
),
], ],
), ),
), ),
// floatingActionButton: H20FloatingActionButton(
// // controller: _controller,
// model: model,
// ),
), ),
); );
} }
@ -252,12 +357,19 @@ class TodayPage extends StatelessWidget {
); );
} }
void showConfirmMessage(context, int amount, H2OViewModel model) { Future showConfirmMessage(context, int amount, H2OViewModel model) async {
showDialog( String title = "${TranslationBase.of(context).areyousure} $amount ${(isUnitML ? TranslationBase.of(context).ml : TranslationBase.of(context).l).toLowerCase()} ?";
await showDialog(
context: context, context: context,
child: ConfirmAddAmountDialog( child: ConfirmWithMessageDialog(
model: model, message: title,
amount: amount, onTap: () async {
GifLoaderDialogUtils.showMyDialog(context);
InsertUserActivityRequestModel insertUserActivityRequestModel = InsertUserActivityRequestModel(quantityIntake: amount);
await model.insertUserActivity(insertUserActivityRequestModel);
GifLoaderDialogUtils.hideDialog(context);
FocusManager.instance.primaryFocus.unfocus();
},
), ),
); );
} }

@ -76,14 +76,18 @@ class _SchedulePageState extends State<SchedulePage> {
showNewAppBar: true, showNewAppBar: true,
showNewAppBarTitle: true, showNewAppBarTitle: true,
isShowAppBar: true, isShowAppBar: true,
backgroundColor: Color(0xffF7F7F7),
baseViewModel: model2, baseViewModel: model2,
isShowDecPage: false, isShowDecPage: false,
body: SizedBox( body: Column(
height: MediaQuery.of(context).size.height,
child: Stack(
children: [ children: [
Container( SizedBox(height: 21),
margin: EdgeInsets.only(top: 40), PageViewIndicator(
isActive: true,
currentPage: this.currentPage,
length: weeks.length,
),
Expanded(
child: PageView.builder( child: PageView.builder(
controller: _pageController, controller: _pageController,
itemCount: weeks.length, itemCount: weeks.length,
@ -94,97 +98,127 @@ class _SchedulePageState extends State<SchedulePage> {
}); });
}, },
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Container( return ListView.separated(
child: ListView.builder(
itemCount: weeks[index].length, itemCount: weeks[index].length,
itemBuilder: (context, index2) => InkWell( padding: EdgeInsets.all(21),
separatorBuilder: (context, index) => SizedBox(height: 12),
itemBuilder: (context, index2) {
bool isToday = DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10);
Color toDayColor = isToday ? Color(0xff359846) : Colors.white;
return InkWell(
onTap: () { onTap: () {
openBookAppointment(weeks[index][index2]); openBookAppointment(weeks[index][index2]);
}, },
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
flex: 1, flex: 1,
child: Padding( child: Column(
padding: projectViewModel.isArabic ? EdgeInsets.only(right: 20) : EdgeInsets.only(left: 20), mainAxisSize: MainAxisSize.min,
child: Row(children: [ crossAxisAlignment: CrossAxisAlignment.start,
Column(
children: [ children: [
Texts( Text(
weeks[index][index2]['DayName'], weeks[index][index2]['DayName'],
style: TextStyle(
fontSize: 13, fontSize: 13,
fontWeight: projectViewModel.isArabic ? FontWeight.w600 : FontWeight.w500, fontWeight: FontWeight.w600,
), color: Color(0xff2E303A),
Texts( letterSpacing: -0.52,
getDayMonths(
DateUtil.convertStringToDate(
weeks[index][index2]['Date'],
), ),
), ),
fontWeight: FontWeight.bold, Text(
getDayMonths(DateUtil.convertStringToDate(weeks[index][index2]['Date'])),
style: TextStyle(
fontSize: 18, fontSize: 18,
) fontWeight: FontWeight.w700,
color: Color(0xff2E303A),
letterSpacing: -0.72,
),
),
], ],
) ),
])),
), ),
Expanded( Expanded(
flex: 3, flex: 3,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
child: Container( child: Container(
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 20), decoration: BoxDecoration(
margin: EdgeInsets.only(left: 20, right: 20, top: 7, bottom: 7), color: toDayColor,
decoration: BoxDecoration(boxShadow: [ borderRadius: BorderRadius.all(
DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) Radius.circular(10.0),
? BoxShadow(color: Colors.green, offset: Offset(projectViewModel.isArabic ? 5 : -5, 0)) ),
: BoxShadow( boxShadow: [
color: Colors.grey[100], BoxShadow(
blurRadius: 5, color: Color(0xff000000).withOpacity(.05),
spreadRadius: 4, blurRadius: 27,
offset: Offset(0, 10), offset: Offset(0, -3),
), ),
], borderRadius: const BorderRadius.all(Radius.circular(10.0)), color: Colors.white), ],
),
child: Container(
margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0),
padding: EdgeInsets.symmetric(vertical: 14, horizontal: 12),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(color: Colors.white, width: 1),
borderRadius: BorderRadius.only(
bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0),
topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0),
bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0),
topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0),
),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) if (isToday)
? Texts( Text(
TranslationBase.of(context).today, TranslationBase.of(context).today,
color: Colors.green, style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 12, fontSize: 12,
marginTop: 0, fontWeight: FontWeight.w600,
) color: toDayColor,
: SizedBox(), letterSpacing: -0.48,
),
),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: Texts( child: Text(
weeks[index][index2]['WorkingHours'], weeks[index][index2]['WorkingHours'],
fontWeight: FontWeight.w500, style: TextStyle(
fontSize: 13,
fontWeight: FontWeight.w600,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
), ),
), ),
Icon(projectViewModel.isArabic
? Icons
.arrow_back_ios_outlined
: Icons
.arrow_forward_outlined, size: 16.0),
], ],
) )
]))), ]),
), ),
Icon(Icons.arrow_forward, color: Color(0xff2B353E)),
], ],
) ),
))); ),
),
),
],
),
);
});
}, },
)), ),
PageViewIndicator( ),
isActive: true,
currentPage: this.currentPage,
length: weeks.length,
)
], ],
))); ),
})); );
}),
);
} }
generateWeeksSchedules() { generateWeeksSchedules() {

@ -37,11 +37,11 @@ class PageViewIndicator extends StatelessWidget {
Widget circleBar(bool isActive) { Widget circleBar(bool isActive) {
return AnimatedContainer( return AnimatedContainer(
duration: Duration(milliseconds: 150), duration: Duration(milliseconds: 150),
margin: EdgeInsets.symmetric(horizontal: 3), margin: EdgeInsets.symmetric(horizontal: 4),
height: isActive ? 12 : 8, height: isActive ? 12 : 12,
width: isActive ? 12 : 8, width: isActive ? 12 : 12,
decoration: BoxDecoration( decoration: BoxDecoration(
color: isActive ? Colors.red : Colors.grey, color: isActive ? Color(0xffD02127) : Color(0xffD0D0D0),
borderRadius: BorderRadius.all(Radius.circular(12))), borderRadius: BorderRadius.all(Radius.circular(12))),
); );
} }

@ -4,7 +4,7 @@ import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_h
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -21,7 +21,9 @@ class PrescriptionsHistoryPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return BaseView<PrescriptionsViewModel>(
onModelReady: (model) => model.getPrescriptionsOrders(showLoading: true),
builder: (_, model, widget) => AppScaffold(
baseViewModel: prescriptionsViewModel, baseViewModel: prescriptionsViewModel,
body: ListView.separated( body: ListView.separated(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
@ -143,6 +145,6 @@ class PrescriptionsHistoryPage extends StatelessWidget {
}, },
itemCount: prescriptionsViewModel.prescriptionsHistory.length, itemCount: prescriptionsViewModel.prescriptionsHistory.length,
), ),
); ));
} }
} }

@ -1,101 +1,85 @@
import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ConfirmWithMessageDialog extends StatelessWidget { class ConfirmWithMessageDialog extends StatelessWidget {
final String title;
final String message; final String message;
final String okTitle; final String okTitle;
final GestureTapCallback onTap; final VoidCallback onTap;
const ConfirmWithMessageDialog({Key key, this.message, this.okTitle, this.onTap}) : super(key: key); const ConfirmWithMessageDialog({Key key, this.title, @required this.message, this.okTitle, this.onTap}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SimpleDialog( return Dialog(
contentPadding: EdgeInsets.fromLTRB(12.0, 12.0, 12.0, 12.0), backgroundColor: Colors.white,
shape: RoundedRectangleBorder(),
insetPadding: EdgeInsets.only(left: 21, right: 21),
child: Padding(
padding: EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [ children: [
Column( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Expanded(
TranslationBase.of(context).confirm, child: Padding(
style: TextStyle( padding: const EdgeInsets.only(top: 16.0),
color: Colors.black, child: Text(
fontSize: 22, title ?? TranslationBase.of(context).confirm,
letterSpacing: -0.94, style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Color(0xff2B353E), height: 35 / 24, letterSpacing: -0.96),
fontWeight: FontWeight.bold,
),
), ),
Text(
message,
style: TextStyle(
fontSize: 14,
color: CustomColors.grey,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
), ),
), ),
mHeight(20), IconButton(
Container( padding: EdgeInsets.zero,
child: Row( icon: Icon(Icons.close),
mainAxisAlignment: MainAxisAlignment.spaceBetween, color: Color(0xff2B353E),
children: [ constraints: BoxConstraints(),
Expanded( onPressed: () {
child: InkWell(
onTap: () {
Navigator.pop(context); Navigator.pop(context);
}, },
child: Container( )
decoration: containerRadius(CustomColors.darkGreyColor, 6), ],
padding: EdgeInsets.all(6),
child: Center(
child: Text(
TranslationBase.of(context).cancel,
style: TextStyle(
color: Colors.black,
fontSize: 16,
letterSpacing: -0.48,
fontWeight: FontWeight.w600,
),
),
), ),
Text(
message,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff808080), letterSpacing: -0.48),
), ),
SizedBox(height: 28),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: DefaultButton(
TranslationBase.of(context).cancel_nocaps,
() => Navigator.pop(context),
textColor: Color(0xff2B353E),
color: Color(0xffEAEAEA),
), ),
), ),
mWidth(12), SizedBox(width: 10),
Expanded( Expanded(
child: InkWell( child: DefaultButton(
onTap: () { okTitle ?? TranslationBase.of(context).ok,
() {
Navigator.pop(context); Navigator.pop(context);
onTap(); onTap();
}, },
child: Container(
decoration: containerRadius(CustomColors.accentColor, 6),
padding: EdgeInsets.all(6),
child: Center(
child: Text(
okTitle,
style: TextStyle(
color: Colors.white,
fontSize: 16,
letterSpacing: -0.48,
fontWeight: FontWeight.w600,
),
),
),
), ),
), ),
],
), ),
], ],
), ),
), ),
],
)
],
); );
} }
} }

Loading…
Cancel
Save