# compass_app

The Compass sample application is an app that helps users build and book
itineraries for trips. It’s a robust sample application with many features, routes, and screens. The app communicates
with an HTTP server, has development and production environments, brand-specific styling, and high test coverage. In
these ways and more, it simulates a real-world, feature rich Flutter application.

The code in this application is used for explaining architecture in a Flutter application.

![compass app splash screen](./docs/Global%20—%20Splash.png)
![compass app activities screen](./docs/Legacy%20—%20Activities.png)
![compass app home screen](./docs/Legacy%20—%20Home.png)
![compass app booking screen](./docs/Legacy%20—%20Book.png)

The Compass app was originally [designed and built by the Firebase GenKit team](https://developers.googleblog.com/en/how-firebase-genkit-helped-add-ai-to-our-compass-app/).

## Running the app

This app contains multiple environments.

* Development environment - This environment uses data from a JSON file, which is stored in the `assets` directory, and simulates developing locally.

```bash 
$ cd app
$ flutter run --target lib/main_development.dart
```

* Staging environment - This environment uses an HTTP server to get data, simulating a real app experience. This is a "dummy" server, that has endpoints that simply return fake data. The server can be found in the `compass_app/server` directory. You need to run the server locally before running the Flutter application.

```bash
$ cd server
$ dart run
# => Server listening on port 8080
 
$ cd ../compass_app/app
$ flutter run --target lib/main_staging.dart 
```

## Integration Tests

Integration tests must be run from the `app` directory.

**Integration tests with local data**

```bash
cd app
$ flutter test integration_test/app_local_data_test.dart
```

**Integration tests with background server and remote data**

```bash
cd app
$ flutter test integration_test/app_server_data_test.dart
```

Running the tests together with `flutter test integration_test` will fail.
See: https://github.com/flutter/flutter/issues/101031