Skip to content

Commit

Permalink
improves responsiveness and remade appointment model
Browse files Browse the repository at this point in the history
  • Loading branch information
ManuelSena19 committed Jan 18, 2024
1 parent 87e17bf commit afec3ef
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 62 deletions.
5 changes: 3 additions & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:health_watch/providers/pharmacist_provider.dart';
import 'package:health_watch/providers/user_provider.dart';
import 'package:health_watch/screens/booking_screen.dart';
import 'package:health_watch/screens/calendar_screen.dart';
import 'package:health_watch/screens/chat_screen.dart';
import 'package:health_watch/screens/edit_profile_screen.dart';
import 'package:health_watch/screens/home_screen.dart';
import 'package:health_watch/screens/login_screen.dart';
Expand Down Expand Up @@ -66,11 +67,11 @@ class MyApp extends StatelessWidget {
verifyEmailRoute: (context) => const VerifyEmailScreen(),
resetPasswordRoute: (context) => const ResetPasswordScreen(),
homescreenRoute: (context) => MainNavigationScreen(index: 0),
profileRoute: (context) => MainNavigationScreen(index: 4),
profileRoute: (context) => MainNavigationScreen(index: 3),
editProfileRoute: (context) => const EditProfileScreen(),
appointmentRoute: (context) => MainNavigationScreen(index: 2),
successRoute: (context) => const AppointmentBooked(),
chatRoute: (context) => MainNavigationScreen(index: 3),
chatRoute: (context) => const ChatScreen(),
settingsRoute: (context) => const SettingsScreen(),
calendarRoute: (context) => const CalendarScreen(),
bookingRoute: (context) => const BookingScreen(),
Expand Down
2 changes: 0 additions & 2 deletions lib/models/appointment_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@ class AppointmentModel with ChangeNotifier{
final String pharmacist;
final String pharmacy;
final String status;
final String time;

AppointmentModel({
required this.date,
required this.patient,
required this.pharmacist,
required this.pharmacy,
required this.status,
required this.time,
});
}
4 changes: 0 additions & 4 deletions lib/providers/appointment_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ class AppointmentProvider with ChangeNotifier {
pharmacist: doc['pharmacist'] as String,
pharmacy: doc['pharmacy'] as String,
status: doc['status'] as String,
time: doc['time'] as String,
);

if(appointmentModel.date.isBefore(DateTime.now()) && appointmentModel.status == 'upcoming'){
Expand All @@ -55,7 +54,6 @@ class AppointmentProvider with ChangeNotifier {
.where('pharmacy', isEqualTo: appointmentModel.pharmacy)
.where('pharmacist', isEqualTo: appointmentModel.pharmacist)
.where('date', isEqualTo: appointmentModel.date)
.where('time', isEqualTo: appointmentModel.time)
.get();

if (querySnapshot.docs.isNotEmpty) {
Expand All @@ -80,7 +78,6 @@ class AppointmentProvider with ChangeNotifier {
.where('pharmacy', isEqualTo: appointmentModel.pharmacy)
.where('pharmacist', isEqualTo: appointmentModel.pharmacist)
.where('date', isEqualTo: appointmentModel.date)
.where('time', isEqualTo: appointmentModel.time)
.get();

if (querySnapshot.docs.isNotEmpty) {
Expand Down Expand Up @@ -131,7 +128,6 @@ class AppointmentProvider with ChangeNotifier {
'pharmacist': newAppointment.pharmacist,
'pharmacy': newAppointment.pharmacy,
'status': newAppointment.status,
'time': newAppointment.time
});
getUserAppointments(newAppointment.patient);
} catch (error) {
Expand Down
1 change: 0 additions & 1 deletion lib/screens/apppointment_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,6 @@ class _AppointmentScreenState extends State<AppointmentScreen> {
),
ScheduleCard(
date: schedule.date,
time: schedule.time,
),
const SizedBox(
height: 10,
Expand Down
56 changes: 31 additions & 25 deletions lib/screens/calendar_screen.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:health_watch/constants/push_routes.dart';
import 'package:health_watch/constants/routes.dart';
import 'package:health_watch/models/appointment_model.dart';
import 'package:health_watch/providers/appointment_provider.dart';
import 'package:health_watch/utilities/appbar_widget.dart';
import 'package:health_watch/utilities/drawer_widget.dart';
import 'package:health_watch/utilities/show_error_dialog.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';

Expand All @@ -18,39 +19,44 @@ class CalendarScreen extends StatefulWidget {

class _CalendarScreenState extends State<CalendarScreen> {
final email = FirebaseAuth.instance.currentUser!.email.toString();
List _appointments = [];
List _appointmentDates = [];
Map<DateTime, String> _events = {};
List<AppointmentModel> _appointments = [];
Map<DateTime, List<String>> _events = {};

@override
Widget build(BuildContext context) {
final appointmentProvider =
Provider.of<AppointmentProvider>(context, listen: false);
appointmentProvider.getUserAppointments(email);
_appointments = appointmentProvider.appointments;
print(_appointments);
print(_appointmentDates);
Provider.of<AppointmentProvider>(context, listen: false);
return Scaffold(
appBar: appbarWidget('Calendar', Colors.transparent),
drawer: drawerWidget(context),
body: ListView(
children: [
Builder(builder: (context) {
if (_appointments.isEmpty) {
return TableCalendar(
body: FutureBuilder(
future: appointmentProvider.getUserAppointments(email),
builder: (context, snapshot) {
if (snapshot.hasError) {
showErrorDialog(context, '${snapshot.error}');
} else if (snapshot.connectionState == ConnectionState.waiting) {
return const SizedBox();
}
_appointments = appointmentProvider.appointments;
print(_appointments);
_events = {};
for (var appointment in _appointments) {
DateTime date = appointment.date;
_events[date] ??= [];
_events[date] = ['Dr. ${appointment.pharmacist}'];
}
print(_events);
return ListView(
children: [
TableCalendar(
focusedDay: DateTime.now(),
firstDay: DateTime.now(),
lastDay: DateTime.utc(2030),
);
} else {
return TableCalendar(
focusedDay: DateTime.now(),
firstDay: DateTime.now(),
lastDay: DateTime.utc(2030),
);
}
}),
],
eventLoader: (date) => _events[date] ?? [],
)
],
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Expand All @@ -61,4 +67,4 @@ class _CalendarScreenState extends State<CalendarScreen> {
),
);
}
}
}
3 changes: 2 additions & 1 deletion lib/screens/edit_profile_screen.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:health_watch/constants/routes.dart';
import 'package:health_watch/providers/user_provider.dart';
import 'package:health_watch/utilities/show_error_dialog.dart';
import 'package:image_picker/image_picker.dart';
Expand Down Expand Up @@ -39,7 +40,7 @@ class _EditProfileScreenState extends State<EditProfileScreen> {
}

void pop() {
Navigator.pop(context);
Navigator.popAndPushNamed(context, profileRoute);
}

void showError(String text) {
Expand Down
5 changes: 2 additions & 3 deletions lib/screens/pharmacist_details_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -236,20 +236,19 @@ class _PharmacistDetailsScreenState extends State<PharmacistDetailsScreen> {
if (time == null) {
showError('Please enter a time');
} else {
String selectedTime = '${time.hour}:${time.minute}';
DateTime dateTime = DateTime(date.year, date.month, date.day, time.hour, time.minute);
String patient = FirebaseAuth
.instance.currentUser!.email
.toString();
String pharmacist = widget.pharmacist.name;
String pharmacy = widget.pharmacist.pharmacy;
String status = 'upcoming';
AppointmentModel newAppointment = AppointmentModel(
date: date,
date: dateTime,
patient: patient,
pharmacist: pharmacist,
pharmacy: pharmacy,
status: status,
time: selectedTime,
);
appointmentProvider.bookAppointment(newAppointment);
push(successRoute);
Expand Down
19 changes: 9 additions & 10 deletions lib/utilities/appointment_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ class _AppointmentCardState extends State<AppointmentCard> {
),
ScheduleCard(
date: widget.appointment.date,
time: widget.appointment.time,
),
const SizedBox(
height: 10,
Expand Down Expand Up @@ -216,11 +215,10 @@ class _AppointmentCardState extends State<AppointmentCard> {
}

class ScheduleCard extends StatelessWidget {
const ScheduleCard({Key? key, required this.date, required this.time})
const ScheduleCard({Key? key, required this.date})
: super(key: key);

final DateTime date;
final String time;

@override
Widget build(BuildContext context) {
Expand All @@ -246,7 +244,7 @@ class ScheduleCard extends StatelessWidget {
'${date.day}/${date.month}/${date.year}',
style: const TextStyle(color: Colors.white, fontSize: 16),
),
Expanded(child: Container()),
const Spacer(),
const Icon(
Icons.access_alarm_outlined,
color: Colors.white,
Expand All @@ -256,13 +254,14 @@ class ScheduleCard extends StatelessWidget {
width: 5,
),
Flexible(
child: Text(
time.endsWith('0') ? '${time}0' : time,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
child: Text(
'${date.hour}:${date.minute}',
style: const TextStyle(
color: Colors.white,
fontSize: 16,
),
),
))
),
],
),
);
Expand Down
18 changes: 4 additions & 14 deletions lib/utilities/doctor_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@ class DoctorCard extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10),
height: 200,
height: 230,
child: GestureDetector(
child: Card(
elevation: 3,
color: Colors.white,
child: Row(
children: [
SizedBox(
width: 180,
width: 200,
height: 230,
child: Image.asset(
"assets/user.jpg",
fit: BoxFit.fill,
Expand Down Expand Up @@ -50,21 +51,10 @@ class DoctorCard extends StatelessWidget {
color: Colors.yellow,
size: 30,
),
const Spacer(
flex: 1,
),
Text('${pharmacist.rating}'),
const SizedBox(
width: 10,
),
const Text('Reviews'),
const Spacer(
flex: 1,
),
const Text('(20)'),
const Spacer(
flex: 7,
),
Text('${pharmacist.rating}'),
],
),
],
Expand Down

0 comments on commit afec3ef

Please sign in to comment.