import 'package:doctor_app_flutter/core/viewModel/prescription/prescription_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.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/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/screens/prescription/add_prescription/add_prescription.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../core/viewModel/project_view_model.dart'; import '../../utils/tab_utils.dart'; import 'ProcedureType.dart'; import 'add-favourite-procedure.dart'; import 'add-procedure-page.dart'; class BaseAddProcedureTabPage extends StatefulWidget { final ProcedureViewModel model; final PrescriptionViewModel prescriptionModel; final PatiantInformtion patient; final ProcedureType procedureType; const BaseAddProcedureTabPage( {Key key, this.model, this.prescriptionModel, this.patient, @required this.procedureType}) : super(key: key); @override _BaseAddProcedureTabPageState createState() => _BaseAddProcedureTabPageState( patient: patient, model: model, procedureType: procedureType); } class _BaseAddProcedureTabPageState extends State with SingleTickerProviderStateMixin { final ProcedureViewModel model; final PatiantInformtion patient; final ProcedureType procedureType; _BaseAddProcedureTabPageState({this.patient, this.model, this.procedureType}); TabController _tabController; int _activeTab = 0; @override void initState() { super.initState(); _tabController = TabController(length: 2, vsync: this); _tabController.addListener(_handleTabSelection); } @override void dispose() { super.dispose(); _tabController.dispose(); } _handleTabSelection() { setState(() { _activeTab = _tabController.index; }); } @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; return BaseView( onModelReady: (model) async { await model.getProcedureTemplate(categoryID: widget.procedureType.getCategoryId()); }, builder: (BuildContext context, ProcedureViewModel model, Widget child) => AppScaffold( baseViewModel: model, isShowAppBar: true, appBar: BottomSheetTitle(title: procedureType.getToolbarLabel(context),), body: NetworkBaseView( baseViewModel: model, child: Scaffold( extendBodyBehindAppBar: true, appBar: PreferredSize( preferredSize: Size.fromHeight( MediaQuery.of(context).size.height * 0.070), child: TabBar( isScrollable: false, controller: _tabController, indicatorColor: Colors.transparent, indicatorWeight: 1.0, indicatorSize: TabBarIndicatorSize.tab, labelColor: Theme.of(context).primaryColor, labelPadding: EdgeInsets.only( top: 0, left: 0, right: 0, bottom: 0), unselectedLabelColor: Colors.grey[800], tabs: [ tabWidget( screenSize, _activeTab == 0, procedureType .getFavouriteTabName(context), isFirst: true,context: context ), tabWidget( screenSize, _activeTab == 1, procedureType.getAllLabelName(context), isLast: true,context: context ), ], ), ), body: Column( children: [ Expanded( child: TabBarView( physics: BouncingScrollPhysics(), controller: _tabController, children: [ AddFavouriteProcedure( previousProcedureViewModel: model, prescriptionModel: widget.prescriptionModel, patient: patient, procedureType: procedureType, ), if (widget.procedureType == ProcedureType.PRESCRIPTION) AddPrescription( widget.prescriptionModel, widget.patient, widget.prescriptionModel.prescriptionList, ) else AddProcedurePage( model: this.model, patient: patient, procedureType: procedureType, ), ], ), ), ], ), ) ), ), ); } ///TODO Elham* move it to new file Widget tabWidget( Size screenSize, bool isActive, String title, { int counter = -1, bool isFirst = false, bool isMiddle = false, bool isLast = false, context, }) { ProjectViewModel projectViewModel = Provider.of(context); return Center( child: Container( height: TabUtils.getTabHeight(context), decoration: TabUtils.getBoxTabsBoxDecoration( isActive: isActive, isFirst: isFirst, isMiddle: isMiddle, isLast: isLast, projectViewModel: projectViewModel), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ TabUtils.getTabText(title: title, isActive: isActive), if (counter != -1) TabUtils.getTabCounter(isActive: isActive, counter: counter) ], ), ), ); } }