[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9289":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},9289,"starter_architecture_flutter_firebase","bizz84\u002Fstarter_architecture_flutter_firebase","bizz84","Time Tracking app with Flutter & Firebase","https:\u002F\u002Fcodewithandrea.com\u002F",null,"Dart",1810,488,59,20,0,1,21.07,"MIT License",false,"master",true,[24,25,26,27],"dart","firebase","flutter","riverpod","2026-06-12 02:02:05","# Time Tracking app with Flutter & Firebase\n\nA time tracking application built with Flutter & Firebase: \n\n![](\u002F.github\u002Fimages\u002Ftime-tracker-screenshots.png)\n\nThis is intended as a **reference app** based on my [Riverpod Architecture](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-app-architecture-riverpod-introduction\u002F).\n\n> **Note**: this project used to be called \"Started Architecture for Flutter & Firebase\" (based on this [old article](https:\u002F\u002Fcodewithandrea.com\u002Fvideos\u002Fstarter-architecture-flutter-firebase\u002F)). As of January 2023, it follows my updated [Riverpod Architecture](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-app-architecture-riverpod-introduction\u002F), 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:\u002F\u002Fstarter-architecture-flutter.web.app)\n\n## Features\n\n- **Simple onboarding page**\n- **Full authentication flow** (using email & 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 \u002F 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> 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:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-app-architecture-riverpod-introduction\u002F)\n- [Flutter Project Structure: Feature-first or Layer-first?](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-project-structure\u002F)\n- [Flutter App Architecture: The Repository Pattern](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-repository-pattern\u002F)\n- [How to Build a Robust Flutter App Initialization Flow with Riverpod](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Frobust-app-initialization-riverpod\u002F)\n\nMore more info on Riverpod, read this:\n\n- [Flutter Riverpod 2.0: The Ultimate Guide](https:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-state-management-riverpod\u002F)\n\n## Packages in use\n\nThese are the main packages used in the app:\n\n- [Flutter Riverpod](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutter_riverpod) for data caching, dependency injection, and more\n- [Riverpod Generator](https:\u002F\u002Fpub.dev\u002Fpackages\u002Friverpod_generator) and [Riverpod Lint](https:\u002F\u002Fpub.dev\u002Fpackages\u002Friverpod_lint) for the latest Riverpod APIs\n- [GoRouter](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgo_router) for navigation\n- [Firebase Auth](https:\u002F\u002Fpub.dev\u002Fpackages\u002Ffirebase_auth) and [Firebase UI Auth](https:\u002F\u002Fpub.dev\u002Fpackages\u002Ffirebase_ui_auth) for authentication\n- [Cloud Firestore](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcloud_firestore) as a realtime database\n- [Firebase UI for Firestore](https:\u002F\u002Fpub.dev\u002Fpackages\u002Ffirebase_ui_firestore) for the `FirestoreListView` widget with pagination support\n- [RxDart](https:\u002F\u002Fpub.dev\u002Fpackages\u002Frxdart) for combining multiple Firestore collections as needed\n- [Intl](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fintl) for currency, date, time formatting\n- [Mocktail](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fmocktail) for testing\n- [Equatable](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fequatable) 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\u002FPassword Authentication Sign-in provider in the Firebase Console (Authentication > Sign-in method > Email\u002FPassword > Edit > Enable > 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:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutterfire_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:\u002F\u002Fcodewithandrea.com\u002Farticles\u002Fflutter-firebase-flutterfire-cli\u002F)\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:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fflutter\u002Fsetup#configure_an_android_app) `google-services.json` into `android\u002Fapp`.\n- On iOS, use `com.example.starterArchitectureFlutterFirebase` as the bundle ID.\n- then, [download and copy](https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fflutter\u002Fsetup#configure_an_ios_app) `GoogleService-Info.plist` into `iOS\u002FRunner`, and add it to the Runner target in Xcode.\n\nThat's it. Have fun!\n\n## [License: MIT](LICENSE.md)\n","这是一个基于Flutter和Firebase构建的时间跟踪应用程序，旨在作为参考应用展示如何使用Riverpod架构。核心功能包括简洁的引导页面、完整的用户认证流程（支持邮箱与密码）、以及对工作的增删改查操作，每个工作项包含名称和小时费率；同时支持为每个工作创建、编辑和删除相关任务条目，并提供一个汇总报告页面显示所有工作的日度细分、工作时长及薪酬总额。该应用适合需要跨设备同步数据的时间管理场景，特别适用于开发者学习或参考现代化Flutter应用架构设计。项目采用了最新的Riverpod库及相关工具来实现状态管理和依赖注入等功能。",2,"2026-06-11 03:22:03","top_language"]