import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:line_icons/line_icons.dart'; import 'package:rkm/widgets/input_text.dart'; import 'package:sqflite/sqflite.dart'; import '../../models/check_model.dart'; import '../../config/color_palette.dart'; import '../../config/const_variable.dart'; import '../../models/drop_down_data_model.dart'; import '../../service/db/db_querys.dart'; import '../../service/db/db_sqlite_load.dart'; import '../../widgets/alert_dialog_default.dart'; import '../../widgets/appbar_default.dart'; import '../../widgets/button_default.dart'; import '../../widgets/check_box_subtitle.dart'; import '../../widgets/dropdown_with_subtitle.dart'; import '../../widgets/input_with_subtitle.dart'; import '../../widgets/onbackbutton.dart'; import '../../widgets/switch_with_subtitle.dart'; import '../../widgets/text_default.dart'; import '../../widgets/title_containers.dart'; class ServiceIndividualScreen extends StatefulWidget { String username; var dataPatient; ServiceIndividualScreen({required this.username, required this.dataPatient}); @override State createState() => _ServiceIndividualScreenState(); } class _ServiceIndividualScreenState extends State { var professionalController = TextEditingController(text: 'ADMINISTRADOR'); var unitController = TextEditingController(text: 'USF PINHAL - EMILIA STEPHANI SIMIONATO'); var controllerSearchCondition = TextEditingController(); var controllerSearchCID = TextEditingController(); var controllerComplement = TextEditingController(); String date='Data Atendimento'; String? selectCodTeam; String? selectRationalityHealth; String? selectModelService; String? selectServicePlace; String? selectTypeService; String? selectModality; String? selectRotation; String? selectCIAP1; String? selectCIAP2; String? selectCID; String? selectConduct; String? selectBreastfeeding; String? selectProfessionals; String? selectCBO; String add=''; List examsList=[]; List listServicePlace=[]; List serviceConditionModel = []; List trackingModel = []; List nasfPoloModelList = []; List communicableDiseasesModel = []; List proceduresModel = []; List conductList = []; List forwardingList = []; List listCIAP = []; bool switchVaccineUpToDate = false; bool switchPregnancyPlane = false; bool switchResquestedTest = false; bool switchListenStart = false; bool switchAvalibleTest = false; bool switchUnderObservation = false; bool selectExamsRequested = false; bool selectExamsAvalible = false; bool mandatory = false; var userResponsibleRegisterController = TextEditingController(); var userUnitController = TextEditingController(); var weigthController = TextEditingController(); var heightController = TextEditingController(); var cephalicPerimeterController = TextEditingController(); var dumController = TextEditingController(); var oldPregnancyController = TextEditingController(); var childBirthsController = TextEditingController(); escolherprazoInicio(BuildContext context) async { var pickDate = await showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime(2022), lastDate: DateTime(2025)); if (pickDate != null) { setState(() { date = formatData(year: pickDate.year, month: pickDate.month, day: pickDate.day); date = 'Data Atendimento $date'; }); } } String formatData({int? year, int? month, int? day}) { DateTime data = DateTime(year!, month!, day!); String formattedDate = DateFormat('dd/MM/yyyy').format(data); return formattedDate; } loadLists() async{ for (int i = 0; ConstVariable().listServicePlace.length > i; i++) { listServicePlace.add(ConstVariable().listServicePlace[i].title); } await DBQuerys().buscaCIAP().then((list){ listCIAP.add(DropDownDataModel(cod: int.parse(list['CODIGO_CIAP']), title: list['DESC_CIAP'])); }); } loadUnidade()async{ Database db = await DbSqliteLoad().intialDB(); List list = await db.rawQuery("SELECT * FROM CONTROLE_INTERNO"); List listArg = await db.rawQuery("SELECT * FROM PROFISSIONAIS WHERE USERNAME = '${widget.username}'"); // print(listArg); userUnitController.text = list[0]['NOME_UNIDADE']; userResponsibleRegisterController.text =listArg[0]['NOME_PROFISSIONAL']; setState(() {}); } @override void initState() { super.initState(); loadUnidade(); loadLists(); } @override Widget build(BuildContext context) { double heigth = MediaQuery.of(context).size.height; double width = MediaQuery.of(context).size.width; return WillPopScope( onWillPop: ()async=> await OnBackButton().onBackButton(context, widget.username), child: Scaffold( appBar: AppBarDefault().appbar(context, 'RKM AB - Atendimento Individual',widget.username), body: Container( height: double.infinity, width: double.infinity, decoration: ConstVariable().backgroundGradient, child: ListView( children: [ Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Identificação do Atendimento'), Row( children: [ Container( height: heigth*0.5, width: width*0.2, child: Icon(Icons.assignment_rounded,size: 80,), ), Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ GestureDetector( onTap: ()=>escolherprazoInicio(context), child: Container( height: 50, margin: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( border: Border.all(color: ColorPalette.white), borderRadius: BorderRadius.all( Radius.circular(5.0) // <--- border radius here ), ), width: width*0.7, child: TextDefault( text: date, fontWeigth: FontWeight.bold, color: ColorPalette.black54, fontSize: 18, ), ), ), DropdownWithSubtitle( list: ['MANHÃ','TARDE','NOITE'], widthSubtitle: width*0.7, subtitle: 'Turno', hintDropdown: 'Turno', select: selectRotation, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value){ setState(() { selectRotation = value!; }); }, colorBorder: ColorPalette.white, ), DropdownWithSubtitle( list: listServicePlace, widthSubtitle: width*0.2, subtitle: 'Local de Atendimento', hintDropdown: 'Local de Atendimento', select: selectServicePlace, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value)=>setState(()=>selectServicePlace = value!), colorBorder: ColorPalette.white, ), DropdownWithSubtitle( list: ConstVariable().typeService2, widthSubtitle: width*0.55, subtitle: 'Tipo de Atendimento', hintDropdown: 'Tipo de Atendimento', select: selectTypeService, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value){ setState(() { selectTypeService = value!; }); }, colorBorder: ColorPalette.white, ), Container( width: width*0.7, child: Row( children: [ TextDefault(text: 'Outros Profissionais',fontSize: 15), Spacer(), IconButton( icon: Icon(Icons.people_alt_rounded), onPressed: ()=>AlertDialogDefault().otherProfessionals( context, 'Outros Profissionais', 'Adicionar Profissional', selectProfessionals, selectCBO, add ), ) ], ), ), InputWithSubtitle( subtitle: 'Peso (em kg - 000,000)', hintInput: 'Peso (em kg - 000,000)', errorInput: 'Campo obrigatório', labelInput: 'Peso (em kg - 000,000)', widthSubtitle: width*0.7, widthInput: width*0.7, controller: weigthController, colorBorder: ColorPalette.white, onChanged: (v)=>setState((){}), mandatory: mandatory, ), InputWithSubtitle( subtitle: 'Altura (em metros - 0,00)', hintInput: 'Altura (em metros - 0,00)', errorInput: 'Campo obrigatório', labelInput: 'Altura (em metros - 0,00)', widthSubtitle: width*0.7, widthInput: width*0.7, controller: heightController, colorBorder: ColorPalette.white, onChanged: (v)=>setState((){}), mandatory: mandatory, ), InputWithSubtitle( subtitle: 'Perímetro cefálico (em centímetros - 000,00)', hintInput: 'Perímetro cefálico (em centímetros - 000,00)', errorInput: 'Campo obrigatório', labelInput: 'Perímetro cefálico (em centímetros - 000,00)', widthSubtitle: width*0.7, widthInput: width*0.7, controller: cephalicPerimeterController, colorBorder: ColorPalette.white, onChanged: (v)=>setState((){}), mandatory: mandatory, ), SwitchWithSubtitle( width: width*0.7, title: 'Vacina em Dia', value: switchVaccineUpToDate, onChanged: (value)=>setState(()=>switchVaccineUpToDate=value) ), DropdownWithSubtitle( list: ['EXCLUSIVO','PREDOMINANTE','COMPLEMENTADO','INEXISTENTE'], widthSubtitle: width*0.7, subtitle: 'Aleitamento Materno', hintDropdown: 'Aleitamento Materno', select: selectBreastfeeding, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged:widget.dataPatient['SEXO']=='M'?null: (value)=>setState(()=>selectBreastfeeding = value!), colorBorder: ColorPalette.white, ), ], ) ], ) ], ), ), Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Profissional'), Row( children: [ Container( height: heigth*0.3, width: width*0.2, child: Icon(Icons.business_center,size: 80,), ), Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ InputWithSubtitle( subtitle: 'Usuário responsável Pelo Cadastro', hintInput: 'Usuário responsável Pelo Cadastro', errorInput: 'Campo obrigatório', labelInput: 'Usuário responsável Pelo Cadastro', widthSubtitle: width*0.7, widthInput: width*0.7, controller: userResponsibleRegisterController, colorBorder: ColorPalette.white, enabled: false, onChanged: (v)=>setState((){}), ), InputWithSubtitle( subtitle: 'Unidade do Profissional', hintInput:'Unidade do Profissional', errorInput: 'Campo obrigatório', labelInput: 'Unidade do Profissional', widthSubtitle: width*0.7, widthInput: width*0.7, controller: userUnitController, colorBorder: ColorPalette.white, enabled: false, onChanged: (v)=>setState((){}), ), DropdownWithSubtitle( list: [], widthSubtitle: width*0.7, subtitle: 'CBO', hintDropdown: 'CBO', select: selectCBO, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value){ setState(() { selectCBO = value!; }); }, colorBorder: ColorPalette.white, ), DropdownWithSubtitle( list: ['INE: 0001558536 / Área: 4 - Microárea:-'], widthSubtitle: width*0.2, subtitle: 'Código da Equipe', hintDropdown: 'Código da Equipe', select: selectCodTeam, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value)=>setState(()=>selectCodTeam = value!), colorBorder: ColorPalette.white, ), ], ) ], ) ], ), ), Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Gestante'), Row( children: [ Container( height: heigth*0.3, width: width*0.2, child: Icon(Icons.business_center,size: 80,), ), Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ InputWithSubtitle( subtitle: 'DUM', hintInput: 'DUM', errorInput: 'Campo obrigatório', labelInput: 'DUM', widthSubtitle: width*0.7, widthInput: width*0.7, controller: dumController, colorBorder: ColorPalette.white, enabled: false, onChanged: (v)=>setState((){}), ), SwitchWithSubtitle( onChanged: (value){}, value: switchPregnancyPlane, width: width*0.65, title: 'Gravidez Planejada' ), InputWithSubtitle( subtitle: 'Idade Gestacional', hintInput:'Idade Gestacional', errorInput: 'Campo obrigatório', labelInput: 'Idade Gestacional', widthSubtitle: width*0.7, widthInput: width*0.7, controller: oldPregnancyController, colorBorder: ColorPalette.white, enabled: false, onChanged: (v)=>setState((){}), ), InputWithSubtitle( subtitle: 'Partos', hintInput:'Partos', errorInput: 'Campo obrigatório', labelInput: 'Partos', widthSubtitle: width*0.7, widthInput: width*0.7, controller: childBirthsController, colorBorder: ColorPalette.white, enabled: false, onChanged: (v)=>setState((){}), ), ], ) ], ) ], ), ), Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Atendimento'), Row( children: [ Container( height: heigth*0.4, width: width*0.2, child: Icon(LineIcons.edit,size: 80,), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 0.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ DropdownWithSubtitle( list: ['ATENÇÃO DOMICILIAR 1','ATENÇÃO DOMICILIAR 2','ATENÇÃO DOMICILIAR 3',], widthSubtitle: width*0.5, subtitle: 'Modalidade', hintDropdown:'Modalidade', select: selectModelService, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value)=>setState(()=>selectModelService = value!), colorBorder: ColorPalette.white, ), TitleContainers(title: 'Condição Avaliada',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.5, child: GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( mainAxisSpacing: 2, crossAxisSpacing: 2, crossAxisCount: 2, mainAxisExtent: 50 ), physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().serviceIndividualCheckBoxList.length, itemBuilder: (context,index){ serviceConditionModel.add( CheckModel( cod: 0, subtitle: ConstVariable().serviceIndividualCheckBoxList[index], check: false ) ); return CheckBoxSubtitle( subtitle: serviceConditionModel[index].subtitle, checkbox:serviceConditionModel[index].check, width: width*0.25, fontSize: 12, onChanged: (value)=>setState(()=>serviceConditionModel[index].check=value), ); } ), ), TitleContainers(title: 'Doenças Transmissíveis',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.15, child: GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( mainAxisSpacing: 2, crossAxisSpacing: 2, crossAxisCount: 2, mainAxisExtent: 50 ), physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().communicableDiseasesList.length, itemBuilder: (context,index){ communicableDiseasesModel.add( CheckModel( cod: 0, subtitle: ConstVariable().communicableDiseasesList[index], check: false ) ); return CheckBoxSubtitle( subtitle: communicableDiseasesModel[index].subtitle, checkbox:communicableDiseasesModel[index].check, width: width*0.25, fontSize: 12, onChanged: (value)=>setState(()=>communicableDiseasesModel[index].check=value), ); } ), ), TitleContainers(title: 'Rastreamento',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.15, child: ListView.builder( physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().trackingModelList.length, itemBuilder: (context,index){ trackingModel.add( CheckModel( cod: 0, subtitle: ConstVariable().trackingModelList[index], check: false ) ); return CheckBoxSubtitle( subtitle: trackingModel[index].subtitle, checkbox:trackingModel[index].check, width: width*0.5, fontSize: 12, onChanged: (value)=>setState(()=>trackingModel[index].check=value), ); } ), ), GestureDetector( onTap: ()=>AlertDialogDefault().alert_with_search( context, controllerSearchCondition, ListView.separated( itemCount: listCIAP.length, separatorBuilder: (context,index)=>Divider(color: ColorPalette.black54), itemBuilder: (context,index){ return ListTile( onTap: ()=>setState(() { selectCIAP1 = listCIAP[index].title; Navigator.pop(context); }), title: TextDefault(text: listCIAP[index].title,maxLines: 2,) ); }, ) ), child: Container( padding: EdgeInsets.symmetric(vertical: 10), width: width*0.7, child: TextDefault( text: selectCIAP1!=null?'CIAP2-01 $selectCIAP1':'CIAP2-01', color: ColorPalette.black54, ) ) ), GestureDetector( onTap: ()=>AlertDialogDefault().alert_with_search( context, controllerSearchCondition, ListView.separated( itemCount: listCIAP.length, separatorBuilder: (context,index)=>Divider(color: ColorPalette.black54), itemBuilder: (context,index){ return ListTile( onTap: ()=>setState(() { selectCIAP2 = listCIAP[index].title; Navigator.pop(context); }), title: TextDefault(text: listCIAP[index].title,maxLines: 2,) ); }, ) ), child: Container( padding: EdgeInsets.symmetric(vertical: 10), width: width*0.7, child: TextDefault( text: selectCIAP2!=null?'CIAP2-01 $selectCIAP2':'CIAP2-01', color: ColorPalette.black54, ) ) ), GestureDetector( onTap: ()=>AlertDialogDefault().alert_with_search( context, controllerSearchCID, ListView.separated( itemCount: listCIAP.length, separatorBuilder: (context,index)=>Divider(color: ColorPalette.black54), itemBuilder: (context,index){ return ListTile( onTap: ()=>setState(() { selectCID = listCIAP[index].title; Navigator.pop(context); }), title: TextDefault(text: listCIAP[index].title,maxLines: 2,) ); }, ) ), child: Container( padding: EdgeInsets.symmetric(vertical: 10), width: width*0.7, child: TextDefault( text: selectCID!=null?'CID $selectCID':'CID', color: ColorPalette.black54, ) ) ), GestureDetector( onTap: ()=>AlertDialogDefault().alert_with_search( context, controllerSearchCID, ListView.separated( itemCount: listCIAP.length, separatorBuilder: (context,index)=>Divider(color: ColorPalette.black54), itemBuilder: (context,index){ return ListTile( onTap: ()=>setState(() { selectCID = listCIAP[index].title; Navigator.pop(context); }), title: TextDefault(text: listCIAP[index].title,maxLines: 2,) ); }, ) ), child: Container( padding: EdgeInsets.symmetric(vertical: 10), width: width*0.7, child: TextDefault( text: selectCID!=null?'CID $selectCID':'CID', color: ColorPalette.black54, ) ) ), TitleContainers(title: 'Triagem Neonatal',width: width * 0.73,textAling: TextAlign.start), SwitchWithSubtitle( onChanged: (v)=>setState(()=>switchResquestedTest=v), value: switchResquestedTest, width: width*0.7, title: 'Exames Solicitados' ), SwitchWithSubtitle( onChanged: (v)=>setState(()=>switchAvalibleTest=v), value: switchAvalibleTest, width: width*0.7, title: 'Exames Avaliados' ), Container( width: width*0.7, child: Row( children: [ TextDefault(text: 'Outros Exames',fontSize: 20,color: ColorPalette.black54,), Spacer(), IconButton( icon: Icon(Icons.add_circle), onPressed: ()=>AlertDialogDefault().otherExams( context, 'Outros Exames', 'Adicionar Exames', selectProfessionals, selectCBO, add, examsList, selectExamsRequested, selectExamsAvalible ), ) ], ), ), DropdownWithSubtitle( list: [ 'MEDICINA TRADICIONAL CHINESA', 'ANTROPOSOFIA APLICA À SAÚDE', 'HOMEOPATIA', 'FITOTERATIA', 'AYURVEDA', 'OUTROS', ], widthSubtitle: width*0.5, subtitle: 'Racionalidade em Saúde', hintDropdown: 'Racionalidade em Saúde', select: selectRationalityHealth, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value)=>setState(()=>selectRationalityHealth = value!), colorBorder: ColorPalette.white, ), SwitchWithSubtitle( onChanged: (v)=>setState(()=>switchUnderObservation=v), width: width*0.7, value: switchUnderObservation, title: 'Ficou em Observação' ), TitleContainers(title: 'NASF/Polo',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.15, child: ListView.builder( physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().nasfPoloModelList.length, itemBuilder: (context,index){ nasfPoloModelList.add( CheckModel( cod: 0, subtitle: ConstVariable().nasfPoloModelList[index], check: false ) ); return CheckBoxSubtitle( subtitle: nasfPoloModelList[index].subtitle, checkbox:nasfPoloModelList[index].check, width: width*0.5, fontSize: 12, onChanged: (value)=>setState(()=>nasfPoloModelList[index].check=value), ); } ), ), TitleContainers(title: 'Conduta',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.3, child: ListView.builder( physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().conductModelList.length, itemBuilder: (context,index){ conductList.add( CheckModel( cod: 0, subtitle: ConstVariable().conductModelList[index], check: false ) ); return CheckBoxSubtitle( subtitle: conductList[index].subtitle, checkbox:conductList[index].check, width: width*0.5, fontSize: 12, onChanged: (value)=>setState(()=>conductList[index].check=value), ); } ), ), TitleContainers(title: 'Encaminhamento',width: width * 0.73,textAling: TextAlign.start), Container( width: width*0.7, height: heigth*0.35, child: ListView.builder( physics: const NeverScrollableScrollPhysics(), itemCount: ConstVariable().forwardingModelList.length, itemBuilder: (context,index){ forwardingList.add( CheckModel( cod: 0, subtitle: ConstVariable().forwardingModelList[index], check: false ) ); return CheckBoxSubtitle( subtitle: forwardingList[index].subtitle, checkbox:forwardingList[index].check, width: width*0.5, fontSize: 12, onChanged: (value)=>setState(()=>forwardingList[index].check=value), ); } ), ), ], ), ), ] ), ], ), ), Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Procedimentos'), Row( children: [ Container( height: heigth*0.15, width: width*0.2, child: Icon(LineIcons.infoCircle,size: 80,), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ SwitchWithSubtitle( onChanged: (v)=>setState(()=>switchListenStart=v), value: switchListenStart, width: width*0.7, title: 'Escuta Inicial/Orientação' ), Container( width: width*0.7, child: Row( children: [ TextDefault(text: 'Procedimentos',fontSize: 20,color: ColorPalette.black54,), Spacer(), IconButton( icon: Icon(Icons.add_circle), onPressed: (){} ) ], ), ), ], ), ) ], ), ], ), ), Card( margin: EdgeInsets.all(10), child: Column( children: [ TitleContainers(title: 'Complemento'), Row( children: [ Container( height: heigth*0.15, width: width*0.2, child: Icon(Icons.attach_file,size: 80,), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ InputText( controller: controllerComplement, width: width*0.7, maxLines: 4, colorBorder: ColorPalette.white, textInputType: TextInputType.multiline, ) ], ), ) ], ), ], ), ), Card( margin: EdgeInsets.all(10), child: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ ButtonDefault( onPressed: (){ if(heightController.text.isEmpty || heightController.text.isEmpty || cephalicPerimeterController.text.isEmpty){ mandatory = true; setState(() {}); } }, title: 'Salvar', borderColor: ColorPalette.appBar, background: ColorPalette.appBar, textColor: ColorPalette.white, width: double.infinity, ), ButtonDefault( onPressed: ()=>Navigator.pop(context), title: 'Cancelar', borderColor: ColorPalette.blackButton, background: ColorPalette.blackButton, textColor: ColorPalette.white, width: double.infinity, ), ], ), ), ), mandatory?Card( margin: EdgeInsets.all(10), child: Container( padding: EdgeInsets.all(10), child: Row( children: [ Icon(Icons.warning,color: Colors.red,), TextDefault(text: 'Existem campos obrigatórios não preenchidos.',color: ColorPalette.red,fontSize: 15,) ], ), ), color: ColorPalette.white, ):Container(), ], ), ), ), ); } }