{"id":13685722,"url":"https://github.com/acelords/flutter-starter-kit","last_synced_at":"2025-04-09T22:16:11.714Z","repository":{"id":43083834,"uuid":"246953992","full_name":"acelords/flutter-starter-kit","owner":"acelords","description":"A Flutter Starter Kit (Boilerplate) to kick-start your next Android and iOS app","archived":false,"fork":false,"pushed_at":"2021-01-21T09:36:10.000Z","size":3305,"stargazers_count":256,"open_issues_count":0,"forks_count":72,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-09T22:15:57.774Z","etag":null,"topics":["bloc","dart","flutter","flutter-examples","flutter-ui"],"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/acelords.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"patreon":"acelords","ko_fi":"acelords"}},"created_at":"2020-03-13T00:12:37.000Z","updated_at":"2025-04-07T18:53:55.000Z","dependencies_parsed_at":"2022-09-24T05:41:33.943Z","dependency_job_id":null,"html_url":"https://github.com/acelords/flutter-starter-kit","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acelords%2Fflutter-starter-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acelords%2Fflutter-starter-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acelords%2Fflutter-starter-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acelords%2Fflutter-starter-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acelords","download_url":"https://codeload.github.com/acelords/flutter-starter-kit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119287,"owners_count":21050755,"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":["bloc","dart","flutter","flutter-examples","flutter-ui"],"created_at":"2024-08-02T14:00:56.462Z","updated_at":"2025-04-09T22:16:11.691Z","avatar_url":"https://github.com/acelords.png","language":"Dart","funding_links":["https://patreon.com/acelords","https://ko-fi.com/acelords","https://patreon.com/lexxyungcarter","https://ko-fi.com/P5P81D3VE"],"categories":["Dart"],"sub_categories":[],"readme":"# Flutter Starter Kit (Boilerplate) using the BLoC Pattern\n\nA Flutter starter application that utilizes the BLoC Pattern.\nYou can read more at [this Medium's excellent post](https://medium.com/flutter-community/handling-network-calls-like-a-pro-in-flutter-31bd30c86be1)\n\n![Screenshot](assets/images/collage2.png?raw=true \"Screenshot 1\")\n![Screenshot](assets/images/collage1.png?raw=true \"Screenshot 2\")\n![Screenshot](assets/images/collage3.png?raw=true \"Screenshot 3\")\n\n## Features\n- Centralized place to manage your application's colors/branding (`lib \u003e utils \u003e styles`)\n- Centralized place to manage your application's constants/url/keys (`lib \u003e utils \u003e constants`)\n- **BLoC Pattern** when fetching and posting data over the internet.\n- **Logically \u0026 Naturally organized** files \u0026 folders.\n    - **api** - hold all your common api concerns (ApiBaseHelper, ApiResponse, AppException)\n    - **blocs** - hold all your blocs (Streams - provide data to the views. *relate to controllers in Laravel*)\n    - **models** - hold all your models (*relate to models in Laravel*)\n    - **repositories** - hold all your repositories (CRUD operations)\n    - **responses** - hold all your responses \n    - **utils** - hold all your utility files\n    - **views** - hold all your views/ui (*relate to views in Laravel*)\n        - **partials** - hold all your commonly used widgets (ApiError, Loading)\n- Google AdMob ready\n- Firebase FCM ready\n\nSample pages included:\n- Splash Screen\n- Intro Screens (when app installed)\n- Homepage\n- About\n- Rate App\n- Refer a Friend\n- Login\n- flutter tips (Sample content page)\n- Unknown Page (The fallback page when router doesn't find page specified in navigation)\n- Movies List (Demonstrates BLoC Pattern when fetching a list of movies)\n\n\n## Crowdfunding\n\u003ca href=\"https://patreon.com/lexxyungcarter\"\u003e\u003cimg src=\"https://c5.patreon.com/external/logo/become_a_patron_button.png\" alt=\"Patreon donate button\" /\u003e \u003c/a\u003e\n\n[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/P5P81D3VE)\n\nIt's also possible to buying products and merchandise at [Marketplace](https://store.acelords.space).\n\n## Getting Started\nTo safely start off your new flutter application while basing it off this project:\n- `git clone git@github.com:lexxyungcarter/flutter-starter-kit.git myapp`\n- Then open the folder inside **Android Studio** (Sorry `vscode` guys).\n- Using **Android Studio**, update the `namespace` of your project. \n- You're good to go\n- Go under `lib \u003e utils` folder and update your `constants` and `styles` file accordingly.\n- You can even create an `env.dart` file inside there to store your *secret keys* such as *api keys* while testing. This file will not be saved in git for privacy concerns\n\n### How to rename to your namespace (technically, to your appId)\nSay, your new `appId` is meant to be `example.company.myapp`, here's how to go about it:\n- Ensure **Android Studio** has finished indexing your project. **VERY IMPORTANT**\n- Making sure you're in the **Project Viewer* mode, expand on the **starterkit_android** to its entirety\n- As you can see, the current `nammespace` is set to `space.acelords.starterkit`\n- Right-click on `space`, select `refactor`\u003e`rename` and rename to your desired name, e.g. `example`\n- Select **Do Refactor** on all files presented at the terminal.\n- Repeat the same steps for the other parts of the `namespace`, i.e. `acelords` =\u003e `example` and `starterkit` =\u003e `myapp`\n- Confirm the namespace changing in `AppManifest` and all `build,gradle` files.\n- You're good to proceed building your app.\n\n## Building in DEV and Deploying to PRODUCTION\nWhen building your app, you may need to set some things to testing (such as **Google Ads**) to avoid any penalties. And when deploying, you may also need to revert a setting to production mode (such as **Google Ads** also to display real ads)\n\n### Setting up for Local Development\n- Go to `lib \u003e utils \u003e admob_constants.dart` file\n- Set `static bool testing = true;`\n- Go to `lib \u003e utils \u003e constants.dart` file\n- Set `static bool testing = true;`\n\n### Setting up for Production Development\n- Go to `lib \u003e utils \u003e admob_constants.dart` file\n- Set `static bool testing = false;`\n- Go to `lib \u003e utils \u003e constants.dart` file\n- Set `static bool testing = false;`\n\nAlso ensure you have provided your correct Google Ad Units in `admob_constants.dart` file. This way, you'll ensure your app displays correct ads in PlayStore.\n\n\u003e NB: To deploy Flutter app to store for the first time, you might need to read up on [How To](https://flutter.dev/docs/deployment/android). These instructions assume you already know how to. \n\n### Google AdMob\nTo setup Google Ads, \n- Update this file accordingly: `lib \u003e utils \u003e admob_constants.dart`.\n- Update the app's `build.gradle` (located under `android \u003e app \u003e build.gradle`) and go to line `68`. Update as instructed in the comments. \n- Update the projects' `build.gradle` (located under `android \u003e build.gradle`) and go to line `12`. Update as instructed in the comments. \n\nRemember to update **Your_Admob_App_ID** in the respective platforms. \n##### For iOS\n- Go to `ios \u003e Runner \u003e Info.plist` file\n- Navigate to line `#45` and update **Your_Admob_App_ID** accordingly.\n\n##### For Android\n- Go to `android \u003e app \u003e src \u003e main \u003e AndroidManiifest.xml` file\n- Navigate to line `#16` and update **Your_Admob_App_ID** accordingly.\n\n### FaceBook Ads\nThe setup for facebook ads is similar. The same file `lib \u003e utils \u003e admob_constants.dart` can be used/modified or another new file created for easier ads management.\n\n\n### Setting up FCM - Firebase Cloud Messaging\n- Go to `lib \u003e utils \u003e constants.dart` file\n- Search line #36 `static String publicTopicKey = testing ? \"testing\" : \"public\";`\n- Set the topic you'd like to always post to once app is run\n- Update **AndroidManifest.xml** file  `android \u003e app \u003e src \u003e main \u003e AndroidManifest.xml`. Go to line `20` and update accordingly.\n- You can also update **Colors** file `android \u003e app \u003e src \u003e main \u003e res \u003e values \u003e colors.xml` to match your app's theme color.\n\nFor apps requiring many topics, you can register multiple topics as required.\n\u003e NB: Ensure you understand FCM from the developers console at Google. A medium article is under authoring to explain this further.\n\nIn case you need the **Firebase Functions** setup project, contact us and we'll gladly organize how. It is written in **Node**. **Firebase Functions** can automatically send notifications to your users when a CRUD operation happens in **Firebase CloudStore** e.g. a new order, a new blog post, a team won, or an invoice payment. Your imagination is the limit.\n\n## Updating Launcher Icon\nDesign your app logo, preferably in **1024x1024** size (px). \nOnce done, open [https://appicon.co/#app-icon](https://appicon.co/#app-icon) in your browser and generate a new set of icons.\n- Place **appstore.png** to `assets \u003e icon` and rename it to **icon.png**\n- Copy the other folders to their respective locations. For instance, on android it is `android \u003e app \u003e src \u003e main \u003e res`.\n\u003e NB: You might need to manually remove **Icon** files from the folders. The website weirdly adds the unnecessary files, hindering a successful build\n- Once done, run this command in terminal: `flutter pub run flutter_launcher_icons:main`\n \n\n## AOB\nA few resources to get you started if this is your first Flutter project:\n\n- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)\n- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)\n\nFor help getting started with Flutter, view our\n[online documentation](https://flutter.dev/docs), which offers tutorials,\nsamples, guidance on mobile development, and a full API reference.\n\n\n## Contributing?\nSuggestions are welcome and any contributions whatsoever are highly valued. If feeling a little bit shy, feel free to send an email to \n- [AceLords](mailto:info@acelords.space).\n- [Lexx YungCarter](mailto:lexx@acelords.space).\n\n\n## Credits\n- [Lexx YungCarter](https://github.com/lexxyungcarter)\n- [AceLords](mailto:info@acelords.space)\n- Google - For creating Flutter!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facelords%2Fflutter-starter-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facelords%2Fflutter-starter-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facelords%2Fflutter-starter-kit/lists"}