This is an app to help Ramaz students navigate their student life. It tells you what classes you have when, the latest sports news, lost and found information, and more.
- You can login with your Ramaz email to get your schedule sent directly to the app!
- A complete schedule built-in to your phone. It can tell you what you have now, later, or you can specify a letter and schedule (eg, Rosh Chodesh) to explore your schedule.
- You can now schedule reminders for individual classes or periods, such as every B-4 or a reminder to bring your textbook to history class.
We want to hear what you have to say, so please use the "Send Feedback" button in the app to tell us what you do -- or don't -- like, and we'll work on it.
This repo is to be modified only by the Ramaz Coding Club. It follows a simple yet sophisticated structure, in addition to the standard Flutter folders. Here is a rundown of everything you need to know:
-
This folder contains Android-specific implementation details. The only notable files in it are the gradle configurations:
gradle.properties
,build.gradle
, andapp\build.gradle
(which have been changed to configured Firebase). An adjustment was made togradle\wrapper\gradle-wrapper.properties
to upgrade to the latest version of Gradle. Android-specific assets are stored underapp\src\main\res
, and modifications have been made toAndroidManifest.xml
accordingly. -
This folder is not meant to be public. It is basically a collection of
.csv
versions of the Ramaz database. The naming convention here is simple: make everything lowercase, removeRG_
, and make abbreviations into the full word. For example,RG_SECT_SCHED
should be saved asdata\section_schedule.csv
. This is essential for the data processing (in thefirebase
folder) to work. Also included is thecalendar.csv
file needed for calendar parsing. -
OK, so this folder is also absent from GitHub. But it's super simple to generate. Just run
dartdoc
in this repo and the full documentation will be saved here. -
This folder contains scripts whose sole purpose is to configure Google Firebase. This basically means configuring the database and authentication services based on data from the Ramaz database. It contains two more folders,
data
anddatabase
whose jobs are to handle data modeling and database configuration, respectively. Another notable file here isauth.py
, which manages the FirebaseAuth API. -
This folder contains image assets for the project. They are imported in the
pubspec.yaml
file. There are two child folders:-
This folder contains basic icons used throughout the app
-
This folder contains logos used for various services throughout the app. Note that despite the use of this iconography, excluding Ramaz, we do not claim any ownership whatsoever of these brands. The
ramaz
folder contains Ramaz-specific branding.
-
-
This folder contains iOS-specific modifications, including Firebase configuration and asset bundling.
-
This is, where the main Dart code lies. This will be discussed in detail next section.
Inside lib\
, there are five libraries, each of which define a different part of the structure of the app. Each library two sections -- a folder under lib\src
, containing all the code, and a file under lib\
, which declares the library (sort of like a header file).
-
This library contains data models for everything in the app, separated into files by topic. Here, all the business logic is implemented either as complex factories or methods.
-
This library contains abstractions over many different APIs (data sources), separated into files by API.
-
This library contains logic for initializing the services. It can act as a wrapper around all the services, so function and constructor signatures can remain the same even after services are added or removed.
-
This library contains two types of models:
- Data models. Data models control the state of the data across the lifespan of the app. The user profile is a good example of a data model, since it needs to be accessible to all code.
- View models. view models control the state of data in an element of UI, such as a page. View models can interact with data models to get their data, and should generally have a field for every label, and a method for every input action in the UI.
-
This folder contains UI elements ("widgets") that are independent enough from the rest of the screen to be able to be imported and used reliably anywhere in the app (even if they in reality aren't). There are a few categories of widgets:
- Ambient widgets are widgets that are exposed to the whole app (usually via
InheritedWidgets
). - Atomic widgets are widgets that represent individual pieces of data. They should be used throughout the app exclusively to represent those data types.
- Generic widgets are miscellaneous widgets that help compose the UI.
- Other helper widgets to display images and iconography throughout the UI.
- Ambient widgets are widgets that are exposed to the whole app (usually via
-
This library contains all the screens of the app, separated into files. These files may import data templates (from
data
), APIs (fromservices
), page states (frommodels
), or other UI elements (fromwidgets
).
To run the app, make sure you have Flutter installed, and run these commands:
git clone https://github.com/Levi-Lesches/Ramaz-Student-Life.git cd ramaz
To be able to run and debug the app, run flutter run
. To simply download it, run flutter build apk
or flutter build ios
, plug in your phone and run flutter install
.