├── .github └── workflows │ └── build_check_test.yml ├── .gitignore ├── .idea ├── libraries │ └── Dart_SDK.xml ├── modules.xml └── workspace.xml ├── .metadata ├── .vscode └── launch.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── backbone.iml ├── docs ├── docs.md └── example_app │ ├── .DS_Store │ ├── assets │ ├── AssetManifest.json │ ├── FontManifest.json │ ├── NOTICES │ ├── assets │ │ └── images │ │ │ └── dash.png │ ├── fonts │ │ └── MaterialIcons-Regular.otf │ └── packages │ │ └── cupertino_icons │ │ └── assets │ │ └── CupertinoIcons.ttf │ ├── canvaskit │ ├── canvaskit.js │ ├── canvaskit.wasm │ └── profiling │ │ ├── canvaskit.js │ │ └── canvaskit.wasm │ ├── favicon.png │ ├── flutter.js │ ├── flutter_service_worker.js │ ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png │ ├── index.html │ ├── main.dart.js │ ├── manifest.json │ └── version.json ├── example ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── 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 ├── assets │ └── images │ │ └── dash.png ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── 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 ├── lib │ ├── bouncer.dart │ ├── bouncer_counter.dart │ ├── dash.dart │ ├── game.dart │ ├── main.dart │ ├── message_systems.dart │ ├── messages.dart │ ├── systems.dart │ ├── template.dart │ └── template_bar.dart ├── linux │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ │ ├── CMakeLists.txt │ │ ├── generated_plugin_registrant.cc │ │ ├── generated_plugin_registrant.h │ │ └── generated_plugins.cmake │ ├── main.cc │ ├── my_application.cc │ └── my_application.h ├── macos │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── 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 ├── pubspec.yaml ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ ├── index.html │ ├── manifest.json │ └── worker.js └── windows │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── 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 ├── archetype.dart ├── backbone.dart ├── builders.dart ├── component_node.dart ├── filter.dart ├── iterable.dart ├── logging │ ├── log.dart │ └── no_op_log.dart ├── message.dart ├── node.dart ├── position_node.dart ├── prelude │ ├── input │ │ ├── key.dart │ │ ├── long.dart │ │ ├── mod.dart │ │ ├── plugins │ │ │ ├── drag.dart │ │ │ ├── hoverable.dart │ │ │ ├── selectable.dart │ │ │ └── taps.dart │ │ └── pointer.dart │ ├── mod.dart │ ├── sprite │ │ ├── mod.dart │ │ ├── system.dart │ │ └── trait.dart │ ├── text │ │ ├── mod.dart │ │ ├── system.dart │ │ └── trait.dart │ ├── time.dart │ └── transform.dart ├── realm.dart ├── realm_mixin.dart ├── system.dart ├── trait.dart └── widget.dart ├── pubspec.yaml ├── run_test.bat ├── run_test.sh └── test ├── archetype_test.dart ├── filter_test.dart ├── node_test.dart ├── query_test.dart ├── realm_test.dart ├── resource_test.dart ├── system_test.dart └── test_game.dart /.github/workflows/build_check_test.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Build, Check & Test 4 | 5 | # Controls when the workflow will run 6 | on: 7 | push: 8 | pull_request: 9 | 10 | # Allows you to run this workflow manually from the Actions tab 11 | workflow_dispatch: 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | jobs: 15 | # This workflow contains a single job called "build" 16 | build: 17 | # The type of runner that the job will run on 18 | runs-on: ubuntu-latest 19 | 20 | # Steps represent a sequence of tasks that will be executed as part of the job 21 | steps: 22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 23 | - uses: actions/checkout@v3 24 | # Flutter 25 | - uses: subosito/flutter-action@v2 26 | with: 27 | channel: 'stable' # or: 'beta', 'dev' or 'master' 28 | - run: flutter --version 29 | # Restore packages 30 | - name: Restore packages 31 | run: | 32 | flutter pub get 33 | # Run tests 34 | - name: Run flutter tests 35 | run: | 36 | flutter analyze 37 | flutter test --coverage . 38 | - name: Upload coverage to codecov 39 | run: | 40 | curl -Os https://uploader.codecov.io/latest/linux/codecov 41 | chmod +x codecov 42 | ./codecov 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.lock 4 | *.log 5 | *.pyc 6 | *.swp 7 | .DS_Store 8 | .atom/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # Visual Studio Code related 20 | .classpath 21 | .project 22 | .settings/ 23 | .vscode/ 24 | 25 | # Flutter repo-specific 26 | /bin/cache/ 27 | /bin/internal/bootstrap.bat 28 | /bin/internal/bootstrap.sh 29 | /bin/mingit/ 30 | /dev/benchmarks/mega_gallery/ 31 | /dev/bots/.recipe_deps 32 | /dev/bots/android_tools/ 33 | /dev/devicelab/ABresults*.json 34 | /dev/docs/doc/ 35 | /dev/docs/flutter.docs.zip 36 | /dev/docs/lib/ 37 | /dev/docs/pubspec.yaml 38 | /dev/integration_tests/**/xcuserdata 39 | /dev/integration_tests/**/Pods 40 | /packages/flutter/coverage/ 41 | version 42 | analysis_benchmark.json 43 | 44 | # packages file containing multi-root paths 45 | .packages.generated 46 | 47 | # Flutter/Dart/Pub related 48 | **/doc/api/ 49 | .dart_tool/ 50 | .flutter-plugins 51 | .flutter-plugins-dependencies 52 | **/generated_plugin_registrant.dart 53 | .packages 54 | .pub-cache/ 55 | .pub/ 56 | build/ 57 | flutter_*.png 58 | linked_*.ds 59 | unlinked.ds 60 | unlinked_spec.ds 61 | 62 | # Android related 63 | **/android/**/gradle-wrapper.jar 64 | .gradle/ 65 | **/android/captures/ 66 | **/android/gradlew 67 | **/android/gradlew.bat 68 | **/android/local.properties 69 | **/android/**/GeneratedPluginRegistrant.java 70 | **/android/key.properties 71 | *.jks 72 | 73 | # iOS/XCode related 74 | **/ios/**/*.mode1v3 75 | **/ios/**/*.mode2v3 76 | **/ios/**/*.moved-aside 77 | **/ios/**/*.pbxuser 78 | **/ios/**/*.perspectivev3 79 | **/ios/**/*sync/ 80 | **/ios/**/.sconsign.dblite 81 | **/ios/**/.tags* 82 | **/ios/**/.vagrant/ 83 | **/ios/**/DerivedData/ 84 | **/ios/**/Icon? 85 | **/ios/**/Pods/ 86 | **/ios/**/.symlinks/ 87 | **/ios/**/profile 88 | **/ios/**/xcuserdata 89 | **/ios/.generated/ 90 | **/ios/Flutter/.last_build_id 91 | **/ios/Flutter/App.framework 92 | **/ios/Flutter/Flutter.framework 93 | **/ios/Flutter/Flutter.podspec 94 | **/ios/Flutter/Generated.xcconfig 95 | **/ios/Flutter/ephemeral 96 | **/ios/Flutter/app.flx 97 | **/ios/Flutter/app.zip 98 | **/ios/Flutter/flutter_assets/ 99 | **/ios/Flutter/flutter_export_environment.sh 100 | **/ios/ServiceDefinitions.json 101 | **/ios/Runner/GeneratedPluginRegistrant.* 102 | 103 | # macOS 104 | **/Flutter/ephemeral/ 105 | **/Pods/ 106 | **/macos/Flutter/GeneratedPluginRegistrant.swift 107 | **/macos/Flutter/ephemeral 108 | **/xcuserdata/ 109 | 110 | # Windows 111 | **/windows/flutter/generated_plugin_registrant.cc 112 | **/windows/flutter/generated_plugin_registrant.h 113 | **/windows/flutter/generated_plugins.cmake 114 | 115 | # Linux 116 | **/linux/flutter/generated_plugin_registrant.cc 117 | **/linux/flutter/generated_plugin_registrant.h 118 | **/linux/flutter/generated_plugins.cmake 119 | 120 | # Coverage 121 | coverage/ 122 | 123 | # Symbols 124 | app.*.symbols 125 | 126 | # Exceptions to above rules. 127 | !**/ios/**/default.mode1v3 128 | !**/ios/**/default.mode2v3 129 | !**/ios/**/default.pbxuser 130 | !**/ios/**/default.perspectivev3 131 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 132 | !/dev/ci/**/Gemfile.lock -------------------------------------------------------------------------------- /.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /.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: f1875d570e39de09040c8f79aa13cc56baab8db1 8 | channel: stable 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "backbone", 9 | "request": "launch", 10 | "type": "dart" 11 | }, 12 | { 13 | "name": "backbone (profile mode)", 14 | "request": "launch", 15 | "type": "dart", 16 | "flutterMode": "profile" 17 | }, 18 | { 19 | "name": "backbone (release mode)", 20 | "request": "launch", 21 | "type": "dart", 22 | "flutterMode": "release" 23 | }, 24 | { 25 | "name": "benchmark", 26 | "cwd": "benchmark", 27 | "request": "launch", 28 | "type": "dart" 29 | }, 30 | { 31 | "name": "benchmark (profile mode)", 32 | "cwd": "benchmark", 33 | "request": "launch", 34 | "type": "dart", 35 | "flutterMode": "profile" 36 | }, 37 | { 38 | "name": "benchmark (release mode)", 39 | "cwd": "benchmark", 40 | "request": "launch", 41 | "type": "dart", 42 | "flutterMode": "release" 43 | }, 44 | { 45 | "name": "example", 46 | "cwd": "example", 47 | "request": "launch", 48 | "type": "dart" 49 | }, 50 | { 51 | "name": "example (profile mode)", 52 | "cwd": "example", 53 | "request": "launch", 54 | "type": "dart", 55 | "flutterMode": "profile" 56 | }, 57 | { 58 | "name": "example (release mode)", 59 | "cwd": "example", 60 | "request": "launch", 61 | "type": "dart", 62 | "flutterMode": "release" 63 | }, 64 | { 65 | "name": "prefmon", 66 | "cwd": "prefmon", 67 | "request": "launch", 68 | "type": "dart" 69 | }, 70 | { 71 | "name": "prefmon (profile mode)", 72 | "cwd": "prefmon", 73 | "request": "launch", 74 | "type": "dart", 75 | "flutterMode": "profile" 76 | }, 77 | { 78 | "name": "prefmon (release mode)", 79 | "cwd": "prefmon", 80 | "request": "launch", 81 | "type": "dart", 82 | "flutterMode": "release" 83 | } 84 | ] 85 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.1 2 | 3 | * TODO: Describe initial release. 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | TODO: Add your license here. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # backbone 2 | ## What is backbone? 3 | Lightweight, ECS-like package for Flame and Flutter. Backbone doesn't seek to replace the component system in Flame, it extends it by ECS patterns and a unified multi-platform input system. 4 | 5 | ## Is it ready for production? 6 | *No*, we are still working on this package, currently we are using it in a not yet announced project. 7 | 8 | ## What does backbone do for me? 9 | It helps you to organize and structure features of your game and still use the many great features Flame ships. With backbone you can also increase the reusability of code. Backbone comes with a some build in features to support you. 10 | 11 | - Multiplatform input system for: 12 | - Taps 13 | - Drags 14 | - Long press 15 | - Keyboard events 16 | - All pointer types are supported (touch, mouse, stylus) 17 | - Message system to decouple game elements from each other 18 | - Fast queries for your nodes (game elements) 19 | 20 | ## Can I use backbone beside the existing component system? 21 | Yes! Backbone doesn't try to replace the component system at all. You can see it as an addition/upgrade to it. 22 | 23 | ## Is it only something for new projects? 24 | No! You can add backbone to any Flame game and use it alongside the existing components. 25 | 26 | ## Do you have an example? 27 | Yes, there is simple example application that showcases all basic uses-cases of backbone. The code for the app can be found in [example](https://github.com/sturdykeep/backbone/tree/main/example/lib), a [live demo can be found here](https://sturdykeep.github.io/backbone/example_app/). 28 | 29 | ## Check out the docs 30 | Check out our [documentation here](https://github.com/sturdykeep/backbone/blob/main/docs/docs.md) in the repository or directly in the code. 31 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | # Additional information about this file can be found at 4 | # https://dart.dev/guides/language/analysis-options 5 | -------------------------------------------------------------------------------- /backbone.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/docs.md: -------------------------------------------------------------------------------- 1 | # Placeholder -------------------------------------------------------------------------------- /docs/example_app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/.DS_Store -------------------------------------------------------------------------------- /docs/example_app/assets/AssetManifest.json: -------------------------------------------------------------------------------- 1 | {"assets/images/dash.png":["assets/images/dash.png"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} -------------------------------------------------------------------------------- /docs/example_app/assets/FontManifest.json: -------------------------------------------------------------------------------- 1 | [{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] -------------------------------------------------------------------------------- /docs/example_app/assets/assets/images/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/assets/images/dash.png -------------------------------------------------------------------------------- /docs/example_app/assets/fonts/MaterialIcons-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/fonts/MaterialIcons-Regular.otf -------------------------------------------------------------------------------- /docs/example_app/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf -------------------------------------------------------------------------------- /docs/example_app/canvaskit/canvaskit.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/canvaskit/canvaskit.wasm -------------------------------------------------------------------------------- /docs/example_app/canvaskit/profiling/canvaskit.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/canvaskit/profiling/canvaskit.wasm -------------------------------------------------------------------------------- /docs/example_app/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/favicon.png -------------------------------------------------------------------------------- /docs/example_app/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-192.png -------------------------------------------------------------------------------- /docs/example_app/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-512.png -------------------------------------------------------------------------------- /docs/example_app/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /docs/example_app/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /docs/example_app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | example 34 | 35 | 36 | 40 | 41 | 42 | 43 | 44 | 45 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /docs/example_app/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "short_name": "example", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /docs/example_app/version.json: -------------------------------------------------------------------------------- 1 | {"app_name":"example","version":"1.0.0","build_number":"1","package_name":"example"} -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Web related 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | -------------------------------------------------------------------------------- /example/.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. 5 | 6 | version: 7 | revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 17 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 18 | - platform: android 19 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 20 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 21 | - platform: ios 22 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 23 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 24 | - platform: linux 25 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 26 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 27 | - platform: macos 28 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 29 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 30 | - platform: web 31 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 32 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 33 | - platform: windows 34 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 35 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Example is comming soons -------------------------------------------------------------------------------- /example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /example/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /example/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion flutter.compileSdkVersion 30 | ndkVersion flutter.ndkVersion 31 | 32 | compileOptions { 33 | sourceCompatibility JavaVersion.VERSION_1_8 34 | targetCompatibility JavaVersion.VERSION_1_8 35 | } 36 | 37 | kotlinOptions { 38 | jvmTarget = '1.8' 39 | } 40 | 41 | sourceSets { 42 | main.java.srcDirs += 'src/main/kotlin' 43 | } 44 | 45 | defaultConfig { 46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 47 | applicationId "com.example.example" 48 | // You can update the following values to match your application needs. 49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. 50 | minSdkVersion flutter.minSdkVersion 51 | targetSdkVersion flutter.targetSdkVersion 52 | versionCode flutterVersionCode.toInteger() 53 | versionName flutterVersionName 54 | } 55 | 56 | buildTypes { 57 | release { 58 | // TODO: Add your own signing config for the release build. 59 | // Signing with the debug keys for now, so `flutter run --release` works. 60 | signingConfig signingConfigs.debug 61 | } 62 | } 63 | } 64 | 65 | flutter { 66 | source '../..' 67 | } 68 | 69 | dependencies { 70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 71 | } 72 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 15 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /example/android/app/src/main/kotlin/com/example/example/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.example 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.6.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 7 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /example/assets/images/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/assets/images/dash.png -------------------------------------------------------------------------------- /example/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleDisplayName 10 | Example 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | example 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | $(FLUTTER_BUILD_NAME) 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | $(FLUTTER_BUILD_NUMBER) 27 | LSRequiresIPhoneOS 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /example/lib/bouncer.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:backbone/position_node.dart'; 4 | import 'package:backbone/prelude/input/plugins/hoverable.dart'; 5 | import 'package:backbone/prelude/input/plugins/selectable.dart'; 6 | import 'package:backbone/prelude/input/plugins/taps.dart'; 7 | import 'package:backbone/prelude/transform.dart'; 8 | import 'package:backbone/trait.dart'; 9 | import 'package:flame/components.dart'; 10 | import 'package:flame/extensions.dart'; 11 | import 'package:flutter/material.dart'; 12 | 13 | /// Marker trait for entities that can be bounced. 14 | class BouncerTrait extends ATrait { 15 | final Vector2 direction; 16 | final double speed; 17 | 18 | BouncerTrait(this.direction, this.speed); 19 | } 20 | 21 | class BouncerNode extends PositionNode { 22 | final Color color; 23 | 24 | var oldColor = Colors.white; 25 | var hovered = false; 26 | var selected = false; 27 | 28 | Paint get currentPaint => (children.first as RectangleComponent).paint; 29 | 30 | Color colorFromFlags() { 31 | if (hovered) { 32 | return Colors.red; 33 | } else if (selected) { 34 | return Colors.blue; 35 | } else { 36 | return color; 37 | } 38 | } 39 | 40 | BouncerNode( 41 | Vector2 size, 42 | this.color, 43 | Vector2 direction, 44 | double speed, 45 | ) : super( 46 | transformTrait: TransformTrait()..size = size, 47 | ) { 48 | // Receive tap ups 49 | final tappableTrait = TappableTrait( 50 | onJustReleased: (pointer) { 51 | if (pointer.handled == false) { 52 | debugPrint('Bouncer tapped'); 53 | } 54 | }, 55 | ); 56 | addTrait(tappableTrait); 57 | 58 | oldColor = color; 59 | // Receive hover 60 | final hoverableTrait = HoverableTrait( 61 | onHoverEnter: (pointer) { 62 | hovered = true; 63 | currentPaint.color = colorFromFlags(); 64 | }, 65 | onHoverExit: (pointer) { 66 | hovered = false; 67 | currentPaint.color = colorFromFlags(); 68 | }, 69 | ); 70 | addTrait(hoverableTrait); 71 | 72 | // Selectable trait 73 | final selectableTrait = SelectableTrait( 74 | onSelected: (pointer) { 75 | selected = true; 76 | currentPaint.color = colorFromFlags(); 77 | pointer?.handled = true; 78 | return true; 79 | }, 80 | onDeselected: (pointer) { 81 | selected = false; 82 | currentPaint.color = colorFromFlags(); 83 | pointer?.handled = true; 84 | return true; 85 | }, 86 | ); 87 | addTrait(selectableTrait); 88 | 89 | addTrait(BouncerTrait( 90 | direction, 91 | speed, 92 | )); 93 | } 94 | 95 | @override 96 | FutureOr onLoad() { 97 | // Add child components here 98 | add(RectangleComponent( 99 | size: transformTrait.size, paint: Paint()..color = color)); 100 | 101 | return super.onLoad(); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /example/lib/bouncer_counter.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:backbone/filter.dart'; 4 | import 'package:backbone/position_node.dart'; 5 | import 'package:backbone/prelude/text/trait.dart'; 6 | import 'package:backbone/prelude/transform.dart'; 7 | import 'package:backbone/realm.dart'; 8 | import 'package:backbone/trait.dart'; 9 | import 'package:example/bouncer.dart'; 10 | import 'package:flame/components.dart'; 11 | 12 | class BouncerCounterTrait extends ATrait {} 13 | 14 | class BouncerCounterNode extends PositionNode { 15 | BouncerCounterNode() 16 | : super(transformTrait: TransformTrait()..position = Vector2(10, 10)) { 17 | addTrait(TextTrait()); 18 | addTrait(BouncerCounterTrait()); 19 | } 20 | 21 | @override 22 | FutureOr onLoad() { 23 | add(TextComponent()); 24 | return super.onLoad(); 25 | } 26 | } 27 | 28 | void bouncerCounterSystem(Realm realm) { 29 | final totalBouncer = realm.query(Has([BouncerTrait])).length; 30 | final counterNodes = realm.query(Has([BouncerCounterTrait, TextTrait])); 31 | for (final node in counterNodes) { 32 | node.get().text = "Bouncer: $totalBouncer"; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /example/lib/dash.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:backbone/position_node.dart'; 4 | import 'package:backbone/prelude/sprite/trait.dart'; 5 | import 'package:backbone/prelude/transform.dart'; 6 | import 'package:example/bouncer.dart'; 7 | import 'package:flame/components.dart'; 8 | 9 | class DashNode extends PositionNode { 10 | DashNode({ 11 | required Vector2 direction, 12 | required double speed, 13 | }) : super( 14 | transformTrait: TransformTrait()..size = Vector2(35, 35), 15 | ) { 16 | final spriteTrait = SpriteTrait(); 17 | addTrait(spriteTrait); 18 | addTrait(BouncerTrait( 19 | direction, 20 | speed, 21 | )); 22 | } 23 | 24 | @override 25 | FutureOr onLoad() async { 26 | final spriteTrait = get(); 27 | spriteTrait.sprite = await gameRef.loadSprite('dash.png'); 28 | add(SpriteComponent(sprite: spriteTrait.sprite)); 29 | return super.onLoad(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /example/lib/game.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:backbone/backbone.dart'; 4 | import 'package:backbone/builders.dart'; 5 | import 'package:backbone/logging/log.dart'; 6 | import 'package:backbone/realm_mixin.dart'; 7 | import 'package:example/bouncer.dart'; 8 | import 'package:example/bouncer_counter.dart'; 9 | import 'package:example/message_systems.dart'; 10 | import 'package:example/systems.dart'; 11 | import 'package:flame/events.dart'; 12 | import 'package:flame/experimental.dart'; 13 | import 'package:flame/game.dart'; 14 | import 'package:flutter/foundation.dart'; 15 | import 'package:flutter/material.dart'; 16 | import 'package:perfmon_logger/perfmon_logger.dart'; 17 | 18 | import 'template_bar.dart'; 19 | import 'messages.dart'; 20 | 21 | class MainGame extends FlameGame 22 | with 23 | HasTappableComponents, 24 | HasDraggableComponents, 25 | KeyboardEvents, 26 | HasRealm { 27 | @override 28 | Future onLoad() async { 29 | Log? logger; 30 | if (kProfileMode) { 31 | logger = PerfmonLogger(); 32 | } 33 | realm = RealmBuilder() 34 | .withPlugin(defaultPlugin) 35 | .withTrait(BouncerTrait) 36 | .withTrait(GameResizeTrait) 37 | .withTrait(TemplateSpawnerTrait) 38 | .withTrait(BouncerCounterTrait) 39 | .withSystem(bouncerCounterSystem) 40 | .withSystem(bounceSystem) 41 | .withSystem(tapSpawnSystem) 42 | .withSystem(deleteRemoveSystem) 43 | .withMessageSystem(removeBounceMessageSystem) 44 | .withMessageSystem(resizeMessageSystem) 45 | .build(realmLogger: logger); 46 | add(realm); 47 | 48 | // Generate some bouncers 49 | final rng = Random(); 50 | for (var i = 0; i < 5; i++) { 51 | final bouncer = BouncerNode( 52 | Vector2.all(50.0 + 50.0 * rng.nextDouble()), 53 | Color.fromARGB( 54 | 255, 55 | (rng.nextDouble() * 255.0).toInt(), 56 | (rng.nextDouble() * 255.0).toInt(), 57 | (rng.nextDouble() * 255.0).toInt()), 58 | (Vector2.all(-1.0) + Vector2.random(rng) * 2.0), 59 | 200.0 + 200.0 * rng.nextDouble()); 60 | bouncer.transformTrait.position = 61 | Vector2(canvasSize.x / 2, canvasSize.y / 2); 62 | realm.add(bouncer); 63 | } 64 | realm.add(TemplateBar(size)); 65 | realm.add(BouncerCounterNode()); 66 | realmReady = true; 67 | } 68 | 69 | @override 70 | void onGameResize(Vector2 canvasSize) { 71 | super.onGameResize(canvasSize); 72 | if (realmReady) { 73 | realm.pushMessage(GameResizseMessage()); 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:example/game.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:backbone/widget.dart'; 4 | 5 | void main() async { 6 | // Spin up Flutter 7 | WidgetsFlutterBinding.ensureInitialized(); 8 | // Start the actual app 9 | runApp( 10 | BackboneGameWidget( 11 | game: MainGame(), 12 | ), 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /example/lib/message_systems.dart: -------------------------------------------------------------------------------- 1 | import 'package:backbone/filter.dart'; 2 | import 'package:backbone/message.dart'; 3 | import 'package:backbone/realm.dart'; 4 | import 'package:example/template_bar.dart'; 5 | import 'package:example/messages.dart'; 6 | 7 | bool removeBounceMessageSystem(Realm realm, AMessage message) { 8 | if (message is RemoveBouncerMessage) { 9 | message.bouncer.removeFromParent(); 10 | return true; 11 | } 12 | return false; 13 | } 14 | 15 | bool resizeMessageSystem(Realm realm, AMessage message) { 16 | if (message is GameResizseMessage) { 17 | final nodes = realm.query(Has([GameResizeTrait])); 18 | for (var element in nodes) { 19 | element.get().resized(); 20 | } 21 | return true; 22 | } 23 | return false; 24 | } 25 | -------------------------------------------------------------------------------- /example/lib/messages.dart: -------------------------------------------------------------------------------- 1 | import 'package:backbone/message.dart'; 2 | import 'package:example/bouncer.dart'; 3 | 4 | class RemoveBouncerMessage extends AMessage { 5 | final BouncerNode bouncer; 6 | 7 | RemoveBouncerMessage(this.bouncer); 8 | } 9 | 10 | class GameResizseMessage extends AMessage {} 11 | -------------------------------------------------------------------------------- /example/lib/systems.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:backbone/filter.dart'; 4 | import 'package:backbone/position_node.dart'; 5 | import 'package:backbone/prelude/input/mod.dart'; 6 | import 'package:backbone/prelude/input/plugins/selectable.dart'; 7 | import 'package:backbone/prelude/time.dart'; 8 | import 'package:backbone/prelude/transform.dart'; 9 | import 'package:backbone/realm.dart'; 10 | import 'package:example/bouncer.dart'; 11 | import 'package:example/dash.dart'; 12 | import 'package:example/messages.dart'; 13 | import 'package:flame/extensions.dart'; 14 | import 'package:flutter/services.dart'; 15 | 16 | import 'template_bar.dart'; 17 | 18 | /// System that bounces boxes off screen edges 19 | void bounceSystem(Realm realm) { 20 | final time = realm.getResource