AppUser object created. Add patient page with API call added nd completed

This commit is contained in:
2024-06-19 13:35:50 +02:00
parent a478324698
commit deda00c955
17 changed files with 324 additions and 57 deletions

View File

@@ -8,26 +8,25 @@ class MyButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return Padding(
onTap: onTap, padding: const EdgeInsets.all(25.0),
child: Container( child: ElevatedButton(
padding: const EdgeInsets.all(25), onPressed: onTap,
margin: const EdgeInsets.symmetric(horizontal: 25), style: ElevatedButton.styleFrom(
decoration: BoxDecoration( backgroundColor: Colors.blueAccent,
color: Colors.blueAccent, shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(12.0),
),
), ),
child: Center(
child: Text( child: Text(
buttonText, buttonText,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, //fontWeight: FontWeight.bold,
fontSize: 20, fontSize: 20,
color: Colors.white, color: Colors.white,
), ),
), ),
), ),
),
); );
} }
} }

View File

@@ -20,7 +20,7 @@ class MzanziInnovationHub extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const MaterialApp( return const MaterialApp(
title: 'Mzanzi Innovation Hub', title: 'Mzansi Innovation Hub',
themeMode: ThemeMode.system, themeMode: ThemeMode.system,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
initialRoute: '/', initialRoute: '/',

View File

@@ -0,0 +1,15 @@
class AppUser {
final int idusers;
final String email;
final int docOffice_id;
const AppUser(
this.idusers,
this.email,
this.docOffice_id,
);
factory AppUser.fromJson(dynamic json) {
return AppUser(json['idusers'], json['email'], json['docOffice_id']);
}
}

View File

@@ -37,7 +37,7 @@ class _HomeState extends State<Home> {
builder: (contexts, snapshot) { builder: (contexts, snapshot) {
if (snapshot.connectionState == ConnectionState.done) { if (snapshot.connectionState == ConnectionState.done) {
return Scaffold( return Scaffold(
appBar: const MyAppBar(barTitle: "Mzanzi Innovation Hub"), appBar: const MyAppBar(barTitle: "Mzansi Innovation Hub"),
drawer: MyAppDrawer( drawer: MyAppDrawer(
drawerTitle: useremail, drawerTitle: useremail,
), ),

View File

@@ -0,0 +1,250 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:patient_manager/components/myTextInput.dart';
import 'package:patient_manager/components/mybutton.dart';
import '../components/myAppBar.dart';
import 'package:http/http.dart' as http;
import '../objects/AppUser.dart';
class AddPatient extends StatefulWidget {
final String userEmail;
const AddPatient({
super.key,
required this.userEmail,
});
@override
State<AddPatient> createState() => _AddPatientState();
}
class _AddPatientState extends State<AddPatient> {
final idController = TextEditingController();
final fnameController = TextEditingController();
final lnameController = TextEditingController();
final cellController = TextEditingController();
final emailController = TextEditingController();
final medNoController = TextEditingController();
final medNameController = TextEditingController();
final medSchemeController = TextEditingController();
final addressController = TextEditingController();
final docOfficeIdApiUrl = "http://localhost:80/docOffices/user/";
final apiUrl = "http://localhost:80/patients/insert/";
late int futureDocOfficeId;
Future getOfficeIdByUser(String endpoint) async {
print("here1.1");
final response = await http.get(Uri.parse(endpoint));
print("here1.2");
if (response.statusCode == 200) {
print("here1.3");
String body = response.body;
print(body);
print("here1.4");
var decodedData = jsonDecode(body);
print("here1.5");
AppUser u = AppUser.fromJson(decodedData as Map<String, dynamic>);
print("here1.6");
setState(() {
futureDocOfficeId = u.docOffice_id;
//print(futureDocOfficeId);
});
} else {
throw Exception('failed to load patients');
}
}
Future<void> addPatientAPICall() async {
print("here1");
await getOfficeIdByUser(docOfficeIdApiUrl + widget.userEmail);
print(futureDocOfficeId.toString());
print("here2");
var response = await http.post(
Uri.parse(apiUrl),
headers: <String, String>{
"Content-Type": "application/json; charset=UTF-8"
},
body: jsonEncode(<String, dynamic>{
"id_no": idController.text,
"first_name": fnameController.text,
"last_name": lnameController.text,
"email": emailController.text,
"cell_no": cellController.text,
"medical_aid_name": medNameController.text,
"medical_aid_no": medNoController.text,
"medical_aid_scheme": medSchemeController.text,
"address": addressController.text,
"doc_office_id": futureDocOfficeId,
}),
);
print("here3");
if (response.statusCode == 201) {
Navigator.of(context)
.pushNamed('/patient-manager', arguments: widget.userEmail);
messagePopUp(fnameController.text +
" " +
lnameController.text +
" Successfully added");
} else {
messagePopUp("error");
}
}
void messagePopUp(error) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(error),
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const MyAppBar(barTitle: "Add Patient"),
body: Padding(
padding: const EdgeInsets.all(15.0),
child: SingleChildScrollView(
child: Column(
children: [
const Text(
"Personal Details",
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25.0,
//color: Colors.blueAccent,
),
),
Row(
children: [
Expanded(
child: MyTextField(
controller: idController,
hintText: "13 digit ID Number or Passport"),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: fnameController,
hintText: "First Name",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: lnameController,
hintText: "Last Name",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: cellController,
hintText: "Cell Number",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: emailController,
hintText: "Email",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: addressController,
hintText: "Address",
),
),
],
),
const SizedBox(height: 15.0),
const Text(
"Medical Aid Details",
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25.0,
//color: Colors.blueAccent,
),
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: medNoController,
hintText: "Medical Aid No.",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: medNameController,
hintText: "Medical Aid Name",
),
),
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: MyTextField(
controller: medSchemeController,
hintText: "Medical Aid Scheme",
),
),
],
),
//const SizedBox(height: 10.0),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 500.0,
height: 100.0,
child: MyButton(
onTap: addPatientAPICall,
buttonText: "Add",
),
),
],
),
],
),
),
),
);
}
}

View File

@@ -53,14 +53,21 @@ class _PatientManagerState extends State<PatientManager> {
//floatingActionButtonLocation: FloatingActionButtonLocation.endTop, //floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
floatingActionButton: FloatingActionButton.extended( floatingActionButton: FloatingActionButton.extended(
label: const Text( label: const Text(
"Create", "Add Patient",
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.white,
), ),
), ),
backgroundColor: Colors.blueAccent, backgroundColor: Colors.blueAccent,
onPressed: () {}, onPressed: () {
icon: const Icon(Icons.add), Navigator.of(context)
.pushNamed('/patient-manager/add', arguments: widget.userEmail);
},
icon: const Icon(
Icons.add,
color: Colors.white,
),
), ),
body: FutureBuilder( body: FutureBuilder(
future: futurePatients, future: futurePatients,

View File

@@ -17,7 +17,8 @@ class _PatientViewState extends State<PatientView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: const MyAppBar(barTitle: "Patient View"), appBar: const MyAppBar(barTitle: "Patient View"),
body: Padding( body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0), padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0),
child: Column( child: Column(
children: [ children: [
@@ -38,6 +39,7 @@ class _PatientViewState extends State<PatientView> {
], ],
), ),
), ),
),
); );
} }
} }

View File

@@ -96,26 +96,10 @@ class _SignInState extends State<SignIn> {
), ),
//spacer //spacer
const SizedBox(height: 10), const SizedBox(height: 10),
// forgot password
const Padding(
padding: EdgeInsets.symmetric(horizontal: 25.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'Forgot Password?',
style: TextStyle(
color: Colors.white,
),
),
],
),
),
//spacer
const SizedBox(height: 50),
// sign in button // sign in button
SizedBox( SizedBox(
width: 500.0, width: 500.0,
height: 100.0,
child: MyButton( child: MyButton(
onTap: signUserIn, onTap: signUserIn,
buttonText: "Sign In", buttonText: "Sign In",

View File

@@ -2,6 +2,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:patient_manager/Authentication/authCheck.dart'; import 'package:patient_manager/Authentication/authCheck.dart';
import 'package:patient_manager/components/myAppBar.dart'; import 'package:patient_manager/components/myAppBar.dart';
import 'package:patient_manager/pages/patientAdd.dart';
import 'package:patient_manager/components/signInOrRegister.dart'; import 'package:patient_manager/components/signInOrRegister.dart';
import 'package:patient_manager/objects/patients.dart'; import 'package:patient_manager/objects/patients.dart';
import 'package:patient_manager/pages/home.dart'; import 'package:patient_manager/pages/home.dart';
@@ -26,6 +27,15 @@ class RouteGenerator {
); );
} }
return _errorRoute(); return _errorRoute();
case '/patient-manager/add':
if (args is String) {
return MaterialPageRoute(
builder: (_) => AddPatient(
userEmail: args,
),
);
}
return _errorRoute();
case '/patient-manager/patient': case '/patient-manager/patient':
if (args is Patient) { if (args is Patient) {
return MaterialPageRoute( return MaterialPageRoute(

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.