Add note functionality added & multi Line text input compoment added

This commit is contained in:
2024-06-20 14:56:50 +02:00
parent cc730223e0
commit 3a408e8464
12 changed files with 218 additions and 50 deletions
@@ -17,7 +17,9 @@ int indexOn = 0;
class _BuildNotesListState extends State<BuildNotesList> {
@override
Widget build(BuildContext context) {
return ListView.separated(
return Container(
height: 290.0,
child: ListView.separated(
shrinkWrap: true,
separatorBuilder: (BuildContext context, int index) {
return const Divider();
@@ -49,6 +51,7 @@ class _BuildNotesListState extends State<BuildNotesList> {
},
);
},
),
);
}
}
@@ -0,0 +1,53 @@
import 'package:flutter/material.dart';
class MyMLTextField extends StatelessWidget {
final controller;
final String hintText;
final bool editable;
const MyMLTextField({
super.key,
required this.controller,
required this.hintText,
required this.editable,
});
bool makeEditable() {
if (editable) {
return false;
} else {
return true;
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextField(
textAlign: TextAlign.start,
textAlignVertical: TextAlignVertical.top,
expands: true,
maxLines: null,
controller: controller,
readOnly: makeEditable(),
obscureText: false,
decoration: InputDecoration(
fillColor: Colors.white,
filled: true,
hintText: hintText,
hintStyle: TextStyle(color: Colors.blueGrey[400]),
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(
color: Colors.blueAccent,
width: 2.0,
),
),
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.blue),
),
),
),
);
}
}
@@ -2,6 +2,8 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:patient_manager/components/buildNotesList.dart';
import 'package:patient_manager/components/myMLTextInput.dart';
import 'package:patient_manager/components/myTextInput.dart';
import 'package:patient_manager/objects/notes.dart';
import 'package:http/http.dart' as http;
@@ -26,8 +28,47 @@ class PatientNotes extends StatefulWidget {
class _PatientNotesState extends State<PatientNotes> {
String endpoint = "http://localhost:80/notes/patients/";
String apiUrlAddNote = "http://localhost:80/notes/insert/";
final titleController = TextEditingController();
final noteTextController = TextEditingController();
late Future<List<Note>> futueNotes;
Future<void> addPatientNoteAPICall() async {
var response = await http.post(
Uri.parse(apiUrlAddNote),
headers: <String, String>{
"Content-Type": "application/json; charset=UTF-8"
},
body: jsonEncode(<String, dynamic>{
"note_name": titleController.text,
"note_text": noteTextController.text,
"patient_id": widget.patientIndex,
}),
);
if (response.statusCode == 201) {
setState(() {
futueNotes = fetchNotes(endpoint + widget.patientIndex.toString());
});
// Navigator.of(context)
// .pushNamed('/patient-manager', arguments: widget.userEmail);
String message = "Successfully added Note";
messagePopUp(message);
} else {
messagePopUp("error");
}
}
void messagePopUp(error) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(error),
);
},
);
}
@override
void initState() {
futueNotes = fetchNotes(endpoint + widget.patientIndex.toString());
@@ -43,13 +84,13 @@ class _PatientNotesState extends State<PatientNotes> {
return const CircularProgressIndicator();
} else if (snapshot.hasData) {
final notesList = snapshot.data!;
return Expanded(
flex: 1,
return Flexible(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Card(
elevation: 20.0,
child: Container(
//height: 300.0,
decoration: const BoxDecoration(
color: Color.fromARGB(255, 219, 218, 218),
borderRadius: BorderRadius.all(
@@ -58,7 +99,11 @@ class _PatientNotesState extends State<PatientNotes> {
),
child: Padding(
padding: const EdgeInsets.only(top: 5.0),
child: Expanded(
child: Column(children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
"Notes",
textAlign: TextAlign.center,
@@ -67,6 +112,67 @@ class _PatientNotesState extends State<PatientNotes> {
fontWeight: FontWeight.bold,
),
),
IconButton(
onPressed: () {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text("Add Note"),
],
),
content: Column(
children: [
SizedBox(
width: 700,
child: MyTextField(
controller: titleController,
hintText: "Title of Note",
editable: true,
),
),
const SizedBox(
height: 25.0,
),
Expanded(
child: MyMLTextField(
controller: noteTextController,
hintText: "Note Details",
editable: true,
),
),
],
),
actions: [
TextButton(
onPressed: () {
addPatientNoteAPICall();
Navigator.pop(context);
//print(widget.patientIndex);
},
child: const Text(
"Submit",
style: TextStyle(
fontWeight: FontWeight.bold),
),
),
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("Cancel"),
)
],
),
);
},
icon: const Icon(Icons.add),
)
],
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: Divider(),
@@ -78,6 +184,7 @@ class _PatientNotesState extends State<PatientNotes> {
),
),
),
),
);
} else {
return const Center(
@@ -207,7 +207,12 @@ class _EditPatientState extends State<EditPatient> {
onPressed: () {
deletePatientApiCall();
},
child: const Text("Yes"),
child: const Text(
"Yes",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
TextButton(
onPressed: () {
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.