├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── build.md │ ├── chore.md │ ├── ci.md │ ├── config.yml │ ├── documentation.md │ ├── feature_request.md │ ├── performance.md │ ├── refactor.md │ ├── revert.md │ ├── style.md │ └── test.md ├── PULL_REQUEST_TEMPLATE.md ├── cspell.json ├── dependabot.yaml └── workflows │ ├── semantic_pull_request.yaml │ ├── spell_check.yaml │ └── very_good_flutter_package.yaml ├── .gitignore ├── LICENSE ├── README.md ├── analysis_options.yaml ├── brick ├── CHANGELOG.md ├── LICENSE ├── README.md ├── __brick__ │ └── {{project_name.snakeCase()}} │ │ ├── .github │ │ ├── ISSUE_TEMPLATE │ │ │ ├── bug_report.md │ │ │ ├── build.md │ │ │ ├── chore.md │ │ │ ├── ci.md │ │ │ ├── config.yml │ │ │ ├── documentation.md │ │ │ ├── feature_request.md │ │ │ ├── performance.md │ │ │ ├── refactor.md │ │ │ ├── revert.md │ │ │ ├── style.md │ │ │ └── test.md │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ ├── cspell.json │ │ ├── dependabot.yaml │ │ └── workflows │ │ │ └── main.yaml │ │ ├── .gitignore │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── coverage_badge.svg │ │ ├── lib │ │ ├── src │ │ │ └── {{project_name.snakeCase()}}.dart │ │ └── {{project_name.snakeCase()}}.dart │ │ ├── pubspec.yaml │ │ ├── test │ │ └── src │ │ │ └── {{project_name.snakeCase()}}_test.dart │ │ └── {{#publishable}}CHANGELOG.md{{ │ │ └── publishable}} ├── brick.yaml └── config.json └── mason.yaml /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Every request must be reviewed and accepted by: 2 | 3 | * @VeryGoodOpenSource/codeowners -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Create a report to help us improve 4 | title: "fix: " 5 | labels: bug 6 | --- 7 | 8 | **Description** 9 | 10 | A clear and concise description of what the bug is. 11 | 12 | **Steps To Reproduce** 13 | 14 | 1. Go to '...' 15 | 2. Click on '....' 16 | 3. Scroll down to '....' 17 | 4. See error 18 | 19 | **Expected Behavior** 20 | 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Additional Context** 28 | 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/build.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build System 3 | about: Changes that affect the build system or external dependencies 4 | title: "build: " 5 | labels: build 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the build system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The build system is passing 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/chore.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Chore 3 | about: Other changes that don't modify src or test files 4 | title: "chore: " 5 | labels: chore 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what change is needed and why. If this changes code then please use another issue type. 11 | 12 | **Requirements** 13 | 14 | - [ ] No functional changes to the code 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/ci.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Continuous Integration 3 | about: Changes to the CI configuration files and scripts 4 | title: "ci: " 5 | labels: ci 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the ci/cd system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The ci system is passing 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Improve the documentation so all collaborators have a common understanding 4 | title: "docs: " 5 | labels: documentation 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what documentation you are looking to add or improve. 11 | 12 | **Requirements** 13 | 14 | - [ ] Requirements go here 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: A new feature to be added to the project 4 | title: "feat: " 5 | labels: feature 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to add. The more context the better. 11 | 12 | **Requirements** 13 | 14 | - [ ] Checklist of requirements to be fulfilled 15 | 16 | **Additional Context** 17 | 18 | Add any other context or screenshots about the feature request go here. 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/performance.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Performance Update 3 | about: A code change that improves performance 4 | title: "perf: " 5 | labels: performance 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what code needs to be changed and what the performance impact is going to be. Bonus point's if you can tie this directly to user experience. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Refactor 3 | about: A code change that neither fixes a bug nor adds a feature 4 | title: "refactor: " 5 | labels: refactor 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what needs to be refactored and why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/revert.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Revert Commit 3 | about: Reverts a previous commit 4 | title: "revert: " 5 | labels: revert 6 | --- 7 | 8 | **Description** 9 | 10 | Provide a link to a PR/Commit that you are looking to revert and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] Change has been reverted 15 | - [ ] No change in test coverage has happened 16 | - [ ] A new ticket is created for any follow on work that needs to happen 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/style.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Style Changes 3 | about: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc) 4 | title: "style: " 5 | labels: style 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to change and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Test 3 | about: Adding missing tests or correcting existing tests 4 | title: "test: " 5 | labels: test 6 | --- 7 | 8 | **Description** 9 | 10 | List out the tests that need to be added or changed. Please also include any information as to why this was not covered in the past. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Status 10 | 11 | **READY/IN DEVELOPMENT/HOLD** 12 | 13 | ## Description 14 | 15 | 16 | 17 | ## Type of Change 18 | 19 | 20 | 21 | - [ ] ✨ New feature (non-breaking change which adds functionality) 22 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 23 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 24 | - [ ] 🧹 Code refactor 25 | - [ ] ✅ Build configuration change 26 | - [ ] 📝 Documentation 27 | - [ ] 🗑️ Chore 28 | -------------------------------------------------------------------------------- /.github/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2", 3 | "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json", 4 | "dictionaries": ["vgv_allowed", "vgv_forbidden"], 5 | "dictionaryDefinitions": [ 6 | { 7 | "name": "vgv_allowed", 8 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/allowed.txt", 9 | "description": "Allowed VGV Spellings" 10 | }, 11 | { 12 | "name": "vgv_forbidden", 13 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/forbidden.txt", 14 | "description": "Forbidden VGV Spellings" 15 | } 16 | ], 17 | "useGitignore": true, 18 | "words": [ 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | enable-beta-ecosystems: true 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | - package-ecosystem: "pub" 9 | directory: "/src/very_good_flutter_package" 10 | schedule: 11 | interval: "daily" 12 | - package-ecosystem: "pub" 13 | directory: "/tool/generator" 14 | schedule: 15 | interval: "daily" 16 | -------------------------------------------------------------------------------- /.github/workflows/semantic_pull_request.yaml: -------------------------------------------------------------------------------- 1 | name: semantic_pull_request 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | branches: 10 | - main 11 | pull_request: 12 | branches: 13 | - main 14 | 15 | jobs: 16 | semantic_pull_request: 17 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 18 | -------------------------------------------------------------------------------- /.github/workflows/spell_check.yaml: -------------------------------------------------------------------------------- 1 | name: spell_check 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | branches: 10 | - main 11 | pull_request: 12 | branches: 13 | - main 14 | 15 | jobs: 16 | spell-check: 17 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 18 | with: 19 | includes: | 20 | **/*.md 21 | !brick/**/*.md 22 | .*/**/*.md 23 | modified_files_only: false 24 | -------------------------------------------------------------------------------- /.github/workflows/very_good_flutter_package.yaml: -------------------------------------------------------------------------------- 1 | name: very_good_flutter_package 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - .github/workflows/very_good_flutter_package.yaml 11 | - "brick/**" 12 | branches: 13 | - main 14 | pull_request: 15 | paths: 16 | - .github/workflows/very_good_flutter_package.yaml 17 | - "brick/**" 18 | branches: 19 | - main 20 | 21 | jobs: 22 | brick: 23 | runs-on: ubuntu-latest 24 | 25 | strategy: 26 | matrix: 27 | flutter-version: 28 | # The version of Flutter to use should use the minimum Dart SDK version supported by the package, 29 | # refer to https://docs.flutter.dev/development/tools/sdk/releases. 30 | - "3.13.0" 31 | - "any" 32 | 33 | steps: 34 | - name: 📚 Git Checkout 35 | uses: actions/checkout@v4 36 | 37 | - name: 🐦 Setup Flutter 38 | uses: subosito/flutter-action@v2 39 | with: 40 | flutter-version: ${{ matrix.flutter-version }} 41 | 42 | - name: 🧱 Mason Make 43 | run: | 44 | dart pub global activate mason_cli 45 | mason get 46 | mason make very_good_flutter_package -c brick/config.json -o output --on-conflict overwrite 47 | 48 | - name: 📦 Install Dependencies 49 | run: | 50 | dart pub global activate very_good_cli 51 | very_good packages get --recursive output/test_package 52 | 53 | - name: ✨ Check Formatting 54 | run: dart format --set-exit-if-changed output/test_package 55 | 56 | - name: 🕵️ Analyze 57 | run: dart analyze --fatal-infos --fatal-warnings output/test_package 58 | 59 | - name: 🧪 Run Tests 60 | run: | 61 | cd output/test_package 62 | very_good test -j 4 --recursive --optimization --coverage --test-randomize-ordering-seed random 63 | 64 | - name: 📊 Check Code Coverage 65 | uses: VeryGoodOpenSource/very_good_coverage@v2 66 | with: 67 | path: output/test_package/coverage/lcov.info 68 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .atom/ 3 | .idea/* 4 | .vscode/* 5 | 6 | # Files and directories created by pub 7 | .dart_tool/ 8 | .packages 9 | pubspec.lock 10 | 11 | # Files and directories created by mason 12 | .mason/ 13 | mason-lock.json 14 | output/ 15 | 16 | # Files and directories created by MacOS 17 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Very Good Ventures 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Very Good Flutter Package 2 | 3 | ## 🚶‍♂️ [Repository has moved](https://github.com/VeryGoodOpenSource/very_good_templates/tree/main/very_good_flutter_package) 4 | 5 | The Very Good Flutter Package template is now developed within the [Very Good Templates](https://github.com/VeryGoodOpenSource/very_good_templates) repository, and can be found at [very_good_templates/very_good_flutter_package](https://github.com/VeryGoodOpenSource/very_good_templates/tree/main/very_good_flutter_package). 6 | 7 | Please file new issues on 8 | [Very Good Templates](https://github.com/VeryGoodOpenSource/very_good_templates). 9 | 10 | --- 11 | 12 | [![Very Good Ventures][logo_white]][very_good_ventures_link_dark] 13 | [![Very Good Ventures][logo_black]][very_good_ventures_link_light] 14 | 15 | Developed with 💙 by [Very Good Ventures][very_good_ventures_link] 🦄 16 | 17 | ![coverage][coverage_badge] 18 | [![License: MIT][license_badge]][license_link] 19 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 20 | [![Powered by Mason](https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge)](https://github.com/felangel/mason) 21 | 22 | A Very Good Flutter package created by Very Good Ventures 🦄. 23 | 24 | ## Getting Started 🚀 25 | 26 | 1. Install [mason][mason_link] 27 | 28 | `dart pub global activate mason_cli` 29 | 30 | 2. Add the brick 31 | 32 | `mason add -g very_good_flutter_package` 33 | 34 | 3. Make a new Flutter package 35 | 36 | `mason make very_good_flutter_package` 37 | 38 | ## What's Included 📦 39 | 40 | - ✅ GitHub Workflow powered by [Very Good Workflows][very_good_workflows_link] 41 | - ✅ Pull Request Template 42 | - ✅ Issue Templates 43 | - ✅ Dependabot Integration 44 | - ✅ Strict lint rules powered by [Very Good Analysis][very_good_analysis_link] 45 | - ✅ 100% Test Coverage 46 | - ✅ Fully Documented Public API 47 | - ✅ MIT License 48 | - ✅ Changelog 49 | 50 | [coverage_badge]: brick/__brick__/{{project_name.snakeCase()}}/coverage_badge.svg 51 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 52 | [license_link]: https://opensource.org/licenses/MIT 53 | [logo_black]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_black.png#gh-light-mode-only 54 | [logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only 55 | [mason_link]: https://github.com/felangel/mason 56 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 57 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis 58 | [very_good_ventures_link]: https://verygood.ventures 59 | [very_good_ventures_link_light]: https://verygood.ventures#gh-light-mode-only 60 | [very_good_ventures_link_dark]: https://verygood.ventures#gh-dark-mode-only 61 | [very_good_workflows_link]: https://github.com/VeryGoodOpenSource/very_good_workflows 62 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | analyzer: 2 | exclude: 3 | - brick/** 4 | -------------------------------------------------------------------------------- /brick/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 0.4.1 2 | 3 | - feat: upgrade to very_good_analysis ^5.1.0 4 | - docs: update README.md install instructions 5 | 6 | # 0.4.0 7 | 8 | - feat!: bump min Dart SDK to 3.0.0 9 | 10 | # 0.3.0 11 | 12 | - feat!: bump min Dart SDK to 2.19.0 13 | 14 | # 0.2.6 15 | 16 | - chore: support dart sdk 2.18.0 17 | 18 | # 0.2.5 19 | 20 | - feat: update workflows, add spellcheck 21 | - fix: flutter version on github workflow 22 | 23 | # 0.2.4 24 | 25 | - fix: upgrade workflow to use Flutter 3.7.3 for compatibility with Very Good Analysis 26 | 27 | # 0.2.3 28 | 29 | - feat: upgrade to `very_good_analysis ^4.0.0` 30 | 31 | # 0.2.2 32 | 33 | - feat: upgrade to Flutter 3.7.0 34 | 35 | # 0.2.1 36 | 37 | - fix: windows path resolution 38 | - fix: GitHub workflow concurrency group 39 | 40 | # 0.2.0 41 | 42 | - **BREAKING** feat: add `publishable` flag (defaults to `false`) 43 | 44 | # 0.1.4 45 | 46 | - docs: remove copyright header and license from generated code 47 | 48 | # 0.1.3 49 | 50 | - feat: upgrade to Flutter 3.3.7 51 | 52 | # 0.1.2 53 | 54 | - feat: upgrade to Flutter 3.3.3 55 | 56 | # 0.1.1 57 | 58 | - feat: upgrade to Flutter 3.3.2 and very_good_analysis 3.1.0 59 | 60 | # 0.1.0 61 | 62 | - feat: upgrade to Flutter 3.3.1 and very_good_analysis 3.0.2 63 | 64 | # 0.0.1 65 | 66 | - feat: initial release 🎉 67 | -------------------------------------------------------------------------------- /brick/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Very Good Ventures 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /brick/README.md: -------------------------------------------------------------------------------- 1 | # Very Good Flutter Package 2 | 3 | [![Very Good Ventures][logo_white]][very_good_ventures_link_dark] 4 | 5 | Developed with 💙 by [Very Good Ventures][very_good_ventures_link] 🦄 6 | 7 | [![License: MIT][license_badge]][license_link] 8 | [![Powered by Mason](https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge)](https://github.com/felangel/mason) 9 | 10 | A Very Good Flutter package created by Very Good Ventures 🦄. 11 | 12 | ## What's Included ✨ 13 | 14 | - ✅ GitHub Workflow powered by [Very Good Workflows][very_good_workflows_link] 15 | - ✅ Pull Request Template 16 | - ✅ Issue Templates 17 | - ✅ Dependabot Integration 18 | - ✅ Strict lint rules powered by [Very Good Analysis][very_good_analysis_link] 19 | - ✅ 100% Test Coverage 20 | - ✅ Fully Documented Public API 21 | - ✅ MIT License 22 | - ✅ Changelog 23 | 24 | ## Output 📦 25 | 26 | ```sh 27 | ├── .github 28 | │ ├── ISSUE_TEMPLATE 29 | │ │ ├── bug_report.md 30 | │ │ ├── build.md 31 | │ │ ├── chore.md 32 | │ │ ├── ci.md 33 | │ │ ├── config.yml 34 | │ │ ├── documentation.md 35 | │ │ ├── feature_request.md 36 | │ │ ├── performance.md 37 | │ │ ├── refactor.md 38 | │ │ ├── revert.md 39 | │ │ ├── style.md 40 | │ │ └── test.md 41 | │ ├── PULL_REQUEST_TEMPLATE.md 42 | │ ├── dependabot.yaml 43 | │ └── workflows 44 | │ └── main.yaml 45 | ├── .gitignore 46 | ├── CHANGELOG.md 47 | ├── LICENSE 48 | ├── README.md 49 | ├── analysis_options.yaml 50 | ├── coverage_badge.svg 51 | ├── lib 52 | │ ├── src 53 | │ │ └── my_package.dart 54 | │ └── my_package.dart 55 | ├── pubspec.yaml 56 | └── test 57 | └── src 58 | └── my_package_test.dart 59 | ``` 60 | 61 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 62 | [license_link]: https://opensource.org/licenses/MIT 63 | [logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only 64 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis 65 | [very_good_ventures_link_dark]: https://verygood.ventures#gh-dark-mode-only 66 | [very_good_ventures_link]: https://verygood.ventures 67 | [very_good_workflows_link]: https://github.com/VeryGoodOpenSource/very_good_workflows 68 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Create a report to help us improve 4 | title: "fix: " 5 | labels: bug 6 | --- 7 | 8 | **Description** 9 | 10 | A clear and concise description of what the bug is. 11 | 12 | **Steps To Reproduce** 13 | 14 | 1. Go to '...' 15 | 2. Click on '....' 16 | 3. Scroll down to '....' 17 | 4. See error 18 | 19 | **Expected Behavior** 20 | 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Additional Context** 28 | 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/build.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build System 3 | about: Changes that affect the build system or external dependencies 4 | title: "build: " 5 | labels: build 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the build system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The build system is passing 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/chore.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Chore 3 | about: Other changes that don't modify src or test files 4 | title: "chore: " 5 | labels: chore 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what change is needed and why. If this changes code then please use another issue type. 11 | 12 | **Requirements** 13 | 14 | - [ ] No functional changes to the code 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/ci.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Continuous Integration 3 | about: Changes to the CI configuration files and scripts 4 | title: "ci: " 5 | labels: ci 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the ci/cd system and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] The ci system is passing 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Improve the documentation so all collaborators have a common understanding 4 | title: "docs: " 5 | labels: documentation 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what documentation you are looking to add or improve. 11 | 12 | **Requirements** 13 | 14 | - [ ] Requirements go here 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: A new feature to be added to the project 4 | title: "feat: " 5 | labels: feature 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to add. The more context the better. 11 | 12 | **Requirements** 13 | 14 | - [ ] Checklist of requirements to be fulfilled 15 | 16 | **Additional Context** 17 | 18 | Add any other context or screenshots about the feature request go here. 19 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/performance.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Performance Update 3 | about: A code change that improves performance 4 | title: "perf: " 5 | labels: performance 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what code needs to be changed and what the performance impact is going to be. Bonus point's if you can tie this directly to user experience. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Refactor 3 | about: A code change that neither fixes a bug nor adds a feature 4 | title: "refactor: " 5 | labels: refactor 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what needs to be refactored and why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/revert.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Revert Commit 3 | about: Reverts a previous commit 4 | title: "revert: " 5 | labels: revert 6 | --- 7 | 8 | **Description** 9 | 10 | Provide a link to a PR/Commit that you are looking to revert and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] Change has been reverted 15 | - [ ] No change in test coverage has happened 16 | - [ ] A new ticket is created for any follow on work that needs to happen 17 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/style.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Style Changes 3 | about: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc) 4 | title: "style: " 5 | labels: style 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to change and why. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/ISSUE_TEMPLATE/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Test 3 | about: Adding missing tests or correcting existing tests 4 | title: "test: " 5 | labels: test 6 | --- 7 | 8 | **Description** 9 | 10 | List out the tests that need to be added or changed. Please also include any information as to why this was not covered in the past. 11 | 12 | **Requirements** 13 | 14 | - [ ] There is no drop in test coverage. 15 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Status 10 | 11 | **READY/IN DEVELOPMENT/HOLD** 12 | 13 | ## Description 14 | 15 | 16 | 17 | ## Type of Change 18 | 19 | 20 | 21 | - [ ] ✨ New feature (non-breaking change which adds functionality) 22 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 23 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 24 | - [ ] 🧹 Code refactor 25 | - [ ] ✅ Build configuration change 26 | - [ ] 📝 Documentation 27 | - [ ] 🗑️ Chore 28 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2", 3 | "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json", 4 | "dictionaries": ["vgv_allowed", "vgv_forbidden"], 5 | "dictionaryDefinitions": [ 6 | { 7 | "name": "vgv_allowed", 8 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/allowed.txt", 9 | "description": "Allowed VGV Spellings" 10 | }, 11 | { 12 | "name": "vgv_forbidden", 13 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/forbidden.txt", 14 | "description": "Forbidden VGV Spellings" 15 | } 16 | ], 17 | "useGitignore": true, 18 | "words": [ 19 | "{{project_name.snakeCase()}}" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | enable-beta-ecosystems: true 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | - package-ecosystem: "pub" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | concurrency: 4 | group: ${{#mustacheCase}}github.workflow{{/mustacheCase}}-${{#mustacheCase}}github.ref{{/mustacheCase}} 5 | cancel-in-progress: true 6 | 7 | on: 8 | pull_request: 9 | branches: 10 | - main 11 | 12 | jobs: 13 | semantic_pull_request: 14 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 15 | 16 | spell-check: 17 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 18 | with: 19 | includes: "**/*.md" 20 | modified_files_only: false 21 | 22 | build: 23 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 24 | with: 25 | flutter_channel: stable 26 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # VSCode related 20 | .vscode/* 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | **/ios/Flutter/.last_build_id 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | pubspec.lock 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Test related 44 | coverage -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/README.md: -------------------------------------------------------------------------------- 1 | # {{project_name.titleCase()}} 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![Powered by Mason](https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge)](https://github.com/felangel/mason) 5 | [![License: MIT][license_badge]][license_link] 6 | 7 | {{{description}}} 8 | 9 | ## Installation 💻 10 | 11 | **❗ In order to start using {{project_name.titleCase()}} you must have the [Flutter SDK][flutter_install_link] installed on your machine.** 12 | 13 | Install via `flutter pub add`: 14 | 15 | ```sh 16 | dart pub add {{project_name.snakeCase()}} 17 | ``` 18 | 19 | --- 20 | 21 | ## Continuous Integration 🤖 22 | 23 | {{project_name.titleCase()}} comes with a built-in [GitHub Actions workflow][github_actions_link] powered by [Very Good Workflows][very_good_workflows_link] but you can also add your preferred CI/CD solution. 24 | 25 | Out of the box, on each pull request and push, the CI `formats`, `lints`, and `tests` the code. This ensures the code remains consistent and behaves correctly as you add functionality or make changes. The project uses [Very Good Analysis][very_good_analysis_link] for a strict set of analysis options used by our team. Code coverage is enforced using the [Very Good Workflows][very_good_coverage_link]. 26 | 27 | --- 28 | 29 | ## Running Tests 🧪 30 | 31 | For first time users, install the [very_good_cli][very_good_cli_link]: 32 | 33 | ```sh 34 | dart pub global activate very_good_cli 35 | ``` 36 | 37 | To run all unit tests: 38 | 39 | ```sh 40 | very_good test --coverage 41 | ``` 42 | 43 | To view the generated coverage report you can use [lcov](https://github.com/linux-test-project/lcov). 44 | 45 | ```sh 46 | # Generate Coverage Report 47 | genhtml coverage/lcov.info -o coverage/ 48 | 49 | # Open Coverage Report 50 | open coverage/index.html 51 | ``` 52 | 53 | [flutter_install_link]: https://docs.flutter.dev/get-started/install 54 | [github_actions_link]: https://docs.github.com/en/actions/learn-github-actions 55 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 56 | [license_link]: https://opensource.org/licenses/MIT 57 | [logo_black]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_black.png#gh-light-mode-only 58 | [logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only 59 | [mason_link]: https://github.com/felangel/mason 60 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 61 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis 62 | [very_good_cli_link]: https://pub.dev/packages/very_good_cli 63 | [very_good_coverage_link]: https://github.com/marketplace/actions/very-good-coverage 64 | [very_good_ventures_link]: https://verygood.ventures 65 | [very_good_ventures_link_light]: https://verygood.ventures#gh-light-mode-only 66 | [very_good_ventures_link_dark]: https://verygood.ventures#gh-dark-mode-only 67 | [very_good_workflows_link]: https://github.com/VeryGoodOpenSource/very_good_workflows 68 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml 2 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | 21 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/lib/src/{{project_name.snakeCase()}}.dart: -------------------------------------------------------------------------------- 1 | /// {@template {{project_name.snakeCase()}}} 2 | /// {{{description}}} 3 | /// {@endtemplate} 4 | class {{project_name.pascalCase()}} { 5 | /// {@macro {{project_name.snakeCase()}}} 6 | const {{project_name.pascalCase()}}(); 7 | } 8 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/lib/{{project_name.snakeCase()}}.dart: -------------------------------------------------------------------------------- 1 | /// {{{description}}} 2 | library {{project_name.snakeCase()}}; 3 | 4 | export 'src/{{project_name.snakeCase()}}.dart'; 5 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: {{project_name.snakeCase()}} 2 | description: {{{description}}} 3 | version: 0.1.0+1 4 | {{^publishable}}publish_to: none{{/publishable}} 5 | 6 | environment: 7 | sdk: ">=3.0.0 <4.0.0" 8 | flutter: ">=3.10.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | mocktail: ^1.0.0 18 | very_good_analysis: ^5.1.0 19 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/test/src/{{project_name.snakeCase()}}_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:{{project_name.snakeCase()}}/{{project_name.snakeCase()}}.dart'; 5 | 6 | void main() { 7 | group('{{project_name.pascalCase()}}', () { 8 | test('can be instantiated', () { 9 | expect({{project_name.pascalCase()}}(), isNotNull); 10 | }); 11 | }); 12 | } 13 | -------------------------------------------------------------------------------- /brick/__brick__/{{project_name.snakeCase()}}/{{#publishable}}CHANGELOG.md{{/publishable}}: -------------------------------------------------------------------------------- 1 | # 0.1.0+1 2 | 3 | - feat: initial commit 🎉 4 | -------------------------------------------------------------------------------- /brick/brick.yaml: -------------------------------------------------------------------------------- 1 | name: very_good_flutter_package 2 | description: A Very Good Flutter package created by Very Good Ventures. 3 | repository: https://github.com/VeryGoodOpenSource/very_good_flutter_package 4 | version: 0.4.1 5 | 6 | environment: 7 | mason: ">=0.1.0-dev.50 <0.1.0" 8 | 9 | vars: 10 | project_name: 11 | type: string 12 | description: The package name 13 | default: my_package 14 | prompt: What is the project name? 15 | description: 16 | type: string 17 | description: The package description 18 | default: A very good flutter package 19 | prompt: What is the project description? 20 | publishable: 21 | type: boolean 22 | description: Whether the generated package is intended to be published. 23 | default: false 24 | prompt: Will the package be published? 25 | -------------------------------------------------------------------------------- /brick/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_name": "test_package", 3 | "description": "A generated Very Good Flutter package.", 4 | "publishable": false 5 | } 6 | -------------------------------------------------------------------------------- /mason.yaml: -------------------------------------------------------------------------------- 1 | bricks: 2 | very_good_flutter_package: 3 | path: brick --------------------------------------------------------------------------------