{"id":13466355,"url":"https://github.com/bizz84/starter_architecture_flutter_firebase","last_synced_at":"2025-05-14T09:10:19.232Z","repository":{"id":42497877,"uuid":"236160401","full_name":"bizz84/starter_architecture_flutter_firebase","owner":"bizz84","description":"Time Tracking app with Flutter \u0026 Firebase","archived":false,"fork":false,"pushed_at":"2025-05-09T10:28:38.000Z","size":1732,"stargazers_count":1750,"open_issues_count":24,"forks_count":475,"subscribers_count":62,"default_branch":"master","last_synced_at":"2025-05-14T09:09:58.569Z","etag":null,"topics":["dart","firebase","flutter","riverpod"],"latest_commit_sha":null,"homepage":"https://codewithandrea.com/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bizz84.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null},"funding":{"github":"bizz84"}},"created_at":"2020-01-25T11:20:08.000Z","updated_at":"2025-05-14T01:34:49.000Z","dependencies_parsed_at":"2024-01-16T12:24:32.075Z","dependency_job_id":"0cab13e0-0164-4164-97bc-3b6b0c21b2ed","html_url":"https://github.com/bizz84/starter_architecture_flutter_firebase","commit_stats":{"total_commits":158,"total_committers":5,"mean_commits":31.6,"dds":0.03164556962025311,"last_synced_commit":"a828730e31078887c5837792bc6c86ae106a2c55"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bizz84%2Fstarter_architecture_flutter_firebase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bizz84%2Fstarter_architecture_flutter_firebase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bizz84%2Fstarter_architecture_flutter_firebase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bizz84%2Fstarter_architecture_flutter_firebase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bizz84","download_url":"https://codeload.github.com/bizz84/starter_architecture_flutter_firebase/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254110374,"owners_count":22016391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dart","firebase","flutter","riverpod"],"created_at":"2024-07-31T15:00:42.811Z","updated_at":"2025-05-14T09:10:19.192Z","avatar_url":"https://github.com/bizz84.png","language":"Dart","funding_links":["https://github.com/sponsors/bizz84"],"categories":["Open-Source","Dart"],"sub_categories":[],"readme":"# Time Tracking app with Flutter \u0026 Firebase\n\nA time tracking application built with Flutter \u0026 Firebase: \n\n![](/.github/images/time-tracker-screenshots.png)\n\nThis is intended as a **reference app** based on my [Riverpod Architecture](https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/).\n\n\u003e **Note**: this project used to be called \"Started Architecture for Flutter \u0026 Firebase\" (based on this [old article](https://codewithandrea.com/videos/starter-architecture-flutter-firebase/)). As of January 2023, it follows my updated [Riverpod Architecture](https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/), using the latest packages.\n\n## Flutter web preview\n\nA Flutter web preview of the app is available here:\n\n- [Time Tracker | Flutter web demo](https://starter-architecture-flutter.web.app)\n\n## Features\n\n- **Simple onboarding page**\n- **Full authentication flow** (using email \u0026 password)\n- **Jobs**: users can view, create, edit, and delete their own private jobs (each job has a name and hourly rate)\n- **Entries**: for each job, user can view, create, edit, and delete the corresponding entries (an entry is a task with a start and end time, with an optional comment)\n- **A report page** that shows a daily breakdown of all jobs, hours worked and pay, along with the totals.\n\nAll the data is persisted with Firestore and is kept in sync across multiple devices.\n\n## Roadmap\n\n- [ ] Add missing tests\n- [x] Stateful Nested Navigation (available since GoRouter 7.1)\n- [ ] Use controllers / notifiers consistently across the app (some code still needs to be updated)\n- [ ] Add localization\n- [ ] Use the new Firebase UI packages where useful\n- [ ] Responsive UI\n\n\u003e This is a tentative roadmap. There is no ETA for any of the points above. This is a low priority project and I don't have much time to maintain it.\n\n## Relevant Articles\n\nThe app is based on my Flutter Riverpod architecture, which is explained in detail here:\n\n- [Flutter App Architecture with Riverpod: An Introduction](https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/)\n- [Flutter Project Structure: Feature-first or Layer-first?](https://codewithandrea.com/articles/flutter-project-structure/)\n- [Flutter App Architecture: The Repository Pattern](https://codewithandrea.com/articles/flutter-repository-pattern/)\n- [How to Build a Robust Flutter App Initialization Flow with Riverpod](https://codewithandrea.com/articles/robust-app-initialization-riverpod/)\n\nMore more info on Riverpod, read this:\n\n- [Flutter Riverpod 2.0: The Ultimate Guide](https://codewithandrea.com/articles/flutter-state-management-riverpod/)\n\n## Packages in use\n\nThese are the main packages used in the app:\n\n- [Flutter Riverpod](https://pub.dev/packages/flutter_riverpod) for data caching, dependency injection, and more\n- [Riverpod Generator](https://pub.dev/packages/riverpod_generator) and [Riverpod Lint](https://pub.dev/packages/riverpod_lint) for the latest Riverpod APIs\n- [GoRouter](https://pub.dev/packages/go_router) for navigation\n- [Firebase Auth](https://pub.dev/packages/firebase_auth) and [Firebase UI Auth](https://pub.dev/packages/firebase_ui_auth) for authentication\n- [Cloud Firestore](https://pub.dev/packages/cloud_firestore) as a realtime database\n- [Firebase UI for Firestore](https://pub.dev/packages/firebase_ui_firestore) for the `FirestoreListView` widget with pagination support\n- [RxDart](https://pub.dev/packages/rxdart) for combining multiple Firestore collections as needed\n- [Intl](https://pub.dev/packages/intl) for currency, date, time formatting\n- [Mocktail](https://pub.dev/packages/mocktail) for testing\n- [Equatable](https://pub.dev/packages/equatable) to reduce boilerplate code in model classes\n\nSee the [pubspec.yaml](pubspec.yaml) file for the complete list.\n\n## Running the project with Firebase\n\nTo use this project with Firebase, follow these steps:\n\n- Create a new project with the Firebase console\n- Enable Firebase Authentication, along with the Email/Password Authentication Sign-in provider in the Firebase Console (Authentication \u003e Sign-in method \u003e Email/Password \u003e Edit \u003e Enable \u003e Save)\n- Enable Cloud Firestore\n\nThen, follow one of the two approaches below. 👇\n\n### 1. Using the CLI\n\nMake sure you have the Firebase CLI and [FlutterFire CLI](https://pub.dev/packages/flutterfire_cli) installed.\n\nThen run this on the terminal from the root of this project:\n\n- Run `firebase login` so you have access to the Firebase project you have created\n- Run `flutterfire configure` and follow all the steps\n\nFor more info, follow this guide:\n\n- [How to add Firebase to a Flutter app with FlutterFire CLI](https://codewithandrea.com/articles/flutter-firebase-flutterfire-cli/)\n\n### 2. Manual way (not recommended)\n\nIf you don't want to use FlutterFire CLI, follow these steps instead:\n\n- Register separate iOS, Android, and web apps in the Firebase project settings.\n- On Android, use `com.example.starter_architecture_flutter_firebase` as the package name.\n- then, [download and copy](https://firebase.google.com/docs/flutter/setup#configure_an_android_app) `google-services.json` into `android/app`.\n- On iOS, use `com.example.starterArchitectureFlutterFirebase` as the bundle ID.\n- then, [download and copy](https://firebase.google.com/docs/flutter/setup#configure_an_ios_app) `GoogleService-Info.plist` into `iOS/Runner`, and add it to the Runner target in Xcode.\n\nThat's it. Have fun!\n\n## [License: MIT](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbizz84%2Fstarter_architecture_flutter_firebase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbizz84%2Fstarter_architecture_flutter_firebase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbizz84%2Fstarter_architecture_flutter_firebase/lists"}