{"id":23869188,"url":"https://github.com/extrawest/ew_flutter_water_tracker_app","last_synced_at":"2026-05-05T18:36:18.796Z","repository":{"id":121938734,"uuid":"601155160","full_name":"extrawest/ew_flutter_water_tracker_app","owner":"extrawest","description":null,"archived":false,"fork":false,"pushed_at":"2023-02-14T07:26:53.000Z","size":1228,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-25T07:41:35.825Z","etag":null,"topics":["cloud-messaging","crashlytics","dart","demo","extrawest","firebase","firebase-auth","firebase-firestore","firebase-hosting","firestore","flutter","flutter-web","remote-config","water-tracker","web"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/extrawest.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-13T13:38:34.000Z","updated_at":"2024-10-01T07:23:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"9eeb2c70-fd87-41ff-acd4-13c5ca13bc39","html_url":"https://github.com/extrawest/ew_flutter_water_tracker_app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/extrawest/ew_flutter_water_tracker_app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2Few_flutter_water_tracker_app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2Few_flutter_water_tracker_app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2Few_flutter_water_tracker_app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2Few_flutter_water_tracker_app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/extrawest","download_url":"https://codeload.github.com/extrawest/ew_flutter_water_tracker_app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2Few_flutter_water_tracker_app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32663422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-messaging","crashlytics","dart","demo","extrawest","firebase","firebase-auth","firebase-firestore","firebase-hosting","firestore","flutter","flutter-web","remote-config","water-tracker","web"],"created_at":"2025-01-03T12:16:20.056Z","updated_at":"2026-05-05T18:36:18.775Z","avatar_url":"https://github.com/extrawest.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003eWater Tracker Flutter App\u003c/h1\u003e\n\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)]()\n[![Maintaner](https://img.shields.io/static/v1?label=Roman%20Ovsepian\u0026message=Maintainer\u0026color=red)](mailto:roman.ovsepian@extrawest.com)\n[![Ask Me Anything !](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg)]()\n![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)\n![GitHub release](https://img.shields.io/badge/release-v1.0.0-blue)\n\n\u003ch2\u003eProject Info\u003c/h2\u003e\n\n* Water Tracker works with Flutter latest version\n* Water Tracker is integrated with firebase services(authentication, firestore, storage, analytics, crashlytics, dynamic links, remote config, cloud messaging)\n* App is built with BloC state managment\n* Codemagic is used to make production builds\n\u003cbr\u003e\u003cbr\u003e\n\n#### DEMO\n\n\nhttps://user-images.githubusercontent.com/117409513/218480278-65053377-f4ff-41a3-b658-12db384ff1a7.mp4\n\n\n#### PRODUCTION\n\nIn main_prod.dart set \u003cb\u003eAppConfig()\u003c/b\u003e with\nsuch parameters:\n\ndart\nfinal configuredApp = AppConfig(\n    appName: \u003cApp name\u003e,\n    flavorName: 'prod',\n    apiUrl: \u003cApi Url\u003e,\n    child: Application(),\n  );\n\n\n#### DEVELOPMENT\nFollow the same process, but fill the empty fields with the development values\ndart\nfinal configuredApp = AppConfig(\n    appName: 'DEV \u003cApp name\u003e',\n    flavorName: 'dev',\n    apiUrl: \u003cApi Url\u003e,\n    child: Application(),\n  );\n\n\n\n## Releasing a production build\n\nIn order to create a new production release on Android, you have to push to master branch or merge development branch with master.\n\nPush to master branch. \n\nshell\ngit push origin master\nor make pull request to master branch on your remote repository. \n\u003cbr\u003e\n\u003cbr\u003e\nGitLab repository and Codemagic have triggers on this events, so the build will start.\n\n\n### Installing:\n\n**1. Clone this repo to your folder:**\n\n```\ngit clone https://github.com/extrawest/ew_flutter_water_tracker_app.git\n```\n\n**2. Change current directory to the cloned folder:**\n\n```\ncd ew_flutter_water_tracker_app\n```\n\n**3. Get packages**\n\n```\nflutter pub get\n```\n\n## Firebase Distribution\n\n1. In order to get proper Firebase Access Token for Firebase Distribution uploading you need to\n   perform the following command:\n\nshell\nfirebase login:ci\n\n2. Login with the needed account (which is added to the Firebase Console of the project)\n3. Get back to the terminal where you performed the command above and copy the Firebase Access Token\n4. Set the Access Token as a value of the FIREBASE_TOKEN env var in the Codemagic workflow\n\nAdditional info:\nhttps://firebase.google.com/docs/cli#cli-ci-systems\n\n## Firebase Services Integration\n\nIn order to ENCODE Firebase configs (GoogleService-Info.plist, google-services.json) in\nCodemagic with environment variables follow this link:\nhttps://blog.codemagic.io/how-to-load-firebase-config-in-codemagic-with-environment-variables/\n\nshell\nopenssl base64 -in GoogleService-Info.plist\n\nshell\nopenssl base64 -in google-services.json\n\nCopy the output encoded text and put it as env var GOOGLE_SERVICE_IOS and GOOGLE_SERVICE_ANDROID\nrespectively\n\nIn order to DECODE Firebase configs (GoogleService-Info.plist, google-services.json) from\nCodemagic environment variables perform these scripts under the Pre-build script section:\n\nshell\necho $GOOGLE_SERVICE_IOS | base64 --decode \\\n\u003e $FCI_BUILD_DIR/android/app/google-services.json\n\necho $GOOGLE_SERVICE_ANDROID | base64 --decode \\\n\u003e $FCI_BUILD_DIR/ios/Runner/GoogleService-Info.plist\n\n### \u003ci\u003eFirebase Authentication\u003c/i\u003e\n\nWater tracker supports this types of firebase authentication\n\n* Email/password\n* Google Authentication\n* Facebook Authentication\n\nTo add another types of authentication check https://firebase.google.com/docs/auth\n\n### \u003ci\u003eFirebase Firestore\u003c/i\u003e\n\nFirestore database is used to store all needed information for each user.\n\n* User Data(email, name, daily limit)\n* Tracked water (separate document for each day)\n* Fcm token\n\nAll data is secured using security rules\n\n1. Unauthorized access to firebase services are not permitted\n2. Each user has access only to it's own data based on user UUID provided\n\n### \u003ci\u003eFirebase Storage\u003c/i\u003e\n\nFirestore storage is used to store user profile photo\n\nAll data is secured using security rules such as in firestore\n\n### \u003ci\u003eFirebase Analytics\u003c/i\u003e\n\nFirestore storage is used to track such events\n\n1. drink_water - event is tracked when user add water\n2. photo_updated - event is tracked when user update the profile photo\n3. name_updated - event is tracked when user changes the name\n\n### \u003ci\u003eFirebase Crashlytics\u003c/i\u003e\n\nFirestore storage is used to track all fatal and non-fatal crashes.\n\n### \u003ci\u003eFirebase Cloud Messaging\u003c/i\u003e\n\nWater tracker supports receiving notifications in background and terminated states.\n\nEach user is automatically subscribeb on the topic\n\"reminders\" in cloud_messaging.\n\n### \u003ci\u003eFirebase Remote Config\u003c/i\u003e\nRemote config is used for changing the progress indicator of drunk water during the day. There are two options: 'linear' and 'circular', so it can be changed in firebase console/remote config and users will see the update without new build\n\n### \u003ci\u003eFirebase Dynamic Links\u003c/i\u003e\n\nDynamic links gives each user ability to share his daily progress with others. User can just copy the link or share it to other social media with the share_plus package(https://pub.dev/packages/share_plus)\n\nCreated by Roman Ovsepian\n\n[Extrawest.com](https://www.extrawest.com), 2022\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrawest%2Few_flutter_water_tracker_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextrawest%2Few_flutter_water_tracker_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrawest%2Few_flutter_water_tracker_app/lists"}