CircuitVerse / mobile-app

Mobile App for CircuitVerse
https://play.google.com/store/apps/details?id=org.circuitverse.mobile_app
MIT License
73 stars 94 forks source link
flutter hacktoberfest

CircuitVerse Mobile

CI CD

CircuitVerse for mobile is a cross platform application built in flutter using CircuitVerse API.

Getting Started

Follow these instructions to build and run the project

Setup Flutter

A detailed guide for multiple platforms setup could be find here

Setup Project

Make sure npm is installed to run the next command

npm install -g @commitlint/config-conventional @commitlint/cli

> Mobile App enforces [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/), make sure to read and follow them.

### Running the app

Make sure you have a connected Android/iOS device/simulator and run the following command to build and run the app in debug mode.

`flutter run`

### Android OAuth Config

This project uses flutter version 1.20.2 and hence the support for compile time variables. To use compile time variables pass them in `--dart-defines` as `flutter run --dart-define=VAR_NAME=VAR_VALUE`. Supported `dart-defines` include :

#### Facebook Configuration

1. `FB_APP_ID`

#### Github Configuration

1. `GITHUB_OAUTH_CLIENT_ID`
2. `GITHUB_OAUTH_CLIENT_SECRET`

#### Google Configuration

For Google OAuth we use [google_sign_in](https://pub.dev/packages/google_sign_in). You'll require a Java KeyStore(`.jks`)

1. Add `cv_debug.jks` in `android/app/`.
2. Add `key.debug.properties` in `android/`.

Note: The OAuth Configuration section is not mandatory to get started. To get hold of the above secrets/files drop a message on slack with clear requirements and we'll take care.

## Project Structure

```bash
mobile-app/lib/
├── config/                         # configuration files like environment_config
├── enums/                          # enum files
|   └── view_state.dart             # defines view states i.e Idle, Busy, Error
|   └── auth_state.dart             # defines auth states i.e logged in using Google/FB/Github/Email
├── l10n/                           # localization files like intl_en.arb
├── locale/                         # AppLocalization & AppLocalizationDelegate
├── managers/
|   └── dialog_manager.dart         # show dialogs using dialog navigation key
├── models/                         # model classes
|   └── dialog_models.dart          # dialog request and response models
        ...
├── services/                       # services
|   ├── API/                        # API implementations
|   └── dialog_service.dart         # handles dialog
|   └── local_storage_service.dart  # handles local storage (shared prefs)
├── ui/                             # UI layer
|  ├── views/                       # views
|  |  └── base_view.dart
|  |  └── cv_landing_view.dart
|  |  └── startup_view.dart
|  └── components/                  # shared components
├── utils/                          # utilities such as api_utils routes.dart and styles.dart
├── viewmodels/                     # Viewmodels layer
├── app_theme.dart                  # Shared App Colors/border decorations etc.
├── constants.dart                  # App constants
├── locator.dart                    # dependency injection using get_it
├── main.dart                       # <3 of the app

Features

Groups

Assignments

Projects/Circuits

Profile

Screenshots

Splash View Home View NavDrawer View NavDrawer View Login Teachers View About View Contribute View Groups View Assignment Details View Assignment Date View Assignment Time View Login View Register View Profile View

Dark Mode

Splash View Dark Home View Dark Featured Circuit View Dark About View Dark Contribute View Dark Teachers View Dark Groups View Dark Login View Dark Register View Dark Assignment Details View Dark Assignment Date View Dark Assignment Time View Dark Profile View Dark

Community

We would love to hear from you! We communicate on the following platforms:

Slack

Contributing

Whether you have some feauture requests/ideas, code improvements, refactoring, performance improvements, help is always Welcome. The more is done, better it gets.

If you found any bugs, consider opening an issue.

License

This project is licensed under the MIT License.