{"id":22330643,"url":"https://github.com/rodrigobertotti/flutter_group_chat_app_with_firebase","last_synced_at":"2025-07-29T19:32:53.463Z","repository":{"id":209028465,"uuid":"723009752","full_name":"RodrigoBertotti/flutter_group_chat_app_with_firebase","owner":"RodrigoBertotti","description":"A complete Flutter Group Chat App with Firebase that supports video calls.  It handles typing, received and read indicators, Group Management, closed app and opened app notifications, security, account creation, login, mutex for generating the numeric Agora UID and more.","archived":false,"fork":false,"pushed_at":"2024-06-16T18:03:44.000Z","size":1898,"stargazers_count":28,"open_issues_count":0,"forks_count":9,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2024-06-16T19:37:39.435Z","etag":null,"topics":["agora","agora-flutter","agora-sdk","chat-room","cloud-firestore","cloud-functions","cloudfunctions","firebase","firebase-cloud-functions","firebasecloudfunctions","firestore","flutter","group-chat"],"latest_commit_sha":null,"homepage":"","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/RodrigoBertotti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-11-24T13:14:38.000Z","updated_at":"2024-06-16T18:03:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"e480be12-8b02-4ee2-ad1d-4657e8a03206","html_url":"https://github.com/RodrigoBertotti/flutter_group_chat_app_with_firebase","commit_stats":null,"previous_names":["rodrigobertotti/flutter_group_chat_app_with_firebase"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RodrigoBertotti%2Fflutter_group_chat_app_with_firebase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RodrigoBertotti%2Fflutter_group_chat_app_with_firebase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RodrigoBertotti%2Fflutter_group_chat_app_with_firebase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RodrigoBertotti%2Fflutter_group_chat_app_with_firebase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RodrigoBertotti","download_url":"https://codeload.github.com/RodrigoBertotti/flutter_group_chat_app_with_firebase/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228041291,"owners_count":17860221,"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":["agora","agora-flutter","agora-sdk","chat-room","cloud-firestore","cloud-functions","cloudfunctions","firebase","firebase-cloud-functions","firebasecloudfunctions","firestore","flutter","group-chat"],"created_at":"2024-12-04T04:07:27.098Z","updated_at":"2025-07-29T19:32:53.424Z","avatar_url":"https://github.com/RodrigoBertotti.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flutter Group Chat App with Firebase\nA complete Flutter Group Chat App with Firebase that supports video calls. \nIt handles typing, received and read indicators, Group Management, closed app and opened app notifications,\nsecurity, account creation, login, mutex for generating the numeric Agora UID and more.\n\n- Firebase Cloud Messaging (FCM) is used to send push notifications when the user sends a new message or joins a video call.\n- Firebase Cloud Functions: The backend that handles the Agora token request so the user can join the call. It also runs triggers when a Firestore document changes, like sending push notifications when a new message is created.\n- Video Calls are handled with [Agora](https://console.agora.io/projects), the package `agora_rtc_engine` is used to handle video calls, `agora_uikit` is used for the video call screen layout.\n- Firestore Security Rules: `firestore.rules` file contains rules like: only admins can add users to the group, users can only see public data of other users, etc.\n- Firestore Indexes: `firestore.indexes.json` file contains the Firestore indexes.\n\n## 🎥 [Click here to open the video](https://www.youtube.com/watch?v=dAo8S8eUIaM)\n\u003ca href=\"https://www.youtube.com/watch?v=dAo8S8eUIaM\"\u003e\u003cimg src=\"readme-image.png\" width=76% height=76%\u003e\u003c/a\u003e\n\n### Platforms\n\n|                    | Android | iOS | Web |\n|:-------------------|:-------:|----:|----:|\n| Video Calls        |    ✅    |   ✅ |   ❌ |\n| All other features |    ✅    |   ✅ |   ✅ |\n\n## Getting Started\n\n### Step 1:\n\nTo get started, open the terminal in the `flutter_app` folder.\n\nGo to your Firebase project \u003e Click on the Engine ⚙️ button right to \"Project Overview\" \u003e Copy your *Project ID*\nFollow the instructions of **Add Firebase to your Flutter app** and run these two commands inside the `flutter_app`\nfolder, replace `paste-your-project-id-here` with your own Project ID.\n\n    dart pub global activate flutterfire_cli\n    flutterfire configure --project=paste-your-project-id-here\n\nGo to your Firebase Console \u003e Build \u003e Authentication \u003e Get Started \u003e Sign-in method \u003e Email/Password and enable Email/Password and save it.\n\nGo to your Firebase Console \u003e Build \u003e Firestore Database \u003e Create database. You can choose any option (`Start in production mode` or `Start in test mode`), it's not important because we will update the security rules in the following steps.\n\n### Step 2: Push notifications (optional)\n\niOS and Web platforms require additional configuration for Firebase Cloud Messaging (FCM),\nso you can show push notifications when a user receives a new text message.\n\n#### iOS\n\n[Follow these instructions on iOS](https://firebase.flutter.dev/docs/messaging/apple-integration/).\n\n#### Web\nA **vapidKey** is required for web.\n\n1. Get your vapidKey on the Firebase Console, you can check the [instructions here](https://stackoverflow.com/a/54996207/4508758).\n2. Go to the file `flutter_app/lib/core/domain/services/notifications_service.dart`\n3. Replace the value of `_vapidKeyForWeb` with your own vapidKey\n\n**Set the environment** on the `web/environment` file:\n\n4. Copy the values from `web` field in the `flutter_app/lib/firebase_options.dart` file\n5. Paste the values in the `flutter_app/web/environment.js` file\n\n### Step 3: Video Calls (optional)\n\n1. Create your [Agora account](https://console.agora.io/projects), go to the [projects page](https://console.agora.io/projects) and click on \"Create a Project\"\n2. Under \"Authentication\" choose the **Secured mode: APP ID + Token (Recommended)** option\n3. Copy the **App ID** value and save in your notepad so that we can use later\n4. Click on \"Configure\"\n5. On \"App Certificate\", copy the **Primary Certificate** value as well\n6. Go to `functions/environment.ts` and set the Agora App ID and App Certificate.\n7. Go to `flutter_app/lib/environment.dart` and set only the Agora App ID there.\n\n:warning: Do not expose your App Certificate\n\n### Step 4: Deploying\n\n- Run `npm install -g firebase-tools` to install the Firebase CLI\n- Run `firebase use --add` and select your Firebase project, add any alias you prefer\n- Optional: In case you prefer not deploying to web, go to `firebase.json` file and remove the `hosting` object\n- And finally, run `firebase deploy`, so the firestore security rules will be updated, cloud functions and indexes will be created.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigobertotti%2Fflutter_group_chat_app_with_firebase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodrigobertotti%2Fflutter_group_chat_app_with_firebase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigobertotti%2Fflutter_group_chat_app_with_firebase/lists"}