From 3a509dd7212d7c4d867d48b47996f7d3ef597cc5 Mon Sep 17 00:00:00 2001 From: yaso-meth Date: Fri, 5 Jul 2024 15:25:27 +0200 Subject: [PATCH] Patient Manager search function fixed to display only matches --- .../lib/components/buildPatientList.dart | 7 +- .../lib/pages/patientManager.dart | 108 ++++++++++++------ 2 files changed, 74 insertions(+), 41 deletions(-) diff --git a/Frontend/patient_manager/lib/components/buildPatientList.dart b/Frontend/patient_manager/lib/components/buildPatientList.dart index bad6bfa0..d811f6c4 100644 --- a/Frontend/patient_manager/lib/components/buildPatientList.dart +++ b/Frontend/patient_manager/lib/components/buildPatientList.dart @@ -15,18 +15,17 @@ class BuildPatientsList extends StatefulWidget { State createState() => _BuildPatientsListState(); } -int indexOn = 0; - class _BuildPatientsListState extends State { @override Widget build(BuildContext context) { return ListView.separated( - separatorBuilder: (BuildContext context, int index) { + separatorBuilder: (BuildContext context, index) { return const Divider(); }, itemCount: widget.patients.length, itemBuilder: (context, index) { //final patient = widget.patients[index].id_no.contains(widget.searchString); + //print(index); return widget.patients[index].id_no.contains(widget.searchString) ? ListTile( title: Text( @@ -40,7 +39,7 @@ class _BuildPatientsListState extends State { }, trailing: const Icon(Icons.arrow_forward), ) - : Container(); + : null; }, ); } diff --git a/Frontend/patient_manager/lib/pages/patientManager.dart b/Frontend/patient_manager/lib/pages/patientManager.dart index 63258d64..170adf12 100644 --- a/Frontend/patient_manager/lib/pages/patientManager.dart +++ b/Frontend/patient_manager/lib/pages/patientManager.dart @@ -25,6 +25,8 @@ class _PatientManagerState extends State { TextEditingController searchController = TextEditingController(); String endpoint = "http://localhost:80/patients/user/"; late Future> futurePatients; + // late Widget displayWidget; + //List tempList; String searchString = ""; Future> fetchPatients(String endpoint) async { @@ -41,9 +43,32 @@ class _PatientManagerState extends State { } } + List filterSearchResults(List mainList, String query) { + return mainList + .where((tempList) => tempList.id_no.contains(query.toLowerCase())) + .toList(); + } + + // Widget displayList(List patientsList, String searchString) { + // if (searchString.isNotEmpty && searchString != "") { + // return BuildPatientsList( + // patients: patientsList, + // searchString: searchString, + // ); + // } + // return const Center( + // child: Text( + // "Please search for a Patient.", + // style: TextStyle(fontSize: 25, color: Colors.grey), + // textAlign: TextAlign.center, + // ), + // ); + // } + @override void initState() { futurePatients = fetchPatients(endpoint + widget.userEmail); + //displayWidget = displayList(tempList, searchString); super.initState(); } @@ -71,48 +96,57 @@ class _PatientManagerState extends State { color: Colors.white, ), ), - body: FutureBuilder( - future: futurePatients, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const Center(child: CircularProgressIndicator()); - } else if (snapshot.hasData) { - final patientsList = snapshot.data!; + body: Row( + children: [ + Expanded( + child: Column(children: [ + //spacer + const SizedBox(height: 10), + MySearchField( + controller: searchController, + hintText: "ID Search", + required: false, + editable: true, + onTap: () {}, + onChanged: (value) { + setState(() { + searchString = value; + }); + }, + ), + //spacer + const SizedBox(height: 10), + //Expanded(child: displayWidget), + FutureBuilder( + future: futurePatients, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } else if (snapshot.hasData) { + List patientsList; + //print(patientsList); + if (searchString == "") { + patientsList = snapshot.data!; + } else { + patientsList = + filterSearchResults(snapshot.data!, searchString); + } - return Row( - children: [ - Expanded( - child: Column(children: [ - //spacer - const SizedBox(height: 10), - MySearchField( - controller: searchController, - hintText: "ID Search", - required: false, - editable: true, - onTap: () {}, - onChanged: (value) { - setState(() { - searchString = value; - }); - }, - ), - //spacer - const SizedBox(height: 10), - Expanded( + return Expanded( child: BuildPatientsList( patients: patientsList, searchString: searchString, ), - ), - ]), - ), - ], - ); - } else { - return const PatManAppDrawer(userEmail: "Error pulling email"); - } - }, + ); + } else { + return const PatManAppDrawer( + userEmail: "Error pulling email"); + } + }, + ), + ]), + ), + ], ), ); }