# CircuitVerse Mobile [](https://github.com/CircuitVerse/mobile-app/actions/workflows/ci.yml) [](https://github.com/CircuitVerse/mobile-app/actions/workflows/cd.yml) CircuitVerse for mobile is a cross-platform application built in [Flutter](https://flutter.dev/) using CircuitVerse API. ## Getting Started Follow these instructions to build and run the project ### Prerequisites - Flutter `3.32.2` (stable) - Dart `3.8.1` > Tip: To ensure you’re always using the correct Flutter version, consider using [FVM (Flutter Version Manager)](https://fvm.app/) to manage versions. ### Setup Flutter A detailed guide for multiple platforms setup can be found [in the Flutter installation guide](https://docs.flutter.dev/get-started/install) ### Setup Project - Clone this repository using `git clone https://github.com/CircuitVerse/mobile-app.git`. - `cd` into `mobile_app`. - `flutter pub get` to get all the dependencies. - Generate files using Builder Runner (**required**) ``` flutter pub run build_runner build --delete-conflicting-outputs ``` - Switch to mobile-app's git hooks (**optional but recommended**) ``` git config core.hooksPath .githooks/ # 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` #### Running on Chrome (Web) To run the app on Chrome, use: `flutter run -d chrome` > **Note:** When running on Chrome locally, all API calls to `circuitverse.org` will be blocked by the browser's **CORS policy**. This causes Login, Register, and all data loading to fail. To bypass this during local development, launch Chrome with the `--disable-web-security` flag: ```bash flutter run -d chrome --web-browser-flag "--disable-web-security" ``` > ⚠️ Only use `--disable-web-security` for **local development**. Never use it in production. ### Android OAuth Config This project uses Flutter 3.32.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 : #### 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/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 - Create Groups. - Edit/Update/Delete Groups. - Add/Delete Members to the group. ### Assignments - Create/Add Assignment to a Group. - Edit Assignments. - Check Assignment Submissions. - Grade Assignment's projects. - Update/Delete Grades. ### Projects/Circuits - Fork Project. - Edit/Delete Project. - Add/Delete Collaborators. - Star Project to favourites. - View Projects you created/starred. ### Profile - View/Edit Profile ### Multi-language Support - English - Hindi - Arabic ## Screenshots