An expense tracking app with granular price distribution.
Splitting a bill with your friends? Paying for food and drinks on a Friday night? Going on a trip together?
Statera helps you organize your expenses and does the math for you. Scan receipts, mark your items, finalize expenses and equalize your group's debts.
- Flutter
- Dart
derry
dart package globally installed - for running custom commands- FlutterFire CLI globally installed - for configuring Firebase
- Android and/or iOS emulator and/or Web for testing
- lcov - for testing with coverage
- Create an iOS/Android app in the Firebase console
- Include your
google-services.json
andGoogleService-Info.plist
to the proper places as described in the docs
To run the project locally follow these steps:
-
Install Flutter dependencies:
flutter pub get
-
Run Firebase emulators:
derry emulate
-
Create
.env
:cp .env.example .env
Environment variable description:
WEB_PUSH_VAPID_KEY
(optional) - used to enable web push notification
-
Run the project:
derry run-emulate
- prompts to choose the devicederry run-web-emulate
- runs in Chromeℹ️ If using VSCode, launch configurations exist for running the app with Firebase emulators (Flutter: emulate) and with production data (Flutter: production)
flutter run
- runs the projectflutterfire configure
- initializes the connection between you Firebase project and this Flutter projectderry emulate
- runs Firebase emulators for local developmentderry test
- runs the tests
Full list of commands can be found in the pubspec.yaml
file
These are fast tests that verify business logic functionality and behaviour of separate widgets.
Unit tests are contained under the test
directory.
Run unit tests:
flutter test
Include coverage report:
flutter test --coverage
These tests run on a test version of Chrome while talking to an emulator version of Firebase.
Integration tests are contained under the integration_test
directory while the driver is defined under the test_driver
directory.
Run integration tests:
- Install the Chrome web driver (the version should match the version of your Chrome browser)
- Start the Chrome web driver
chromedriver --port=4444
- Start the Firebase emulators
firebase emulators:start --import ./emulator_data_testing
- Runs the tests
./scripts/run_integration_tests_observe.sh
-
Configure the
scripts/take_screenshots_on_all_devices.sh
file to contain the devices you want to take screenshots on:./scripts/take_screenshots.sh <device_id> <device_name>
You can get the device id by running
flutter devices
-
Start the desired simulators (make sure that the user is logged out if the device was used to run the app previously)
-
Run the script
./scripts/take_screenshots_on_all_devices.sh
-
The screenshots will be saved in the
screenshots
directory
Currently, there is an issue with taking screenshots on iOS. There exists a workaround and an open PR.
- icons generated through Icon Kitchen
- Trunk Based Development deployments with GitHub actions article