finish doctor replay design

merge-requests/418/head
Elham Rababah 5 years ago
parent 3f342d8ce1
commit 04f39315b5

@ -247,6 +247,7 @@ const GET_PRESCRIPTION_REPORT_ENH =
'Services/Patients.svc/REST/GetPrescriptionReport_enh';
const GET_PHARMACY_LIST = "Services/Patients.svc/REST/GetPharmcyList";
var selectedPatientType = 1;
//*********change value to decode json from Dropdown ************

@ -822,5 +822,8 @@ const Map<String, Map<String, String>> localizedValues = {
},"replied": {
"en": "Replied",
"ar": " تم الرد"
},"typeHereToReply": {
"en": "Type here to reply",
"ar": "اكتب هنا للرد"
},
};

@ -2,7 +2,10 @@ import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/hospitals_model.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/models/doctor/request_add_referred_doctor_remarks.dart';
import 'package:doctor_app_flutter/models/doctor/request_doctor_reply.dart';
import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart';
import 'package:doctor_app_flutter/models/patient/request_my_referral_patient_model.dart';
class DoctorReplyService extends BaseService {
@ -11,7 +14,11 @@ class DoctorReplyService extends BaseService {
RequestDoctorReply _requestDoctorReply = RequestDoctorReply();
List<MyReferralPatientModel> _listMyReferralPatientModel = [];
List<MyReferralPatientModel> get listMyReferralPatientModel => _listMyReferralPatientModel;
Future getDoctorReply() async {
hasError = false;
await baseAppClient.post(GT_MY_PATIENT_QUESTION,
onSuccess: (dynamic response, int statusCode) {
_listDoctorWorkingHoursTable.clear();
@ -24,4 +31,32 @@ class DoctorReplyService extends BaseService {
super.error = error;
}, body: _requestDoctorReply.toJson(),);
}
Future replay(
String referredDoctorRemarks, MyReferralPatientModel model) async {
RequestMyReferralPatientModel _requestMyReferralPatient =
RequestMyReferralPatientModel();
RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks =
RequestAddReferredDoctorRemarks();
_requestAddReferredDoctorRemarks.admissionNo = model.admissionNo;
_requestAddReferredDoctorRemarks.patientID = model.patientID;
_requestAddReferredDoctorRemarks.referredDoctorRemarks =
referredDoctorRemarks;
_requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo;
_requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor;
await baseAppClient.post(
ADD_REFERRED_DOCTOR_REMARKS,
body: _requestAddReferredDoctorRemarks.toJson(),
onSuccess: (dynamic body, int statusCode) {
model.referredDoctorRemarks = referredDoctorRemarks;
listMyReferralPatientModel[listMyReferralPatientModel.indexOf(model)] =
model;
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
);
}
}

@ -1,6 +1,7 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/doctor_reply_service.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/models/patient/my_referral/my_referral_patient_model.dart';
import '../../locator.dart';
import 'base_view_model.dart';
@ -19,4 +20,14 @@ class DoctorReplayViewModel extends BaseViewModel {
} else
setState(ViewState.Idle);
}
Future replay(String referredDoctorRemarks, MyReferralPatientModel model) async {
setState(ViewState.BusyLocal);
await _doctorReplyService.replay(referredDoctorRemarks, model);
if (_doctorReplyService.hasError) {
error = _doctorReplyService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
}

@ -0,0 +1,330 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/doctor_replay_view_model.dart';
import 'package:doctor_app_flutter/models/doctor/list_gt_my_patients_question_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:hexcolor/hexcolor.dart';
class DoctorReplayChat extends StatelessWidget {
final ListGtMyPatientsQuestions reply;
TextEditingController msgController = TextEditingController();
DoctorReplayChat(
{Key key, this.reply,
});
@override
Widget build(BuildContext context) {
return BaseView<DoctorReplayViewModel>(
onModelReady: (model) async {},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: Container(
color: Color(0XFFF2F2F2),
child: Stack(
children: [
Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(
left: 0, right: 5, bottom: 5, top: 5),
decoration: BoxDecoration(
color: Colors.white,
),
height: 150,
child: Container(
padding: EdgeInsets.only(
left: 10, right: 10, bottom: 10),
margin: EdgeInsets.only(top: 50),
child: Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
style: TextStyle(
fontSize: 1.6 *
SizeConfig.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text: reply.patientName
.toString(),
style: TextStyle(
color: Color(0xFF2B353E),
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
fontSize: 20)),
],
),
),
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Icon(FontAwesomeIcons.times,
size: 30,
color: Color(0xFF2B353E)))
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
// TODO: move to doctor profile
},
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: 1.6 *
SizeConfig.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text:
'Tap here to view patient profile'
.toString(),
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 12)),
],
),
),
),
],
),
],
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 30,),
Container(
// color: Color(0xFF2B353E),
width: MediaQuery.of(context).size.width * 0.8,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Color(0xFF2B353E),
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
border: Border.all(
color: HexColor('#707070') ,
width: 0.30),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(top: 5),
width: 60,
height: 60,
child: Image.asset(
1 == 1
? 'assets/images/male_avatar.png'
: 'assets/images/female_avatar.png',
fit: BoxFit.cover,
),
),
Column(
children: [
AppText(
"07 Jan 2021",
fontSize: 2.5 * SizeConfig.textMultiplier,
fontFamily: 'Poppins',
color: Colors.white,
// fontSize: 18
),
AppText(
"07:00 PM",
fontSize: 2.5 * SizeConfig.textMultiplier,
fontFamily: 'Poppins',
color: Colors.white,
// fontSize: 18
),
],
),
],
),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: MediaQuery.of(context).size.width * 0.7,
child: AppText(
"This procedure should be taken only when the patient is below 99o",
fontSize: 15,
fontFamily: 'Poppins',
color: Colors.white,
// fontSize: 18
),
),
),
],
),
],
),
],
),
),
SizedBox(height: 30,),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
// color: Color(0xFF2B353E),
width: MediaQuery.of(context).size.width * 0.8,
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.white,// Color(0xFF2B353E),
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
border: Border.all(
color: HexColor('#707070') ,
width: 0.30),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(top: 5),
width: 60,
height: 60,
child: Image.asset(
1 == 1
? 'assets/images/male_avatar.png'
: 'assets/images/female_avatar.png',
fit: BoxFit.cover,
),
),
Column(
children: [
AppText(
"07 Jan 2021",
fontSize: 2.5 * SizeConfig.textMultiplier,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
// fontSize: 18
),
AppText(
"07:00 PM",
fontSize: 2.5 * SizeConfig.textMultiplier,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
// fontSize: 18
),
],
),
],
),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: MediaQuery.of(context).size.width * 0.7,
child: AppText(
"This procedure should be taken only when the patient is below 99o",
fontSize: 15,
fontFamily: 'Poppins',
color: Color(0xFF2B353E),
// fontSize: 18
),
),
),
],
),
],
),
],
),
),
],
),
],
),
),
),
)
],
),
),
],
),
),
bottomSheet: Container(
child:TextFields(
hasLabelText: msgController.text != ''
? true
: false,
showLabelText: false,
hintText: TranslationBase
.of(context)
.typeHereToReply,
fontSize: 13.5,
suffixIcon: FontAwesomeIcons.arrowRight,
suffixIconColor: Colors.green,
// hintColor: Colors.black,
fontWeight: FontWeight.w600,
maxLines: 50,
minLines: 3,
controller: msgController,
validator: (value) {
if (value == null || value == "")
return TranslationBase.of(context)
.emptyMessage;
else
return null;
}),
height: MediaQuery.of(context).size.height * 0.1,
),
));
}
}

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/core/viewModel/doctor_replay_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/doctor/doctor_repaly_chat.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/doctor/doctor_reply_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
@ -18,7 +19,9 @@ class DoctorReplyScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseView<DoctorReplayViewModel>(
onModelReady: (model) => model.getDoctorReply(),
onModelReady: (model) {
model.getDoctorReply();
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
appBarTitle: TranslationBase.of(context).replay2,
@ -35,7 +38,15 @@ class DoctorReplyScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children:
model.listDoctorWorkingHoursTable.map((reply) {
return DoctorReplyWidget(reply: reply);
return InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
DoctorReplayChat(reply: reply)));
},
child: DoctorReplyWidget(reply: reply));
}).toList(),
)
],

@ -1195,6 +1195,7 @@ class TranslationBase {
String get sickLeave => localizedValues['sick_leave'][locale.languageCode];
String get unReplied => localizedValues['unReplied'][locale.languageCode];
String get replied => localizedValues['replied'][locale.languageCode];
String get typeHereToReply => localizedValues['typeHereToReply'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

Loading…
Cancel
Save