{"id":20441417,"url":"https://github.com/sandromaglione/flutter-supabase-template","last_synced_at":"2025-04-06T07:09:49.620Z","repository":{"id":121157412,"uuid":"521221133","full_name":"SandroMaglione/flutter-supabase-template","owner":"SandroMaglione","description":"Complete configuration of a Flutter app with Supabase: environments, authentication, database, and more.","archived":false,"fork":false,"pushed_at":"2025-01-26T14:47:22.000Z","size":293,"stargazers_count":109,"open_issues_count":1,"forks_count":14,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-30T06:03:30.427Z","etag":null,"topics":["dart","flutter","flutter-app","flutter-examples","fpdart","functional-programming","supabase","supabase-auth","supabase-db","supabase-flutter"],"latest_commit_sha":null,"homepage":"https://www.sandromaglione.com/techblog/flutter-supabase-authentication-complete-tutorial","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/SandroMaglione.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":"2022-08-04T10:25:40.000Z","updated_at":"2025-03-22T02:49:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"be740243-cbe8-4c1c-a524-66c53a64296b","html_url":"https://github.com/SandroMaglione/flutter-supabase-template","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SandroMaglione%2Fflutter-supabase-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SandroMaglione%2Fflutter-supabase-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SandroMaglione%2Fflutter-supabase-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SandroMaglione%2Fflutter-supabase-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SandroMaglione","download_url":"https://codeload.github.com/SandroMaglione/flutter-supabase-template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247445667,"owners_count":20939958,"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","flutter","flutter-app","flutter-examples","fpdart","functional-programming","supabase","supabase-auth","supabase-db","supabase-flutter"],"created_at":"2024-11-15T09:32:47.824Z","updated_at":"2025-04-06T07:09:49.586Z","avatar_url":"https://github.com/SandroMaglione.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `Flutter + Supabase` app template\n\u003cp\u003e\n  \u003ca href=\"https://github.com/SandroMaglione\"\u003e\n    \u003cimg alt=\"GitHub: SandroMaglione\" src=\"https://img.shields.io/github/followers/SandroMaglione?label=Follow\u0026style=social\" target=\"_blank\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://twitter.com/SandroMaglione\"\u003e\n    \u003cimg alt=\"Twitter: SandroMaglione\" src=\"https://img.shields.io/twitter/follow/SandroMaglione.svg?style=social\" target=\"_blank\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/SandroMaglione/flutter-supabase-template\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/SandroMaglione/flutter-supabase-template?logo=github\" /\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/SandroMaglione/flutter-supabase-template?logo=github\" /\u003e\n\u003c/p\u003e\n\nThis app is a complete setup for a production ready [**Flutter**](https://flutter.dev/) application using [**Supabase**](https://supabase.com/) for [authentication](https://supabase.com/docs/guides/auth), [database](https://supabase.com/docs/guides/database), [storage](https://supabase.com/docs/guides/storage), and [more](https://supabase.com/docs/).\n\n## 🚀 How to run the app \n\n\u003e Make sure you [installed](https://docs.flutter.dev/get-started/install) Flutter and Dart in your machine\n\n1. Clone or fork the repository\n```shell\ngit clone https://github.com/SandroMaglione/flutter-supabase-template.git\n```\n\n2. Install the packages required\n```shell\nflutter pub get\n```\n\n3. Run the build command ([`build_runner`](https://pub.dev/packages/build_runner))\n```shell\nflutter packages pub run build_runner build  \n```\n\n4. Update [`.vscode/launch.json`](.vscode/launch.json) `args` with your Supabase project URL (`SUPABASE_URL`) and Key (`SUPABASE_ANNON_KEY`):\n```json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Production\",\n      \"request\": \"launch\",\n      \"type\": \"dart\",\n      \"program\": \"lib/main_prod.dart\",\n      \"args\": [\n        \"--dart-define=SUPABASE_URL=Url\",\n        \"--dart-define=SUPABASE_ANNON_KEY=Key\"\n      ]\n    }\n  ]\n}\n```\n5. Run the app 🚀\n\n## 🧱 Structure of the project\nThe project is organized in [releases](https://github.com/SandroMaglione/flutter-supabase-template/releases), each containing a specific set of changes for **one feature**:\n1. [Environment variables](https://github.com/SandroMaglione/flutter-supabase-template/tree/v1-env-vars) \n2. [Routing (`auto_route`)](https://github.com/SandroMaglione/flutter-supabase-template/tree/v2-navigation) \n3. [Dependency injection (`injectable`)](https://github.com/SandroMaglione/flutter-supabase-template/tree/v3-dep-injection) \n4. [Supabase authentication](https://github.com/SandroMaglione/flutter-supabase-template/tree/v4-supabase-auth) \n5. [Supabase database](https://github.com/SandroMaglione/flutter-supabase-template/tree/v5-supabase-database) \n6. [Functional programming (`fpdart`)](https://github.com/SandroMaglione/flutter-supabase-template/tree/v6-functional-programming) \n\nYou can review each set of changes individually by [**looking at each release**](https://github.com/SandroMaglione/flutter-supabase-template/tags).\n\n\u003e **Note**: Each feature is build on top of the previous one.\n\n### 📃 Packages used ([pubspec.yaml](pubspec.yaml))\n- [supabase_flutter](https://pub.dev/packages/supabase_flutter): Supabase SDK for Flutter's applications\n- [auto_route](https://pub.dev/packages/auto_route): Routing and navigation using auto-generation\n- [injectable](https://pub.dev/packages/injectable) ([get_it](https://pub.dev/packages/get_it)): Dependency injection using auto-generation\n- [fpdart](https://pub.dev/packages/fpdart): Functional programming in dart and flutter\n\n\u003e **Note**: This setup is opinionated. There are many other possible solutions and packages to achieve the same (or better) result. It would be interesting to start a discussion about each solution (by [opening new PRs](https://github.com/SandroMaglione/flutter-supabase-template/pulls) implementing other options)\n\n## 👨🏼‍🏫 Guides and tutorials\nEach feature in the app has a [**blog post**](https://www.sandromaglione.com/) associated with it that explains more in the details the changes made:\n1. [Environment variables](https://www.sandromaglione.com/articles/how-to-use-environmental-variables-in-flutter)\n2. [Routing (`auto_route`)](https://www.sandromaglione.com/articles/how-to-setup-routing-flutter-app)\n3. [Dependency injection (`injectable`)](https://www.sandromaglione.com/articles/how_to_implement_dependecy_injection_in_flutter)\n4. [Supabase authentication](https://www.sandromaglione.com/articles/flutter-supabase-authentication-complete-tutorial)\n5. [Supabase database](https://www.sandromaglione.com/articles/flutter-supabase-database-complete-tutorial)\n6. [Functional programming (`fpdart`)](https://www.sandromaglione.com/articles/flutter-dart-functional-programming-fpdart-supabase-app)\n\n## 🛣 Roadmap\n- [x] Adding support for [Supabase database](https://supabase.com/docs/guides/database)\n- [x] Improving the code using [**fpdart**](https://pub.dev/packages/fpdart) (Functional Programming)\n- [ ] Adding support for [Supabase storage](https://supabase.com/docs/guides/storage)\n\n## 🙏🏼 Contribution\nEvery feedback, feature request, and contribution is gladly accepted:\n- Create a [new issue request](https://github.com/SandroMaglione/flutter-supabase-template/issues)\n- Create a [new PR for contributions](https://github.com/SandroMaglione/flutter-supabase-template/pulls)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandromaglione%2Fflutter-supabase-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandromaglione%2Fflutter-supabase-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandromaglione%2Fflutter-supabase-template/lists"}