Sprint 3 ‐ Deliverable - Curi-Grupo24/curi_app GitHub Wiki

Business Questions Implemented

As it was not completeley implemented on the Sprint 2, we decided to fully implement the business questions for type 2 on this Sprint and the 3 other questions that we should answer, they are listed bellow.

Question Type Explanation Visualization
What is the mean of clicks a person does to enroll as a tutor? 2 To let the person know how long the process to enrol as a tutor is, the App shows how many steps are left till the process completition
Was my class added to my classes list after adding it? 2 Focused on the daily usage of the App, the question let us provide the user appropriate fixes on bugs on the add class feature
was my application as tutor sended after applying as tutor? 2 The validation process takes part away from the users view, the App displays the confirmation of the users application, also if afterwards the user wants to access the class, then he will see a View that warnings he to wait until the moment of acceptance.
Is there any tutor that has rating above 4.0 on the class I want? 2 Each tutor has a rating based on his/her tutorships. When the profile of the tutor is visited, this rating is shared to the viwer TutorRating
What is the percentage of sessions taken that have not presented errors in the last week? 1 We need to be aware of the crashes the App presents, that is the reason we implemented Firebase Crashlytics to visualize the percentaje of sessions that has crashed per week image
Event with the highest number of users who have done it 3 An important part of how the users see our App is the way the main features are being used. We need to understand what are the priorities and what kind of features the clients are using the most to provide a better service out of this events (features) image
What devices is the App running from? 4 Fragmentation is relevant for the App to get into a wide market. We use Firebase Analytics to get this information so we can provide support to a different Android OS versions image
Is there a way to ensure that I wont miss my appointment? 2 Users are the center of the project, we want to ensure they are having the best results with their investments. The App notifies when the meeting is 10 minutes left so the user will not loose it WhatsApp Image 2024-04-26 at 11 53 24 PM

Eventual connectivity strategies

We used a way to let the user know when they do not have internet connection and we separate ir in two ways, firstly we implemented an error that returns our firebase auth library, that way it will show a warning message like the one bellow:

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/0cc713a9-0a99-45b0-9db3-d820bb77c900

Also, there could be a problem if the user is already logged into the application, so we implemented another warnings in case the user lost their internet connection already logged into the app, it shows an error message as the one bellow:

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/00cd85e8-e6a2-43ca-b5d2-45f8cf3b07ca

We added ir to teh petitions we are making to firebase, that way it would not let to a dead state.

Local Storage Strategies.

As there is some information we do not require to get to our DB, we thought we could save the information of the tutors a user decided to save to therir favoutites, so that way we are saving space in our DB's that does not give the organization that much of value because we already have the ratings of a user. Formaking this real we implemented a library that helps us to get access to the local storage of the device, it is called Share-Preferences, we know it is not a library that gives us encrypted or secure local storage and that the other apps we have on the device could access the information we store in there, but, as we are saving non-personal information there is no risky vulnerability in it. Furthermore, if we consider we could save more information, but, more sensitive information we could use Secure Storage, that gives us the opportunity of scape vulnerabilities for sensitive information.

Here is the visibility we implemented on the app for when we add a Tutor to our favs list on our local Storage:

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/1a0627ca-de66-483c-818e-d69017e04787

We implemented it by using the following method using shared preferences:

Multi-Thrading Strategies.

The application uses concurrency to avoid blocking the main thread, as Flutter works as mono-Thread. This is implemented in the repositories implementation by using Future-async functions. This way, the application can complete other work while it waits for the results of this function. We use this type of functions on every repository implementation. This is an example of the way we used it:

We are using a total of 83 Future-async functions on our app in 45 different files. We did use the most Future funtions as Future<Either<dynamic, dynamic>> that helped us to receive one of two states, either Successfull state being Right, or an error state being left, an example of the usage we did is bellow:

In this example of the Forgot your password flow we are returning a Successfull State with a String in case we could send the e-mail of confirmation of changing the password or a state of Error with it's corresponding String that will later show to the user.

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/e19ed1d7-8a64-4b7b-a6c7-83d90bfc7f58

Also, for making this usage of multi-threading we implemented a multi-bloc usage on the Home-Dashboard, that way we could see how the app is rendering loading each functionality separately:

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/fdc77b7a-3570-4d9e-86d7-902bcd011ad0

Caching strategy.

As we decided to implement BLoC on our solution, it gives us a state manager that leaves some information on caché so that the information we need to store on caché and having it first handed is available and easy to manage, this is thanks to the States we manage on each bloc, also there is a Flutter Native usage of states on StatefullWidgets were the state we are in that widget is stored on cache.

This is the way we use the states on BLoC:

In this example we are emiting states that since they don't change they are going to be stored on caché, having that information stored there is so usefull, for example in the view of searching for a new class, or filtering them.

All the features implemented.

As we implemented a considerable amount of features inside our app, we thought it could be better to organize them by flows, this were the flows we implemented and each functionality:

Auth Flow

Login

We have a Login with error manage, as if the user is connected to intenret or if he/she introduces badly their information, also we have a validator of the format of the e-mail.

image Login errors and successful flow video

Register

We implemented a register flow with error managinf if we had a problem of connectivity on the device, or we had a problem on the server, also each input has its error manager wether if it has not the correct format or if its missing to fill. We added a Tooltip for the user to know how to enter the password information or the e-mail information.

image

Forgot Password

We implemented this flow with firebase auth and we have the error managers wether the user losts intenet connection or the user enter wrong the information of the e-mail, this would send an e-mail for cnhanging the password of the user.

image

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53884974/768bbea5-a17a-41b7-9011-b42abda1f77c

WhatsApp Image 2024-04-27 at 1 20 51 AM

Dashboard

On the main Dashboard of the app, the one that could be named aas home page we have different functionalities wether the user is a student, or a student-tutor or if the user is new and does not have any class available as student or tutor, they are listed bellow:

User With No Classes

image

User with classes

image

Student Classes

A Student can see, search and filter for their available classes in a section easy to access on the dashboard:

image

Tutors Classes

A Tutor can see, in a section easy to access on the dashboard his available class as tutor:

image

Load User Info

Afater the Login we load the user info that will be available on the dashboard as so the name of the user and on the profile view.

My Classes as Student

image

Get My Classes

image

Filter My classes

If we want to add a new class we could search by semestrer, type, name, or career, we could filter them alone or all of the above.

Filter by career

image

Search by name

image

Delete Class

image

Search Filter and Add new classes flow

Search Filter and Add new classes

image

Filter

image

Add new classes

image

Enroll As Monitor Flow

image image image image image image image image image

Search, Filter new Classes

If we want to add a new class we could search by semestrer, type, name, or career, we could filter them alone or all of the above.

Class Dashboard

image

Tutors List

If we tap on either "Lowe price", "rate" or "see all" insude a class there we can find the list of availabe tutors that we currently have.

Filter Tutors of the class I am in

Chat

As we found it really important to have communication between the student and the tutor, we implemented a chat, a text chat.

Chat with a Tutor I selected

Here is the representation of the chat fully working: CHAT VIDEO REPRESENTATION AND EXPLANATION

Profile

image

Time Sensitive notifications

https://github.com/Curi-Grupo24/ISIS3510_202410_Team24/assets/53950964/1c6ffe58-581e-438b-90f7-faf4c54c578b

ETHICS VIDEO

Here you can find the Ethics video we made for this Sprint: LINK TO VIDEO