WIP: start of vida plus soap index
parent
415b2174e7
commit
204d4531a5
@ -0,0 +1,270 @@
|
||||
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||
import 'package:doctor_app_flutter/core/enum/view_state.dart';
|
||||
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
|
||||
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_history.dart';
|
||||
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
|
||||
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
||||
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/subjective/update_subjective_page.dart';
|
||||
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
|
||||
import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-app-bar.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
|
||||
import 'assessment/update_assessment_page.dart';
|
||||
import 'objective/update_objective_page.dart';
|
||||
import 'plan/update_plan_page.dart';
|
||||
|
||||
class UpdateSoapIndex extends StatefulWidget {
|
||||
final bool isUpdate;
|
||||
|
||||
const UpdateSoapIndex({Key? key, this.isUpdate = false}) : super(key: key);
|
||||
|
||||
@override
|
||||
_UpdateSoapIndexState createState() => _UpdateSoapIndexState();
|
||||
}
|
||||
|
||||
class _UpdateSoapIndexState extends State<UpdateSoapIndex> with TickerProviderStateMixin {
|
||||
PageController? _controller;
|
||||
int _currentIndex = 0;
|
||||
List<MySelectedAllergy> myAllergiesList = [];
|
||||
List<MySelectedHistory> myHistoryList = [];
|
||||
|
||||
changePageViewIndex(pageIndex, {isChangeState = true}) {
|
||||
if (pageIndex != _currentIndex && isChangeState) changeLoadingState(true);
|
||||
_controller!.jumpToPage(pageIndex);
|
||||
setState(() {
|
||||
_currentIndex = pageIndex;
|
||||
});
|
||||
}
|
||||
|
||||
bool _isLoading = true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_controller = new PageController();
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void changeLoadingState(isLoading) {
|
||||
setState(() {
|
||||
_isLoading = isLoading;
|
||||
});
|
||||
}
|
||||
|
||||
void changeStateFun() {
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;
|
||||
PatiantInformtion patient = routeArgs['patient'];
|
||||
return BaseView<SOAPViewModel>(
|
||||
builder: (_, model, w) => AppScaffold(
|
||||
isLoading: _isLoading,
|
||||
isShowAppBar: true,
|
||||
appBar: PatientProfileAppBar(patient),
|
||||
body: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(boxShadow: <BoxShadow>[], color: Theme.of(context).scaffoldBackgroundColor),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
color: Theme.of(context).scaffoldBackgroundColor,
|
||||
height: MediaQuery.of(context).size.height * 0.73,
|
||||
child: PageView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
controller: _controller,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
_currentIndex = index;
|
||||
});
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: <Widget>[
|
||||
//todo add widgets here
|
||||
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
bottomSheet: _isLoading
|
||||
? Container(
|
||||
height: 0,
|
||||
)
|
||||
: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(
|
||||
Radius.circular(0.0),
|
||||
),
|
||||
border: Border.all(color: HexColor('#707070'), width: 0),
|
||||
),
|
||||
height: SizeConfig.heightMultiplier! * (SizeConfig.isHeightVeryShort ? 12 : 10),
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Container(
|
||||
child: FractionallySizedBox(widthFactor: .80, child: getBottomSheet(model, patient)),
|
||||
),
|
||||
SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget getBottomSheet(SOAPViewModel model, PatiantInformtion patient) {
|
||||
switch (_currentIndex) {
|
||||
case 0:
|
||||
{
|
||||
return Center(
|
||||
child: AppButton(
|
||||
title: TranslationBase.of(context).next,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.red[700]!,
|
||||
onPressed: () async {
|
||||
model.nextOnSubjectPage(model);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
{
|
||||
return Center(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: TranslationBase.of(context).previous,
|
||||
color: Colors.grey[300]!,
|
||||
// height: SizeConfig.heightMultiplier! *
|
||||
// (SizeConfig.isHeightVeryShort ? 8 : 6),
|
||||
// padding: 10,
|
||||
fontColor: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
onPressed: () {
|
||||
changePageViewIndex(0);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: patient.admissionNo != null && patient.admissionNo!.isNotEmpty && !model.isAddExamInProgress ? TranslationBase.of(context).finish : TranslationBase.of(context).next,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.red[700]!,
|
||||
// height: SizeConfig.heightMultiplier! *
|
||||
// (SizeConfig.isHeightVeryShort ? 8 : 6),
|
||||
// padding: 10,
|
||||
disabled: model.state == ViewState.BusyLocal,
|
||||
onPressed: () async {
|
||||
await model.nextOnObjectivePage(model);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
return Center(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: TranslationBase.of(context).previous,
|
||||
color: Colors.grey[300]!,
|
||||
fontColor: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
disabled: model.state == ViewState.BusyLocal,
|
||||
onPressed: () async {
|
||||
changePageViewIndex(1);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: TranslationBase.of(context).next,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.red[700]!,
|
||||
disabled: model.state == ViewState.BusyLocal,
|
||||
onPressed: () async {
|
||||
model.nextOnAssessmentPage(model);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
return Center(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: TranslationBase.of(context).previous,
|
||||
color: Colors.grey[300]!,
|
||||
fontColor: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
disabled: model.state == ViewState.BusyLocal,
|
||||
onPressed: () async {
|
||||
changePageViewIndex(2);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 5,
|
||||
),
|
||||
Expanded(
|
||||
child: AppButton(
|
||||
title: model.isAddProgress ? TranslationBase.of(context).next : TranslationBase.of(context).finish,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.red[700]!,
|
||||
disabled: model.progressNoteText.isEmpty,
|
||||
onPressed: () async {
|
||||
model.nextOnPlanPage(model);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return SizedBox();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue