├── .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
│ ├── sync_labels.yaml
│ └── very_good_flutter_plugin.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
│ │ │ │ ├── ci.yaml
│ │ │ │ ├── {{#android}}{{project_name.snakeCase()}}_android.yaml{{
│ │ │ │ └── android}}
│ │ │ │ ├── {{#ios}}{{project_name.snakeCase()}}_ios.yaml{{
│ │ │ │ └── ios}}
│ │ │ │ ├── {{#linux}}{{project_name.snakeCase()}}_linux.yaml{{
│ │ │ │ └── linux}}
│ │ │ │ ├── {{#macos}}{{project_name.snakeCase()}}_macos.yaml{{
│ │ │ │ └── macos}}
│ │ │ │ ├── {{#web}}{{project_name.snakeCase()}}_web.yaml{{
│ │ │ │ └── web}}
│ │ │ │ ├── {{#windows}}{{project_name.snakeCase()}}_windows.yaml{{
│ │ │ │ └── windows}}
│ │ │ │ ├── {{project_name.snakeCase()}}.yaml
│ │ │ │ └── {{project_name.snakeCase()}}_platform_interface.yaml
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── {{#android}}{{project_name.snakeCase()}}_android{{
│ │ │ └── android}}
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── android
│ │ │ │ ├── .gitignore
│ │ │ │ ├── build.gradle
│ │ │ │ ├── settings.gradle
│ │ │ │ └── src
│ │ │ │ │ └── main
│ │ │ │ │ ├── AndroidManifest.xml
│ │ │ │ │ └── kotlin
│ │ │ │ │ └── {{org_name.pathCase()}}
│ │ │ │ │ └── {{project_name.pascalCase()}}Plugin.kt
│ │ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}_android.dart
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_android_test.dart
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{#ios}}{{project_name.snakeCase()}}_ios{{
│ │ │ └── ios}}
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── ios
│ │ │ │ ├── Classes
│ │ │ │ │ └── {{project_name.pascalCase()}}Plugin.swift
│ │ │ │ └── {{project_name.snakeCase()}}_ios.podspec
│ │ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}_ios.dart
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_ios_test.dart
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{#linux}}{{project_name.snakeCase()}}_linux{{
│ │ │ └── linux}}
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── lib
│ │ │ │ ├── src
│ │ │ │ │ └── {{project_name.snakeCase()}}_linux.dart
│ │ │ │ └── {{project_name.snakeCase()}}_linux.dart
│ │ │ │ ├── linux
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ └── {{project_name.snakeCase()}}_linux
│ │ │ │ │ │ └── {{project_name.snakeCase()}}_plugin.h
│ │ │ │ └── {{project_name.snakeCase()}}_linux_plugin.cc
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_linux_test.dart
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{#macos}}{{project_name.snakeCase()}}_macos{{
│ │ │ └── macos}}
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}_macos.dart
│ │ │ │ ├── macos
│ │ │ │ ├── Classes
│ │ │ │ │ └── {{project_name.pascalCase()}}Plugin.swift
│ │ │ │ └── {{project_name.snakeCase()}}_macos.podspec
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_macos_test.dart
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{#web}}{{project_name.snakeCase()}}_web{{
│ │ │ └── web}}
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}_web.dart
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_web_test.dart
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{#windows}}{{project_name.snakeCase()}}_windows{{
│ │ │ └── windows}}
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .metadata
│ │ │ │ ├── README.md
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}_windows.dart
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_windows_test.dart
│ │ │ │ ├── windows
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ └── {{project_name.snakeCase()}}_windows
│ │ │ │ │ │ └── {{project_name.snakeCase()}}_windows.h
│ │ │ │ └── {{project_name.snakeCase()}}_windows_plugin.cpp
│ │ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ ├── {{project_name.snakeCase()}}
│ │ │ ├── README.md
│ │ │ ├── analysis_options.yaml
│ │ │ ├── coverage_badge.svg
│ │ │ ├── example
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .metadata
│ │ │ │ ├── README.md
│ │ │ │ ├── actions
│ │ │ │ │ └── check_platform_name
│ │ │ │ │ │ ├── analysis_options.yaml
│ │ │ │ │ │ ├── lib
│ │ │ │ │ │ ├── check_platform_name.dart
│ │ │ │ │ │ └── src
│ │ │ │ │ │ │ └── check_platform_name.dart
│ │ │ │ │ │ ├── pubspec.yaml
│ │ │ │ │ │ └── test
│ │ │ │ │ │ ├── register_test.dart
│ │ │ │ │ │ └── src
│ │ │ │ │ │ └── check_platform_name_test.dart
│ │ │ │ ├── analysis_options.yaml
│ │ │ │ ├── flows
│ │ │ │ │ └── test_platform_name.yaml
│ │ │ │ ├── fluttium.yaml
│ │ │ │ ├── integration_test
│ │ │ │ │ └── app_test.dart
│ │ │ │ ├── lib
│ │ │ │ │ └── main.dart
│ │ │ │ ├── pubspec.yaml
│ │ │ │ ├── test_driver
│ │ │ │ │ └── integration_test.dart
│ │ │ │ ├── {{#android}}android{{
│ │ │ │ │ └── android}}
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── app
│ │ │ │ │ │ ├── build.gradle
│ │ │ │ │ │ └── src
│ │ │ │ │ │ │ ├── debug
│ │ │ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ │ │ │ ├── main
│ │ │ │ │ │ │ ├── AndroidManifest.xml
│ │ │ │ │ │ │ ├── kotlin
│ │ │ │ │ │ │ │ └── com
│ │ │ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ │ │ └── {{project_name.snakeCase()}}
│ │ │ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ │ │ └── res
│ │ │ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ │ │ ├── values-night
│ │ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ │ │ └── values
│ │ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ │ └── profile
│ │ │ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ │ │ ├── build.gradle
│ │ │ │ │ │ ├── gradle.properties
│ │ │ │ │ │ ├── gradle
│ │ │ │ │ │ └── wrapper
│ │ │ │ │ │ │ └── gradle-wrapper.properties
│ │ │ │ │ │ └── settings.gradle
│ │ │ │ ├── {{#ios}}ios{{
│ │ │ │ │ └── ios}}
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── Flutter
│ │ │ │ │ │ ├── AppFrameworkInfo.plist
│ │ │ │ │ │ ├── Debug.xcconfig
│ │ │ │ │ │ └── Release.xcconfig
│ │ │ │ │ │ ├── Podfile
│ │ │ │ │ │ ├── Runner.xcodeproj
│ │ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ └── xcschemes
│ │ │ │ │ │ │ └── Runner.xcscheme
│ │ │ │ │ │ ├── Runner.xcworkspace
│ │ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ │ │ │ └── Runner
│ │ │ │ │ │ ├── AppDelegate.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ │ └── LaunchImage.imageset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── Base.lproj
│ │ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ │ └── Main.storyboard
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ └── Runner-Bridging-Header.h
│ │ │ │ ├── {{#linux}}linux{{
│ │ │ │ │ └── linux}}
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ │ ├── flutter
│ │ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ │ └── generated_plugins.cmake
│ │ │ │ │ │ ├── main.cc
│ │ │ │ │ │ ├── my_application.cc
│ │ │ │ │ │ └── my_application.h
│ │ │ │ ├── {{#macos}}macos{{
│ │ │ │ │ └── macos}}
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── Flutter
│ │ │ │ │ │ ├── Flutter-Debug.xcconfig
│ │ │ │ │ │ └── Flutter-Release.xcconfig
│ │ │ │ │ │ ├── Podfile
│ │ │ │ │ │ ├── Runner.xcodeproj
│ │ │ │ │ │ ├── project.pbxproj
│ │ │ │ │ │ ├── project.xcworkspace
│ │ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ └── xcschemes
│ │ │ │ │ │ │ └── Runner.xcscheme
│ │ │ │ │ │ ├── Runner.xcworkspace
│ │ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ │ │ └── Runner
│ │ │ │ │ │ ├── AppDelegate.swift
│ │ │ │ │ │ ├── Assets.xcassets
│ │ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ │ ├── app_icon_1024.png
│ │ │ │ │ │ │ ├── app_icon_128.png
│ │ │ │ │ │ │ ├── app_icon_16.png
│ │ │ │ │ │ │ ├── app_icon_256.png
│ │ │ │ │ │ │ ├── app_icon_32.png
│ │ │ │ │ │ │ ├── app_icon_512.png
│ │ │ │ │ │ │ └── app_icon_64.png
│ │ │ │ │ │ ├── Base.lproj
│ │ │ │ │ │ └── MainMenu.xib
│ │ │ │ │ │ ├── Configs
│ │ │ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ │ │ ├── Debug.xcconfig
│ │ │ │ │ │ ├── Release.xcconfig
│ │ │ │ │ │ └── Warnings.xcconfig
│ │ │ │ │ │ ├── DebugProfile.entitlements
│ │ │ │ │ │ ├── Info.plist
│ │ │ │ │ │ ├── MainFlutterWindow.swift
│ │ │ │ │ │ └── Release.entitlements
│ │ │ │ ├── {{#web}}web{{
│ │ │ │ │ └── web}}
│ │ │ │ │ │ ├── favicon.png
│ │ │ │ │ │ ├── icons
│ │ │ │ │ │ ├── Icon-192.png
│ │ │ │ │ │ ├── Icon-512.png
│ │ │ │ │ │ ├── Icon-maskable-192.png
│ │ │ │ │ │ └── Icon-maskable-512.png
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── manifest.json
│ │ │ │ └── {{#windows}}windows{{
│ │ │ │ │ └── windows}}
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ ├── flutter
│ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ └── generated_plugins.cmake
│ │ │ │ │ └── runner
│ │ │ │ │ ├── CMakeLists.txt
│ │ │ │ │ ├── Runner.rc
│ │ │ │ │ ├── flutter_window.cpp
│ │ │ │ │ ├── flutter_window.h
│ │ │ │ │ ├── main.cpp
│ │ │ │ │ ├── resource.h
│ │ │ │ │ ├── resources
│ │ │ │ │ └── app_icon.ico
│ │ │ │ │ ├── runner.exe.manifest
│ │ │ │ │ ├── utils.cpp
│ │ │ │ │ ├── utils.h
│ │ │ │ │ ├── win32_window.cpp
│ │ │ │ │ └── win32_window.h
│ │ │ ├── lib
│ │ │ │ └── {{project_name.snakeCase()}}.dart
│ │ │ ├── pubspec.yaml
│ │ │ ├── test
│ │ │ │ └── {{project_name.snakeCase()}}_test.dart
│ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ │ └── publishable}}
│ │ └── {{project_name.snakeCase()}}_platform_interface
│ │ │ ├── README.md
│ │ │ ├── analysis_options.yaml
│ │ │ ├── lib
│ │ │ ├── src
│ │ │ │ └── method_channel_{{project_name.snakeCase()}}.dart
│ │ │ └── {{project_name.snakeCase()}}_platform_interface.dart
│ │ │ ├── pubspec.yaml
│ │ │ ├── test
│ │ │ ├── src
│ │ │ │ └── method_channel_{{project_name.snakeCase()}}_test.dart
│ │ │ └── {{project_name.snakeCase()}}_platform_interface_test.dart
│ │ │ └── {{#publishable}}CHANGELOG.md{{
│ │ │ └── publishable}}
│ ├── {{~ plugin_dependencies.dart }}
│ └── {{~ plugin_platforms.dart }}
├── brick.yaml
├── config.json
└── hooks
│ ├── analysis_options.yaml
│ ├── lib
│ ├── src
│ │ └── cli
│ │ │ ├── cli.dart
│ │ │ ├── command_line.dart
│ │ │ ├── dart_cli.dart
│ │ │ └── very_good_cli.dart
│ └── very_good_flutter_plugin_hooks.dart
│ ├── post_gen.dart
│ ├── pre_gen.dart
│ ├── pubspec.yaml
│ └── test
│ ├── cli
│ ├── command_line_test.dart
│ ├── dart_cli_test.dart
│ └── very_good_cli_test.dart
│ ├── post_gen_test.dart
│ └── pre_gen_test.dart
├── mason.yaml
└── tool
└── merge_coverage
├── merge_coverage.dart
└── pubspec.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 | "fluttium"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/.github/dependabot.yaml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "daily"
7 | - package-ecosystem: "pub"
8 | directory: "/brick/hooks"
9 | schedule:
10 | interval: "daily"
11 | - package-ecosystem: "pub"
12 | directory: "/tool/generator"
13 | schedule:
14 | interval: "daily"
15 | - package-ecosystem: "pub"
16 | directory: "/src/my_plugin/my_plugin_android"
17 | schedule:
18 | interval: "daily"
19 | - package-ecosystem: "pub"
20 | directory: "/src/my_plugin/my_plugin_platform_interface"
21 | schedule:
22 | interval: "daily"
23 | - package-ecosystem: "pub"
24 | directory: "/src/my_plugin/my_plugin_linux"
25 | schedule:
26 | interval: "daily"
27 | - package-ecosystem: "pub"
28 | directory: "/src/my_plugin/my_plugin_web"
29 | schedule:
30 | interval: "daily"
31 | - package-ecosystem: "pub"
32 | directory: "/src/my_plugin/my_plugin/example"
33 | schedule:
34 | interval: "daily"
35 | - package-ecosystem: "pub"
36 | directory: "/src/my_plugin/my_plugin/example/actions/check_platform_name"
37 | schedule:
38 | interval: "daily"
39 | - package-ecosystem: "pub"
40 | directory: "/src/my_plugin/my_plugin"
41 | schedule:
42 | interval: "daily"
43 | - package-ecosystem: "pub"
44 | directory: "/src/my_plugin/my_plugin_ios"
45 | schedule:
46 | interval: "daily"
47 | - package-ecosystem: "pub"
48 | directory: "/src/my_plugin/my_plugin_windows"
49 | schedule:
50 | interval: "daily"
51 | - package-ecosystem: "pub"
52 | directory: "/src/my_plugin/my_plugin_macos"
53 | schedule:
54 | interval: "daily"
55 |
--------------------------------------------------------------------------------
/.github/workflows/semantic_pull_request.yaml:
--------------------------------------------------------------------------------
1 | name: semantic_pull_request
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | build:
10 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1
11 |
--------------------------------------------------------------------------------
/.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/sync_labels.yaml:
--------------------------------------------------------------------------------
1 | name: ♻️ Sync Labels
2 |
3 | on:
4 | push:
5 | paths:
6 | - .github/labels.yml
7 | branches:
8 | - main
9 | workflow_dispatch:
10 |
11 | jobs:
12 | labels:
13 | name: ♻️ Sync labels
14 | runs-on: ubuntu-20.04
15 | steps:
16 | - name: ⤵️ Check out code from GitHub
17 | uses: actions/checkout@v4
18 |
19 | - name: 🚀 Run Label Sync
20 | uses: srealmoreno/label-sync-action@v1
21 | with:
22 | config-file: https://raw.githubusercontent.com/VeryGoodOpenSource/.github/main/.github/labels.yml
23 |
--------------------------------------------------------------------------------
/.github/workflows/very_good_flutter_plugin.yaml:
--------------------------------------------------------------------------------
1 | name: very_good_flutter_plugin
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_plugin.yaml
11 | - "brick/**"
12 | branches:
13 | - main
14 | pull_request:
15 | paths:
16 | - .github/workflows/very_good_flutter_plugin.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 | platform:
33 | - android
34 | - ios
35 | - linux
36 | - macos
37 | - web
38 | - windows
39 |
40 | steps:
41 | - name: 📚 Git Checkout
42 | uses: actions/checkout@v4
43 |
44 | - name: 🐦 Setup Flutter
45 | uses: subosito/flutter-action@v2
46 | with:
47 | flutter-version: ${{ matrix.flutter-version }}
48 |
49 | - name: 🧱 Mason Make
50 | run: |
51 | dart pub global activate mason_cli
52 | dart pub global activate very_good_cli
53 | mason get
54 | mason make very_good_flutter_plugin -c brick/config.json -o output --on-conflict overwrite --platforms ${{ matrix.platform }}
55 |
56 | - name: 📦 Install Dependencies
57 | run: very_good packages get --recursive output
58 |
59 | - name: ✨ Check Formatting
60 | if: false
61 | run: dart format --set-exit-if-changed output
62 |
63 | - name: 🕵️ Analyze
64 | if: false
65 | run: dart analyze --fatal-infos --fatal-warnings output
66 |
67 | - name: 🧪 Run Tests
68 | run: |
69 | cd output
70 | very_good test -j 4 --recursive --optimization --coverage --test-randomize-ordering-seed random
71 |
72 | - name: 📑 Combine Code Coverage
73 | run: |
74 | sudo apt-get -y install lcov
75 | very_good packages get --recursive tool/merge_coverage
76 | cd output
77 | dart run ../tool/merge_coverage/merge_coverage.dart
78 |
79 | - name: 📊 Check Code Coverage
80 | uses: VeryGoodOpenSource/very_good_coverage@v2
81 | with:
82 | path: output/coverage/lcov.info
83 | # TODO(alestiago): Remove once the following is solved:
84 | # https://github.com/VeryGoodOpenSource/very_good_flutter_plugin/issues/158
85 | min_coverage: 86
86 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .atom/
2 | .idea/
3 | .vscode/
4 |
5 | .packages
6 | .pub/
7 | .dart_tool/
8 | pubspec.lock
9 | flutter_export_environment.sh
10 | coverage/
11 |
12 | Podfile.lock
13 | Pods/
14 | .symlinks/
15 | **/Flutter/App.framework/
16 | **/Flutter/ephemeral/
17 | **/Flutter/Flutter.podspec
18 | **/Flutter/Flutter.framework/
19 | **/Flutter/Generated.xcconfig
20 | **/Flutter/flutter_assets/
21 |
22 | ServiceDefinitions.json
23 | xcuserdata/
24 | **/DerivedData/
25 |
26 | local.properties
27 | keystore.properties
28 | .gradle/
29 | gradlew
30 | gradlew.bat
31 | gradle-wrapper.jar
32 | .flutter-plugins-dependencies
33 | *.iml
34 |
35 | generated_plugin_registrant.cc
36 | generated_plugin_registrant.h
37 | generated_plugin_registrant.dart
38 | GeneratedPluginRegistrant.java
39 | GeneratedPluginRegistrant.h
40 | GeneratedPluginRegistrant.m
41 | GeneratedPluginRegistrant.swift
42 | build/
43 | .flutter-plugins
44 |
45 | .project
46 | .classpath
47 | .settings
48 |
49 | # Files and directories created by mason
50 | .mason/
51 | mason-lock.json
52 | output/
53 |
54 | # Files and directories created by MacOS
55 | .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.
22 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | analyzer:
2 | exclude:
3 | - brick/__brick__/**
4 |
--------------------------------------------------------------------------------
/brick/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # 0.6.0
2 |
3 | - fix: flaky integrated tests
4 | - feat: upgrade to `very_good_analysis ^5.1.0`
5 | - feat: add fluttium test workflow
6 | - docs: add docs for integration tests
7 |
8 | # 0.5.0
9 |
10 | - feat!: bump min Dart SDK to 3.0.0
11 |
12 | # 0.4.0
13 |
14 | - feat!: bump min Dart SDK to 2.19.0
15 |
16 | # 0.3.3
17 |
18 | - chore: fix generator run
19 | - fix: updated regex matching
20 | - chore: support dart sdk 2.18.0
21 |
22 | # 0.3.2
23 |
24 | - feat: update workflows, dependabot generation, add spellcheck
25 | - fix: integration tests
26 | - feat: use swift in iOS plugin
27 |
28 | # 0.3.1
29 |
30 | - feat: upgrade to `very_good_analysis 4.0.0`
31 |
32 | # 0.3.0
33 |
34 | - feat: upgrade to flutter 3.7.1
35 |
36 | # 0.2.1
37 |
38 | - fix: windows path resolution
39 | - feat: add ci concurrency group to workflow
40 |
41 | # 0.2.0
42 |
43 | - **BREAKING** feat: add `publishable` flag (defaults to `false`)
44 |
45 | # 0.1.2
46 |
47 | - docs: remove copyright header and license from generated code
48 |
49 | # 0.1.1
50 |
51 | - feat: upgrade to Flutter 3.3.2
52 | - feat: upgrade to very_good_analysis 3.1.0
53 |
54 | # 0.1.0+1
55 |
56 | - docs: minor README updates
57 | - add dependabot integration
58 | - fix broken link to very_good_analysis
59 |
60 | # 0.1.0
61 |
62 | - feat: upgrade to Flutter 3.3.1
63 | - feat: upgrade to very_good_analysis 3.0.2
64 | - fix: dependabot integration
65 |
66 | # 0.0.1+1
67 |
68 | - chore: remove duplicate images from README
69 |
70 | # 0.0.1
71 |
72 | - feat: initial release 🎉
73 |
--------------------------------------------------------------------------------
/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.
22 |
--------------------------------------------------------------------------------
/brick/README.md:
--------------------------------------------------------------------------------
1 | # Very Good Flutter Plugin
2 |
3 | [![Very Good Ventures][logo_white]][very_good_ventures_link]
4 |
5 | Developed with 💙 by [Very Good Ventures][very_good_ventures_link] 🦄
6 |
7 | [![License: MIT][license_badge]][license_link]
8 | [](https://github.com/felangel/mason)
9 |
10 | A Very Good federated Flutter plugin created by Very Good Ventures 🦄.
11 |
12 | ## What's Included ✨
13 |
14 | - ✅ Federated Plugin Architecture
15 | - ✅ Configurable Platforms (Android, iOS, MacOS, Linux, Web, Windows)
16 | - ✅ GitHub Workflow powered by [Very Good Workflows][very_good_workflows_link]
17 | - ✅ Strict lint rules powered by [Very Good Analysis][very_good_analysis_link]
18 | - ✅ Pull Request Template
19 | - ✅ Issue Templates
20 | - ✅ Dependabot Integration
21 | - ✅ 100% Test Coverage
22 | - ✅ Fully Documented Public API
23 | - ✅ MIT License
24 |
25 | ## Output 📦
26 |
27 | ```
28 | ├── .github
29 | │ ├── ISSUE_TEMPLATE
30 | │ └── workflows
31 | ├── my_plugin
32 | │ ├── example
33 | │ │ ├── android
34 | │ │ ├── integration_test
35 | │ │ ├── ios
36 | │ │ ├── lib
37 | │ │ ├── linux
38 | │ │ ├── macos
39 | │ │ ├── test_driver
40 | │ │ ├── web
41 | │ │ └── windows
42 | │ ├── lib
43 | │ └── test
44 | ├── my_plugin_android
45 | │ ├── android
46 | │ ├── lib
47 | │ └── test
48 | ├── my_plugin_ios
49 | │ ├── ios
50 | │ ├── lib
51 | │ └── test
52 | ├── my_plugin_linux
53 | │ ├── lib
54 | │ ├── linux
55 | │ └── test
56 | ├── my_plugin_macos
57 | │ ├── lib
58 | │ ├── macos
59 | │ └── test
60 | ├── my_plugin_platform_interface
61 | │ ├── lib
62 | │ └── test
63 | ├── my_plugin_web
64 | │ ├── lib
65 | │ └── test
66 | └── my_plugin_windows
67 | ├── lib
68 | ├── test
69 | └── windows
70 | ```
71 |
72 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg
73 | [license_link]: https://opensource.org/licenses/MIT
74 | [logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png
75 | [mason_link]: https://github.com/felangel/mason
76 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
77 | [very_good_ventures_link]: https://verygood.ventures
78 | [very_good_workflows_link]: https://github.com/VeryGoodOpenSource/very_good_workflows
79 |
--------------------------------------------------------------------------------
/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 | ## Description
10 |
11 |
12 |
13 | ## Type of Change
14 |
15 |
16 |
17 | - [ ] ✨ New feature (non-breaking change which adds functionality)
18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue)
19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change)
20 | - [ ] 🧹 Code refactor
21 | - [ ] ✅ Build configuration change
22 | - [ ] 📝 Documentation
23 | - [ ] 🗑️ Chore
24 |
--------------------------------------------------------------------------------
/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 | "fluttium"
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: "/{{project_name.snakeCase()}}"
10 | schedule:
11 | interval: "daily"
12 | - package-ecosystem: "pub"
13 | directory: "/{{project_name.snakeCase()}}/example"
14 | schedule:
15 | interval: "daily"
16 | - package-ecosystem: "pub"
17 | directory: "/{{project_name.snakeCase()}}_platform_interface"
18 | schedule:
19 | interval: "daily"{{#android}}
20 | - package-ecosystem: "pub"
21 | directory: "/{{project_name.snakeCase()}}_android"
22 | schedule:
23 | interval: "daily"{{/android}}{{#ios}}
24 | - package-ecosystem: "pub"
25 | directory: "/{{project_name.snakeCase()}}_ios"
26 | schedule:
27 | interval: "daily"{{/ios}}{{#linux}}
28 | - package-ecosystem: "pub"
29 | directory: "/{{project_name.snakeCase()}}_linux"
30 | schedule:
31 | interval: "daily"{{/linux}}{{#macos}}
32 | - package-ecosystem: "pub"
33 | directory: "/{{project_name.snakeCase()}}_macos"
34 | schedule:
35 | interval: "daily"{{/macos}}{{#web}}
36 | - package-ecosystem: "pub"
37 | directory: "/{{project_name.snakeCase()}}_web"
38 | schedule:
39 | interval: "daily"{{/web}}{{#windows}}
40 | - package-ecosystem: "pub"
41 | directory: "/{{project_name.snakeCase()}}_windows"
42 | schedule:
43 | interval: "daily"{{/windows}}
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/ci.yaml:
--------------------------------------------------------------------------------
1 | name: ci
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | build:
10 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1
11 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#android}}{{project_name.snakeCase()}}_android.yaml{{/android}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_android
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_android.yaml"
11 | - "{{project_name.snakeCase()}}_android/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_android.yaml"
17 | - "{{project_name.snakeCase()}}_android/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_android
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#ios}}{{project_name.snakeCase()}}_ios.yaml{{/ios}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_ios
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_ios.yaml"
11 | - "{{project_name.snakeCase()}}_ios/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_ios.yaml"
17 | - "{{project_name.snakeCase()}}_ios/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_ios
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#linux}}{{project_name.snakeCase()}}_linux.yaml{{/linux}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_linux
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_linux.yaml"
11 | - "{{project_name.snakeCase()}}_linux/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_linux.yaml"
17 | - "{{project_name.snakeCase()}}_linux/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_linux
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#macos}}{{project_name.snakeCase()}}_macos.yaml{{/macos}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_macos
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_macos.yaml"
11 | - "{{project_name.snakeCase()}}_macos/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_macos.yaml"
17 | - "{{project_name.snakeCase()}}_macos/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_macos
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#web}}{{project_name.snakeCase()}}_web.yaml{{/web}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_web
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_web.yaml"
11 | - "{{project_name.snakeCase()}}_web/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_web.yaml"
17 | - "{{project_name.snakeCase()}}_web/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_web
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{#windows}}{{project_name.snakeCase()}}_windows.yaml{{/windows}}:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_windows
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_windows.yaml"
11 | - "{{project_name.snakeCase()}}_windows/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_windows.yaml"
17 | - "{{project_name.snakeCase()}}_windows/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_windows
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.github/workflows/{{project_name.snakeCase()}}_platform_interface.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_platform_interface
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 | paths:
10 | - ".github/workflows/{{project_name.snakeCase()}}_platform_interface.yaml"
11 | - "{{project_name.snakeCase()}}_platform_interface/**"
12 | push:
13 | branches:
14 | - main
15 | paths:
16 | - ".github/workflows/{{project_name.snakeCase()}}_platform_interface.yaml"
17 | - "{{project_name.snakeCase()}}_platform_interface/**"
18 |
19 | jobs:
20 | build:
21 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
22 | with:
23 | flutter_channel: stable
24 | flutter_version: 3.13.2
25 | working_directory: {{project_name.snakeCase()}}_platform_interface
26 | {{#publishable}}
27 | pana:
28 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
29 | {{/publishable}}
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .idea/
4 | .vscode/
5 |
6 | .packages
7 | .pub/
8 | .dart_tool/
9 | pubspec.lock
10 | flutter_export_environment.sh
11 | coverage/
12 |
13 | Podfile.lock
14 | Pods/
15 | .symlinks/
16 | **/Flutter/App.framework/
17 | **/Flutter/ephemeral/
18 | **/Flutter/Flutter.podspec
19 | **/Flutter/Flutter.framework/
20 | **/Flutter/Generated.xcconfig
21 | **/Flutter/flutter_assets/
22 |
23 | ServiceDefinitions.json
24 | xcuserdata/
25 | **/DerivedData/
26 |
27 | local.properties
28 | keystore.properties
29 | .gradle/
30 | gradlew
31 | gradlew.bat
32 | gradle-wrapper.jar
33 | .flutter-plugins-dependencies
34 | *.iml
35 |
36 | generated_plugin_registrant.cc
37 | generated_plugin_registrant.h
38 | generated_plugin_registrant.dart
39 | GeneratedPluginRegistrant.java
40 | GeneratedPluginRegistrant.h
41 | GeneratedPluginRegistrant.m
42 | GeneratedPluginRegistrant.swift
43 | build/
44 | .flutter-plugins
45 |
46 | .project
47 | .classpath
48 | .settings
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}
2 |
3 | [![Very Good Ventures][logo_white]][very_good_ventures_link_dark]
4 | [![Very Good Ventures][logo_black]][very_good_ventures_link_light]
5 |
6 | Developed with 💙 by [Very Good Ventures][very_good_ventures_link] 🦄
7 |
8 | ![coverage][coverage_badge]
9 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
10 | [![License: MIT][license_badge]][license_link]
11 |
12 | A Very Good Flutter Federated Plugin created by the [Very Good Ventures Team][very_good_ventures_link].
13 |
14 | Generated by the [Very Good CLI][very_good_cli_link] 🤖
15 |
16 |
17 | ### Integration tests 🧪
18 |
19 | Very Good Flutter Plugin uses [fluttium][fluttium_link] for integration tests. Those tests are located
20 | in the front facing package `{{project_name.snakeCase()}}` example.
21 |
22 | **❗ In order to run the integration tests, you need to have the `fluttium_cli` installed. [See how][fluttium_install].**
23 |
24 | To run the integration tests, run the following command from the root of the project:
25 |
26 | ```sh
27 | cd {{project_name.snakeCase()}}/example
28 | fluttium test flows/test_platform_name.yaml
29 | ```
30 |
31 | [coverage_badge]: {{project_name.snakeCase()}}/coverage_badge.svg
32 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg
33 | [license_link]: https://opensource.org/licenses/MIT
34 | [logo_black]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_black.png#gh-light-mode-only
35 | [logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only
36 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
37 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
38 | [very_good_cli_link]: https://github.com/VeryGoodOpenSource/very_good_cli
39 | [very_good_ventures_link]: https://verygood.ventures/?utm_source=github&utm_medium=banner&utm_campaign=core
40 | [very_good_ventures_link_dark]: https://verygood.ventures/?utm_source=github&utm_medium=banner&utm_campaign=core#gh-dark-mode-only
41 | [very_good_ventures_link_light]: https://verygood.ventures/?utm_source=github&utm_medium=banner&utm_campaign=core#gh-light-mode-only
42 | [fluttium_link]: https://fluttium.dev/
43 | [fluttium_install]: https://fluttium.dev/docs/getting-started/installing-cli
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_android
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The Android implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/android/build.gradle:
--------------------------------------------------------------------------------
1 | group '{{org_name.dotCase()}}'
2 | version '1.0-SNAPSHOT'
3 |
4 | buildscript {
5 | ext.kotlin_version = '1.3.50'
6 | repositories {
7 | google()
8 | mavenCentral()
9 | }
10 |
11 | dependencies {
12 | classpath 'com.android.tools.build:gradle:4.1.0'
13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14 | }
15 | }
16 |
17 | rootProject.allprojects {
18 | repositories {
19 | google()
20 | mavenCentral()
21 | }
22 | }
23 |
24 | apply plugin: 'com.android.library'
25 | apply plugin: 'kotlin-android'
26 |
27 | android {
28 | compileSdkVersion 30
29 |
30 | compileOptions {
31 | sourceCompatibility JavaVersion.VERSION_1_8
32 | targetCompatibility JavaVersion.VERSION_1_8
33 | }
34 |
35 | kotlinOptions {
36 | jvmTarget = '1.8'
37 | }
38 |
39 | sourceSets {
40 | main.java.srcDirs += 'src/main/kotlin'
41 | }
42 |
43 | defaultConfig {
44 | minSdkVersion 16
45 | }
46 | }
47 |
48 | dependencies {
49 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
50 | }
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = '{{project_name.snakeCase()}}_android'
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/android/src/main/kotlin/{{org_name.pathCase()}}/{{project_name.pascalCase()}}Plugin.kt:
--------------------------------------------------------------------------------
1 | package {{org_name.dotCase()}}
2 |
3 | import android.content.Context
4 | import androidx.annotation.NonNull
5 |
6 | import io.flutter.embedding.engine.plugins.FlutterPlugin
7 | import io.flutter.plugin.common.MethodCall
8 | import io.flutter.plugin.common.MethodChannel
9 | import io.flutter.plugin.common.MethodChannel.MethodCallHandler
10 | import io.flutter.plugin.common.MethodChannel.Result
11 |
12 | class {{project_name.pascalCase()}}Plugin : FlutterPlugin, MethodCallHandler {
13 | private lateinit var channel: MethodChannel
14 | private var context: Context? = null
15 |
16 | override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
17 | channel = MethodChannel(flutterPluginBinding.binaryMessenger, "{{project_name.snakeCase()}}_android")
18 | channel.setMethodCallHandler(this)
19 | context = flutterPluginBinding.applicationContext
20 | }
21 |
22 | override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
23 | if (call.method == "getPlatformName") {
24 | result.success("Android")
25 | } else {
26 | result.notImplemented()
27 | }
28 | }
29 |
30 | override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
31 | channel.setMethodCallHandler(null)
32 | context = null
33 | }
34 | }
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/lib/{{project_name.snakeCase()}}_android.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/services.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 |
5 | /// The Android implementation of [{{project_name.pascalCase()}}Platform].
6 | class {{project_name.pascalCase()}}Android extends {{project_name.pascalCase()}}Platform {
7 | /// The method channel used to interact with the native platform.
8 | @visibleForTesting
9 | final methodChannel = const MethodChannel('{{project_name.snakeCase()}}_android');
10 |
11 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
12 | static void registerWith() {
13 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}Android();
14 | }
15 |
16 | @override
17 | Future getPlatformName() {
18 | return methodChannel.invokeMethod('getPlatformName');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_android
2 | description: Android implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | android:
14 | package: {{org_name.dotCase()}}
15 | pluginClass: {{project_name.pascalCase()}}Plugin
16 | dartPluginClass: {{project_name.pascalCase()}}Android
17 |
18 | dependencies:
19 | flutter:
20 | sdk: flutter
21 | {{project_name.snakeCase()}}_platform_interface:
22 | path: ../{{project_name.snakeCase()}}_platform_interface
23 |
24 | dev_dependencies:
25 | flutter_test:
26 | sdk: flutter
27 | plugin_platform_interface: ^2.0.0
28 | very_good_analysis: ^5.1.0
29 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/test/{{project_name.snakeCase()}}_android_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:{{project_name.snakeCase()}}_android/{{project_name.snakeCase()}}_android.dart';
4 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
5 |
6 | void main() {
7 | TestWidgetsFlutterBinding.ensureInitialized();
8 |
9 | group('{{project_name.pascalCase()}}Android', () {
10 | const kPlatformName = 'Android';
11 | late {{project_name.pascalCase()}}Android {{project_name.camelCase()}};
12 | late List log;
13 |
14 | setUp(() async {
15 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}Android();
16 |
17 | log = [];
18 | TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
19 | .setMockMethodCallHandler({{project_name.camelCase()}}.methodChannel, (methodCall) async {
20 | log.add(methodCall);
21 | switch (methodCall.method) {
22 | case 'getPlatformName':
23 | return kPlatformName;
24 | default:
25 | return null;
26 | }
27 | });
28 | });
29 |
30 | test('can be registered', () {
31 | {{project_name.pascalCase()}}Android.registerWith();
32 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}Android>());
33 | });
34 |
35 | test('getPlatformName returns correct name', () async {
36 | final name = await {{project_name.camelCase()}}.getPlatformName();
37 | expect(
38 | log,
39 | [isMethodCall('getPlatformName', arguments: null)],
40 | );
41 | expect(name, equals(kPlatformName));
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#android}}{{project_name.snakeCase()}}_android{{/android}}/{{#publishable}}CHANGELOG.md{{/publishable}}:
--------------------------------------------------------------------------------
1 | # 0.1.0+1
2 |
3 | - Initial release of this plugin.
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_ios
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The ios implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/ios/Classes/{{project_name.pascalCase()}}Plugin.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 |
4 | public class {{project_name.pascalCase()}}Plugin: NSObject, FlutterPlugin {
5 | public static func register(with registrar: FlutterPluginRegistrar) {
6 | let channel = FlutterMethodChannel(name: "{{project_name.snakeCase()}}_ios", binaryMessenger: registrar.messenger())
7 | let instance = {{project_name.pascalCase()}}Plugin()
8 | registrar.addMethodCallDelegate(instance, channel: channel)
9 | }
10 |
11 | public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
12 | result("iOS")
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/ios/{{project_name.snakeCase()}}_ios.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
3 | #
4 | Pod::Spec.new do |s|
5 | s.name = '{{project_name.snakeCase()}}_ios'
6 | s.version = '0.0.1'
7 | s.summary = 'An iOS implementation of the {{project_name.snakeCase()}} plugin.'
8 | s.description = <<-DESC
9 | An iOS implementation of the {{project_name.snakeCase()}} plugin.
10 | DESC
11 | s.homepage = 'http://example.com'
12 | s.license = { :type => 'BSD', :file => '../LICENSE' }
13 | s.author = { 'Your Company' => 'email@example.com' }
14 | s.source = { :path => '.' }
15 | s.source_files = 'Classes/**/*'
16 | s.dependency 'Flutter'
17 | s.platform = :ios, '9.0'
18 |
19 | # Flutter.framework does not contain a i386 slice.
20 | s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
21 | s.swift_version = '5.0'
22 | end
23 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/lib/{{project_name.snakeCase()}}_ios.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/services.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 |
5 | /// The iOS implementation of [{{project_name.pascalCase()}}Platform].
6 | class {{project_name.pascalCase()}}IOS extends {{project_name.pascalCase()}}Platform {
7 | /// The method channel used to interact with the native platform.
8 | @visibleForTesting
9 | final methodChannel = const MethodChannel('{{project_name.snakeCase()}}_ios');
10 |
11 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
12 | static void registerWith() {
13 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}IOS();
14 | }
15 |
16 | @override
17 | Future getPlatformName() {
18 | return methodChannel.invokeMethod('getPlatformName');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_ios
2 | description: iOS implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | ios:
14 | pluginClass: {{project_name.pascalCase()}}Plugin
15 | dartPluginClass: {{project_name.pascalCase()}}IOS
16 |
17 | dependencies:
18 | flutter:
19 | sdk: flutter
20 | {{project_name.snakeCase()}}_platform_interface:
21 | path: ../{{project_name.snakeCase()}}_platform_interface
22 |
23 | dev_dependencies:
24 | flutter_test:
25 | sdk: flutter
26 | plugin_platform_interface: ^2.0.0
27 | very_good_analysis: ^5.1.0
28 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/test/{{project_name.snakeCase()}}_ios_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:{{project_name.snakeCase()}}_ios/{{project_name.snakeCase()}}_ios.dart';
4 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
5 |
6 | void main() {
7 | TestWidgetsFlutterBinding.ensureInitialized();
8 |
9 | group('{{project_name.pascalCase()}}IOS', () {
10 | const kPlatformName = 'iOS';
11 | late {{project_name.pascalCase()}}IOS {{project_name.camelCase()}};
12 | late List log;
13 |
14 | setUp(() async {
15 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}IOS();
16 |
17 | log = [];
18 | TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
19 | .setMockMethodCallHandler({{project_name.camelCase()}}.methodChannel, (methodCall) async {
20 | log.add(methodCall);
21 | switch (methodCall.method) {
22 | case 'getPlatformName':
23 | return kPlatformName;
24 | default:
25 | return null;
26 | }
27 | });
28 | });
29 |
30 | test('can be registered', () {
31 | {{project_name.pascalCase()}}IOS.registerWith();
32 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}IOS>());
33 | });
34 |
35 | test('getPlatformName returns correct name', () async {
36 | final name = await {{project_name.camelCase()}}.getPlatformName();
37 | expect(
38 | log,
39 | [isMethodCall('getPlatformName', arguments: null)],
40 | );
41 | expect(name, equals(kPlatformName));
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#ios}}{{project_name.snakeCase()}}_ios{{/ios}}/{{#publishable}}CHANGELOG.md{{/publishable}}:
--------------------------------------------------------------------------------
1 | # 0.1.0+1
2 |
3 | - Initial release of this plugin.
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | build/
8 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_linux
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The linux implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
15 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/lib/src/{{project_name.snakeCase()}}_linux.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/services.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 |
5 | /// The Linux implementation of [{{project_name.pascalCase()}}Platform].
6 | class {{project_name.pascalCase()}}Linux extends {{project_name.pascalCase()}}Platform {
7 | /// The method channel used to interact with the native platform.
8 | @visibleForTesting
9 | final methodChannel = const MethodChannel('{{project_name.snakeCase()}}_linux');
10 |
11 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
12 | static void registerWith() {
13 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}Linux();
14 | }
15 |
16 | @override
17 | Future getPlatformName() {
18 | return methodChannel.invokeMethod('getPlatformName');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/lib/{{project_name.snakeCase()}}_linux.dart:
--------------------------------------------------------------------------------
1 | export 'src/{{project_name.snakeCase()}}_linux.dart';
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/linux/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/
2 |
3 | # Visual Studio user-specific files.
4 | *.suo
5 | *.user
6 | *.userosscache
7 | *.sln.docstates
8 |
9 | # Visual Studio build-related files.
10 | x64/
11 | x86/
12 |
13 | # Visual Studio cache files
14 | # files ending in .cache can be ignored
15 | *.[Cc]ache
16 | # but keep track of directories ending in .cache
17 | !*.[Cc]ache/
18 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/linux/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.10)
2 | set(PROJECT_NAME "{{project_name.snakeCase()}}_linux")
3 | project(${PROJECT_NAME} LANGUAGES CXX)
4 |
5 | set(PLUGIN_NAME "${PROJECT_NAME}_plugin")
6 |
7 | list(APPEND PLUGIN_SOURCES
8 | "{{project_name.snakeCase()}}_linux_plugin.cc"
9 | )
10 |
11 | add_library(${PLUGIN_NAME} SHARED
12 | ${PLUGIN_SOURCES}
13 | )
14 | apply_standard_settings(${PLUGIN_NAME})
15 | set_target_properties(${PLUGIN_NAME} PROPERTIES
16 | CXX_VISIBILITY_PRESET hidden)
17 | target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
18 | target_include_directories(${PLUGIN_NAME} INTERFACE
19 | "${CMAKE_CURRENT_SOURCE_DIR}/include")
20 | target_link_libraries(${PLUGIN_NAME} PRIVATE flutter)
21 | target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)
22 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/linux/include/{{project_name.snakeCase()}}_linux/{{project_name.snakeCase()}}_plugin.h:
--------------------------------------------------------------------------------
1 | #ifndef FLUTTER_PLUGIN_{{project_name.constantCase()}}_LINUX_PLUGIN_H_
2 | #define FLUTTER_PLUGIN_{{project_name.constantCase()}}_LINUX_PLUGIN_H_
3 |
4 | #include
5 |
6 | G_BEGIN_DECLS
7 |
8 | #ifdef FLUTTER_PLUGIN_IMPL
9 | #define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default")))
10 | #else
11 | #define FLUTTER_PLUGIN_EXPORT
12 | #endif
13 |
14 | G_DECLARE_FINAL_TYPE(Fl{{project_name.pascalCase()}}Plugin, fl_{{project_name.snakeCase()}}_plugin, FL,
15 | {{project_name.constantCase()}}_PLUGIN, GObject)
16 |
17 | FLUTTER_PLUGIN_EXPORT Fl{{project_name.pascalCase()}}Plugin* fl_{{project_name.snakeCase()}}_plugin_new(
18 | FlPluginRegistrar* registrar);
19 |
20 | FLUTTER_PLUGIN_EXPORT void {{project_name.snakeCase()}}_plugin_register_with_registrar(
21 | FlPluginRegistrar* registrar);
22 |
23 | G_END_DECLS
24 |
25 | #endif // FLUTTER_PLUGIN_{{project_name.constantCase()}}_LINUX_PLUGIN_H_
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_linux
2 | description: Linux implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | linux:
14 | pluginClass: {{project_name.pascalCase()}}Plugin
15 | dartPluginClass: {{project_name.pascalCase()}}Linux
16 |
17 | dependencies:
18 | flutter:
19 | sdk: flutter
20 | {{project_name.snakeCase()}}_platform_interface:
21 | path: ../{{project_name.snakeCase()}}_platform_interface
22 |
23 | dev_dependencies:
24 | flutter_test:
25 | sdk: flutter
26 | very_good_analysis: ^5.1.0
27 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/test/{{project_name.snakeCase()}}_linux_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:{{project_name.snakeCase()}}_linux/{{project_name.snakeCase()}}_linux.dart';
4 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
5 |
6 | void main() {
7 | TestWidgetsFlutterBinding.ensureInitialized();
8 |
9 | group('{{project_name.pascalCase()}}Linux', () {
10 | const kPlatformName = 'Linux';
11 | late {{project_name.pascalCase()}}Linux {{project_name.camelCase()}};
12 | late List log;
13 |
14 | setUp(() async {
15 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}Linux();
16 |
17 | log = [];
18 | TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
19 | .setMockMethodCallHandler({{project_name.camelCase()}}.methodChannel, (methodCall) async {
20 | log.add(methodCall);
21 | switch (methodCall.method) {
22 | case 'getPlatformName':
23 | return kPlatformName;
24 | default:
25 | return null;
26 | }
27 | });
28 | });
29 |
30 | test('can be registered', () {
31 | {{project_name.pascalCase()}}Linux.registerWith();
32 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}Linux>());
33 | });
34 |
35 | test('getPlatformName returns correct name', () async {
36 | final name = await {{project_name.camelCase()}}.getPlatformName();
37 | expect(
38 | log,
39 | [isMethodCall('getPlatformName', arguments: null)],
40 | );
41 | expect(name, equals(kPlatformName));
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#linux}}{{project_name.snakeCase()}}_linux{{/linux}}/{{#publishable}}CHANGELOG.md{{/publishable}}:
--------------------------------------------------------------------------------
1 | # 0.1.0+1
2 |
3 | - Initial release of this plugin.
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/.gitignore:
--------------------------------------------------------------------------------
1 | .packages
2 | .flutter-plugins
3 | pubspec.lock
4 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_macos
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The macos implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
15 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/lib/{{project_name.snakeCase()}}_macos.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/services.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 |
5 | /// The MacOS implementation of [{{project_name.pascalCase()}}Platform].
6 | class {{project_name.pascalCase()}}MacOS extends {{project_name.pascalCase()}}Platform {
7 | /// The method channel used to interact with the native platform.
8 | @visibleForTesting
9 | final methodChannel = const MethodChannel('{{project_name.snakeCase()}}_macos');
10 |
11 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
12 | static void registerWith() {
13 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}MacOS();
14 | }
15 |
16 | @override
17 | Future getPlatformName() {
18 | return methodChannel.invokeMethod('getPlatformName');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/macos/Classes/{{project_name.pascalCase()}}Plugin.swift:
--------------------------------------------------------------------------------
1 | import FlutterMacOS
2 | import Foundation
3 |
4 | public class {{project_name.pascalCase()}}Plugin: NSObject, FlutterPlugin {
5 | public static func register(with registrar: FlutterPluginRegistrar) {
6 | let channel = FlutterMethodChannel(
7 | name: "{{project_name.snakeCase()}}_macos",
8 | binaryMessenger: registrar.messenger)
9 | let instance = {{project_name.pascalCase()}}Plugin()
10 | registrar.addMethodCallDelegate(instance, channel: channel)
11 | }
12 |
13 | public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
14 | switch call.method {
15 | case "getPlatformName":
16 | result("MacOS")
17 | default:
18 | result(FlutterMethodNotImplemented)
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/macos/{{project_name.snakeCase()}}_macos.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
3 | #
4 | Pod::Spec.new do |s|
5 | s.name = '{{project_name.snakeCase()}}_macos'
6 | s.version = '0.0.1'
7 | s.summary = 'A macOS implementation of the {{project_name.snakeCase()}} plugin.'
8 | s.description = <<-DESC
9 | A macOS implementation of the {{project_name.snakeCase()}} plugin.
10 | DESC
11 | s.homepage = 'http://example.com'
12 | s.license = { :type => 'BSD', :file => '../LICENSE' }
13 | s.author = { 'Your Company' => 'email@example.com' }
14 | s.source = { :path => '.' }
15 | s.source_files = 'Classes/**/*'
16 | s.dependency 'FlutterMacOS'
17 |
18 | s.platform = :osx
19 | s.osx.deployment_target = '10.11'
20 | s.swift_version = '5.0'
21 | end
22 |
23 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_macos
2 | description: MacOS implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | macos:
14 | pluginClass: {{project_name.pascalCase()}}Plugin
15 | dartPluginClass: {{project_name.pascalCase()}}MacOS
16 |
17 | dependencies:
18 | flutter:
19 | sdk: flutter
20 | {{project_name.snakeCase()}}_platform_interface:
21 | path: ../{{project_name.snakeCase()}}_platform_interface
22 |
23 | dev_dependencies:
24 | flutter_test:
25 | sdk: flutter
26 | very_good_analysis: ^5.1.0
27 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/test/{{project_name.snakeCase()}}_macos_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:{{project_name.snakeCase()}}_macos/{{project_name.snakeCase()}}_macos.dart';
4 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
5 |
6 | void main() {
7 | TestWidgetsFlutterBinding.ensureInitialized();
8 |
9 | group('{{project_name.pascalCase()}}MacOS', () {
10 | const kPlatformName = 'MacOS';
11 | late {{project_name.pascalCase()}}MacOS {{project_name.camelCase()}};
12 | late List log;
13 |
14 | setUp(() async {
15 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}MacOS();
16 |
17 | log = [];
18 | TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
19 | .setMockMethodCallHandler({{project_name.camelCase()}}.methodChannel, (methodCall) async {
20 | log.add(methodCall);
21 | switch (methodCall.method) {
22 | case 'getPlatformName':
23 | return kPlatformName;
24 | default:
25 | return null;
26 | }
27 | });
28 | });
29 |
30 | test('can be registered', () {
31 | {{project_name.pascalCase()}}MacOS.registerWith();
32 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}MacOS>());
33 | });
34 |
35 | test('getPlatformName returns correct name', () async {
36 | final name = await {{project_name.camelCase()}}.getPlatformName();
37 | expect(
38 | log,
39 | [isMethodCall('getPlatformName', arguments: null)],
40 | );
41 | expect(name, equals(kPlatformName));
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#macos}}{{project_name.snakeCase()}}_macos{{/macos}}/{{#publishable}}CHANGELOG.md{{/publishable}}:
--------------------------------------------------------------------------------
1 | # 0.1.0+1
2 |
3 | - Initial release of this plugin.
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/.gitignore:
--------------------------------------------------------------------------------
1 | .packages
2 | .flutter-plugins
3 | pubspec.lock
4 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_web
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The web implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
15 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/lib/{{project_name.snakeCase()}}_web.dart:
--------------------------------------------------------------------------------
1 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
2 |
3 | /// The Web implementation of [{{project_name.pascalCase()}}Platform].
4 | class {{project_name.pascalCase()}}Web extends {{project_name.pascalCase()}}Platform {
5 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
6 | static void registerWith([Object? registrar]) {
7 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}Web();
8 | }
9 |
10 | @override
11 | Future getPlatformName() async => 'Web';
12 | }
13 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_web
2 | description: Web implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | web:
14 | pluginClass: {{project_name.pascalCase()}}Web
15 | fileName: {{project_name.snakeCase()}}_web.dart
16 |
17 | dependencies:
18 | flutter:
19 | sdk: flutter
20 | flutter_web_plugins:
21 | sdk: flutter
22 | {{project_name.snakeCase()}}_platform_interface:
23 | path: ../{{project_name.snakeCase()}}_platform_interface
24 |
25 | dev_dependencies:
26 | flutter_test:
27 | sdk: flutter
28 | very_good_analysis: ^5.1.0
29 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/test/{{project_name.snakeCase()}}_web_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_test/flutter_test.dart';
2 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
3 | import 'package:{{project_name.snakeCase()}}_web/{{project_name.snakeCase()}}_web.dart';
4 |
5 | void main() {
6 | TestWidgetsFlutterBinding.ensureInitialized();
7 |
8 | group('{{project_name.pascalCase()}}Web', () {
9 | const kPlatformName = 'Web';
10 | late {{project_name.pascalCase()}}Web {{project_name.camelCase()}};
11 |
12 | setUp(() async {
13 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}Web();
14 | });
15 |
16 | test('can be registered', () {
17 | {{project_name.pascalCase()}}Web.registerWith();
18 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}Web>());
19 | });
20 |
21 | test('getPlatformName returns correct name', () async {
22 | final name = await {{project_name.camelCase()}}.getPlatformName();
23 | expect(name, equals(kPlatformName));
24 | });
25 | });
26 | }
27 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#web}}{{project_name.snakeCase()}}_web{{/web}}/{{#publishable}}CHANGELOG.md{{/publishable}}:
--------------------------------------------------------------------------------
1 | # 0.1.0+1
2 |
3 | - Initial release of this plugin.
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
25 | /pubspec.lock
26 | **/doc/api/
27 | .dart_tool/
28 | .packages
29 | build/
30 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 77d935af4db863f6abd0b9c31c7e6df2a13de57b
8 | channel: stable
9 |
10 | project_type: plugin
11 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/README.md:
--------------------------------------------------------------------------------
1 | # {{project_name.snakeCase()}}_windows
2 |
3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4 |
5 | The windows implementation of `{{project_name.snakeCase()}}`.
6 |
7 | ## Usage
8 |
9 | This package is [endorsed][endorsed_link], which means you can simply use `{{project_name.snakeCase()}}`
10 | normally. This package will be automatically included in your app when you do.
11 |
12 | [endorsed_link]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
13 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
14 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
15 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml
2 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/lib/{{project_name.snakeCase()}}_windows.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/services.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 |
5 | /// The Windows implementation of [{{project_name.pascalCase()}}Platform].
6 | class {{project_name.pascalCase()}}Windows extends {{project_name.pascalCase()}}Platform {
7 | /// The method channel used to interact with the native platform.
8 | @visibleForTesting
9 | final methodChannel = const MethodChannel('{{project_name.snakeCase()}}_windows');
10 |
11 | /// Registers this class as the default instance of [{{project_name.pascalCase()}}Platform]
12 | static void registerWith() {
13 | {{project_name.pascalCase()}}Platform.instance = {{project_name.pascalCase()}}Windows();
14 | }
15 |
16 | @override
17 | Future getPlatformName() {
18 | return methodChannel.invokeMethod('getPlatformName');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: {{project_name.snakeCase()}}_windows
2 | description: Windows implementation of the {{project_name.snakeCase()}} plugin
3 | version: 0.1.0+1
4 | {{^publishable}}publish_to: none{{/publishable}}
5 |
6 | environment:
7 | sdk: ">=3.0.0 <4.0.0"
8 |
9 | flutter:
10 | plugin:
11 | implements: {{project_name.snakeCase()}}
12 | platforms:
13 | windows:
14 | pluginClass: {{project_name.pascalCase()}}Windows
15 | dartPluginClass: {{project_name.pascalCase()}}Windows
16 |
17 | dependencies:
18 | flutter:
19 | sdk: flutter
20 | {{project_name.snakeCase()}}_platform_interface:
21 | path: ../{{project_name.snakeCase()}}_platform_interface
22 |
23 | dev_dependencies:
24 | flutter_test:
25 | sdk: flutter
26 | very_good_analysis: ^5.1.0
27 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/test/{{project_name.snakeCase()}}_windows_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:{{project_name.snakeCase()}}_platform_interface/{{project_name.snakeCase()}}_platform_interface.dart';
4 | import 'package:{{project_name.snakeCase()}}_windows/{{project_name.snakeCase()}}_windows.dart';
5 |
6 | void main() {
7 | TestWidgetsFlutterBinding.ensureInitialized();
8 |
9 | group('{{project_name.pascalCase()}}Windows', () {
10 | const kPlatformName = 'Windows';
11 | late {{project_name.pascalCase()}}Windows {{project_name.camelCase()}};
12 | late List log;
13 |
14 | setUp(() async {
15 | {{project_name.camelCase()}} = {{project_name.pascalCase()}}Windows();
16 |
17 | log = [];
18 | TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
19 | .setMockMethodCallHandler({{project_name.camelCase()}}.methodChannel, (methodCall) async {
20 | log.add(methodCall);
21 | switch (methodCall.method) {
22 | case 'getPlatformName':
23 | return kPlatformName;
24 | default:
25 | return null;
26 | }
27 | });
28 | });
29 |
30 | test('can be registered', () {
31 | {{project_name.pascalCase()}}Windows.registerWith();
32 | expect({{project_name.pascalCase()}}Platform.instance, isA<{{project_name.pascalCase()}}Windows>());
33 | });
34 |
35 | test('getPlatformName returns correct name', () async {
36 | final name = await {{project_name.camelCase()}}.getPlatformName();
37 | expect(
38 | log,
39 | [isMethodCall('getPlatformName', arguments: null)],
40 | );
41 | expect(name, equals(kPlatformName));
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/windows/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/
2 |
3 | # Visual Studio user-specific files.
4 | *.suo
5 | *.user
6 | *.userosscache
7 | *.sln.docstates
8 |
9 | # Visual Studio build-related files.
10 | x64/
11 | x86/
12 |
13 | # Visual Studio cache files
14 | # files ending in .cache can be ignored
15 | *.[Cc]ache
16 | # but keep track of directories ending in .cache
17 | !*.[Cc]ache/
18 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/windows/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.14)
2 | set(PROJECT_NAME "{{project_name.snakeCase()}}_windows")
3 | project(${PROJECT_NAME} LANGUAGES CXX)
4 |
5 | set(PLUGIN_NAME "${PROJECT_NAME}_plugin")
6 |
7 | add_library(${PLUGIN_NAME} SHARED
8 | "{{project_name.snakeCase()}}_windows_plugin.cpp"
9 | "include/{{project_name.snakeCase()}}_windows/{{project_name.snakeCase()}}_windows.h"
10 | )
11 | apply_standard_settings(${PLUGIN_NAME})
12 | set_target_properties(${PLUGIN_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)
13 | target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
14 | target_include_directories(${PLUGIN_NAME} INTERFACE
15 | "${CMAKE_CURRENT_SOURCE_DIR}/include")
16 | target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)
17 |
18 | # List of absolute paths to libraries that should be bundled with the plugin
19 | set({{project_name.snakeCase()}}_bundled_libraries
20 | ""
21 | PARENT_SCOPE
22 | )
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/windows/include/{{project_name.snakeCase()}}_windows/{{project_name.snakeCase()}}_windows.h:
--------------------------------------------------------------------------------
1 | #ifndef FLUTTER_PLUGIN_{{project_name.constantCase()}}_WINDOWS_PLUGIN_H_
2 | #define FLUTTER_PLUGIN_{{project_name.constantCase()}}_WINDOWS_PLUGIN_H_
3 |
4 | #include
5 |
6 | #ifdef FLUTTER_PLUGIN_IMPL
7 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllexport)
8 | #else
9 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllimport)
10 | #endif
11 |
12 | #if defined(__cplusplus)
13 | extern "C" {
14 | #endif
15 |
16 | FLUTTER_PLUGIN_EXPORT void {{project_name.pascalCase()}}WindowsRegisterWithRegistrar(
17 | FlutterDesktopPluginRegistrarRef registrar);
18 |
19 | #if defined(__cplusplus)
20 | } // extern "C"
21 | #endif
22 |
23 | #endif // FLUTTER_PLUGIN_{{project_name.constantCase()}}_WINDOWS_PLUGIN_H_
24 |
--------------------------------------------------------------------------------
/brick/__brick__/{{project_name.snakeCase()}}/{{#windows}}{{project_name.snakeCase()}}_windows{{/windows}}/windows/{{project_name.snakeCase()}}_windows_plugin.cpp:
--------------------------------------------------------------------------------
1 | #include "include/{{project_name.snakeCase()}}_windows/{{project_name.snakeCase()}}_windows.h"
2 |
3 | // This must be included before many other Windows headers.
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | #include