From 16fcd2783f0ad237b1d6e9d17854b309a08a2218 Mon Sep 17 00:00:00 2001 From: yaso-meth Date: Sat, 13 Apr 2024 14:06:52 +0200 Subject: [PATCH] update loading screen title & add notes list to patient view screen --- .../lib/components/buildNotesList.dart | 38 ++++++++ .../lib/components/buildPatientList.dart | 5 +- .../lib/components/patientNotes.dart | 90 +++++++++++++++++++ .../patient_manager/lib/objects/notes.dart | 35 ++++++++ .../lib/pages/patientManager.dart | 3 - .../lib/pages/patientView.dart | 17 +++- Frontend/patient_manager/web/index.html | 4 +- 7 files changed, 181 insertions(+), 11 deletions(-) create mode 100644 Frontend/patient_manager/lib/components/buildNotesList.dart create mode 100644 Frontend/patient_manager/lib/components/patientNotes.dart create mode 100644 Frontend/patient_manager/lib/objects/notes.dart diff --git a/Frontend/patient_manager/lib/components/buildNotesList.dart b/Frontend/patient_manager/lib/components/buildNotesList.dart new file mode 100644 index 00000000..86aecc5b --- /dev/null +++ b/Frontend/patient_manager/lib/components/buildNotesList.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:patient_manager/objects/notes.dart'; + +class BuildNotesList extends StatefulWidget { + final List notes; + const BuildNotesList({ + super.key, + required this.notes, + }); + + @override + State createState() => _BuildNotesListState(); +} + +int indexOn = 0; + +class _BuildNotesListState extends State { + @override + Widget build(BuildContext context) { + return ListView.separated( + shrinkWrap: true, + separatorBuilder: (BuildContext context, int index) { + return const Divider(); + }, + itemCount: widget.notes.length, + itemBuilder: (context, index) { + return ListTile( + title: Text( + widget.notes[index].note_name, + ), + subtitle: Text(widget.notes[index].note_text), + trailing: const Icon(Icons.arrow_forward), + onTap: () {}, + ); + }, + ); + } +} diff --git a/Frontend/patient_manager/lib/components/buildPatientList.dart b/Frontend/patient_manager/lib/components/buildPatientList.dart index 7c1b488e..b3331937 100644 --- a/Frontend/patient_manager/lib/components/buildPatientList.dart +++ b/Frontend/patient_manager/lib/components/buildPatientList.dart @@ -28,9 +28,8 @@ class _BuildPatientsListState extends State { //final patient = widget.patients[index].id_no.contains(widget.searchString); return widget.patients[index].id_no.contains(widget.searchString) ? ListTile( - title: Text(widget.patients[index].first_name + - " " + - widget.patients[index].last_name), + title: Text( + "${widget.patients[index].first_name} ${widget.patients[index].last_name}"), subtitle: Text(widget.patients[index].id_no), onTap: () { setState(() { diff --git a/Frontend/patient_manager/lib/components/patientNotes.dart b/Frontend/patient_manager/lib/components/patientNotes.dart new file mode 100644 index 00000000..21ec9408 --- /dev/null +++ b/Frontend/patient_manager/lib/components/patientNotes.dart @@ -0,0 +1,90 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:patient_manager/components/buildNotesList.dart'; +import 'package:patient_manager/objects/notes.dart'; +import 'package:http/http.dart' as http; + +Future> fetchNotes(String endpoint) async { + final response = await http.get(Uri.parse(endpoint)); + if (response.statusCode == 200) { + Iterable l = jsonDecode(response.body); + List notes = List.from(l.map((model) => Note.fromJson(model))); + return notes; + } else { + throw Exception('failed to load patients'); + } +} + +class PatientNotes extends StatefulWidget { + final int patientIndex; + const PatientNotes({super.key, required this.patientIndex}); + + @override + State createState() => _PatientNotesState(); +} + +class _PatientNotesState extends State { + String endpoint = "http://localhost:80/notes/patients/"; + late Future> futueNotes; + + @override + void initState() { + futueNotes = fetchNotes(endpoint + widget.patientIndex.toString()); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: futueNotes, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const CircularProgressIndicator(); + } else if (snapshot.hasData) { + final notesList = snapshot.data!; + return Expanded( + flex: 1, + child: Padding( + padding: const EdgeInsets.all(10.0), + child: Card( + elevation: 20.0, + child: Container( + decoration: const BoxDecoration( + color: Color.fromARGB(255, 219, 218, 218), + borderRadius: BorderRadius.all( + Radius.circular(10), + ), + ), + child: Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Column(children: [ + const Text( + "Notes", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 35, + fontWeight: FontWeight.bold, + ), + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0), + child: Divider(), + ), + const SizedBox(height: 10), + BuildNotesList(notes: notesList), + ]), + ), + ), + ), + ), + ); + } else { + return const Center( + child: Text("Error Loading Notes"), + ); + } + }, + ); + } +} diff --git a/Frontend/patient_manager/lib/objects/notes.dart b/Frontend/patient_manager/lib/objects/notes.dart new file mode 100644 index 00000000..fac7ec19 --- /dev/null +++ b/Frontend/patient_manager/lib/objects/notes.dart @@ -0,0 +1,35 @@ +class Note { + final int idpatient_notes; + final String note_name; + final String note_text; + final int patient_id; + final String insert_date; + + const Note({ + required this.idpatient_notes, + required this.note_name, + required this.note_text, + required this.patient_id, + required this.insert_date, + }); + + factory Note.fromJson(Map json) { + return switch (json) { + { + "idpatient_notes": int idpatient_notes, + "note_name": String note_name, + "note_text": String note_text, + "patient_id": int patient_id, + "insert_date": String insert_date, + } => + Note( + idpatient_notes: idpatient_notes, + note_name: note_name, + note_text: note_text, + patient_id: patient_id, + insert_date: insert_date, + ), + _ => throw const FormatException('Failed to load album.'), + }; + } +} diff --git a/Frontend/patient_manager/lib/pages/patientManager.dart b/Frontend/patient_manager/lib/pages/patientManager.dart index c40751ea..0e639bc2 100644 --- a/Frontend/patient_manager/lib/pages/patientManager.dart +++ b/Frontend/patient_manager/lib/pages/patientManager.dart @@ -6,7 +6,6 @@ import 'package:patient_manager/components/buildPatientList.dart'; import 'package:patient_manager/components/myAppBar.dart'; import 'package:patient_manager/components/myAppDrawer.dart'; import 'package:http/http.dart' as http; -import 'package:mysql_client/mysql_client.dart'; import 'package:patient_manager/components/mySearchInput.dart'; import 'package:patient_manager/objects/patients.dart'; @@ -37,8 +36,6 @@ class PatientManager extends StatefulWidget { class _PatientManagerState extends State { TextEditingController searchController = TextEditingController(); String endpoint = "http://localhost:80/patients/user/"; - late MySQLConnection conn; - String resultsofDB = ""; late Future> futurePatients; String searchString = ""; diff --git a/Frontend/patient_manager/lib/pages/patientView.dart b/Frontend/patient_manager/lib/pages/patientView.dart index d925d340..b6306725 100644 --- a/Frontend/patient_manager/lib/pages/patientView.dart +++ b/Frontend/patient_manager/lib/pages/patientView.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:patient_manager/components/PatientDetails.dart'; import 'package:patient_manager/components/myAppBar.dart'; +import 'package:patient_manager/components/patientNotes.dart'; import 'package:patient_manager/objects/patients.dart'; class PatientView extends StatefulWidget { @@ -21,12 +22,22 @@ class _PatientViewState extends State { child: Column( children: [ PatientDetails(selectedPatient: widget.selectedPatient), + const SizedBox( + height: 10.0, + ), + Row( + children: [ + PatientNotes( + patientIndex: widget.selectedPatient.idpatients, + ), + PatientNotes( + patientIndex: widget.selectedPatient.idpatients, + ) + ], + ) ], ), ), ); - // Center( - // child: Text(widget.selectedPatient.first_name), - // ), } } diff --git a/Frontend/patient_manager/web/index.html b/Frontend/patient_manager/web/index.html index 97f8356d..15e6d074 100644 --- a/Frontend/patient_manager/web/index.html +++ b/Frontend/patient_manager/web/index.html @@ -23,13 +23,13 @@ - + - patient_manager + Mzanzi Innovation Hub